3 min read

WPML Database Bloat, WooCommerce, and Import Hygiene

A multilingual WooCommerce store naturally has more database rows than a single-language store. Each translated product, category, and page needs language-specific records and relationship data. A larger database is therefore not proof that WPML is broken or that SEO performance is suffering.

The useful question is whether the growth represents valid content or avoidable clutter: duplicate products, abandoned terms, broken relationships, and repeated imports that never matched their intended records.

Separate expected growth from bad data

Expected multilingual growth includes:

  • one content record per language version;
  • WPML translation relationship rows;
  • translated taxonomy terms;
  • WooCommerce product and variation metadata;
  • revision, cache, and plugin data created by normal operation.

Suspicious growth is more specific. Look for several products with the same supposed stable identity, language versions that are not connected, terms whose parents no longer exist, or repeated batches that create new records instead of updates.

Measure before assigning a cause. Page speed, query time, crawling, and Core Web Vitals can be affected by hosting, themes, extensions, object caching, front-end assets, and database health. Do not attribute them to “WPML bloat” without evidence.

Import identity is the first hygiene control

For normal cross-store products, use SKU as the stable key. In a multilingual Matrix workflow, Matrix ID / External ID can provide source identity. WordPress post IDs, term IDs, and WPML trid values belong to one installation.

When the key is unstable or unmapped, a repeat import may create another product set. That multiplies WooCommerce metadata and can leave the language switcher with ambiguous or missing relationships.

Test the same sample twice on staging. The second run should update the intended records.

Matrix Mode keeps translations together

Separate language files need a dependable linking strategy. Matrix Mode keeps fields such as title|en and title|de beside one shared identity, allowing Shirely to create or update WPML relationships through supported paths.

For categories, source_id and parent_source_id preserve hierarchy without copying local term IDs across environments.

This structure reduces import-created clutter. It is not a cleanup tool for an already inconsistent database.

Diagnose through supported interfaces first

Begin with the affected products or categories in WordPress and WPML. Confirm language assignment, translation partners, local IDs, SKU, and front-end URLs.

Database inspection can help an experienced developer understand a problem, but icl_translations is part of a wider WPML model. Deleting rows directly on production can leave other state inconsistent. Take a backup, reproduce the issue on staging, and use WPML-aware maintenance or supported editing paths for repair.

Keep the diagnosis scoped. If ten products are broken, do not start by modifying every translation row in the database.

Prevent overlap in scheduled catalog work

Shirely 1.3 can run saved imports through Automation and WP-CLI. A lock for one slot is not a global import lock. If a manual wizard, Automation slot, or CLI process can modify the same products, terms, or WPML/WCML groups, run them sequentially.

Review Run History after scheduled jobs. WP-Cron is traffic-driven and may start later than its nominal interval; a system cron calling WP-CLI is more predictable for large maintenance windows.

A practical hygiene routine

  • Keep a current database backup.
  • Use stable source identifiers.
  • Preview a representative sample.
  • Re-import the sample to prove update behavior.
  • Inspect warnings rather than suppressing them.
  • Check products and language relationships on staging.
  • Sequence overlapping writers.
  • Investigate measured symptoms before deleting data.

Good import hygiene cannot make a large multilingual database small, nor should it. It helps ensure the rows represent intentional catalog data.

For the relationship model, read WPML icl_translations explained and the guide to diagnosing a wrong language-switcher destination.