Get a fast, conversion-focused WooCommerce theme in 2026. Switch to Shoptimizer.

Home Documentation CommerceGurus Turbo WPML Multilingual Plugin Compatibility

WPML Multilingual Plugin Compatibility

Yes, CommerceGurus Turbo generally works with WPML.

The important detail is how WPML structures your language URLs. CommerceGurus Turbo supports languages that live on the same hostname. The current limitation is setups where every language uses its own subdomain or domain.

The quick answer

If your language URLs look like this, you’re good to go:

  • example.com/
  • example.com/fr/
  • example.com/de/

These are different language directories on the same hostname, and they’re the WPML configuration we recommend when using CommerceGurus Turbo.

Language parameters are also supported:

  • example.com/?lang=en
  • example.com/?lang=fr
  • example.com/?lang=de

If your language URLs look like either of the following, full-page caching is not currently supported:

  • en.example.com, fr.example.com, de.example.com
  • example.com, example.fr, example.de

This limitation applies specifically to Turbo’s Page Cache and Cloudflare Edge Cache. It doesn’t mean that WPML itself is unsupported.

What’s supported?

WPML language URL format Page Cache Cloudflare Edge Cache
example.com/fr/ Yes Yes
example.com/?lang=fr Yes Yes
fr.example.com No No
example.fr No No

Other CommerceGurus Turbo features, such as CSS optimization, JavaScript optimization, lazy loading, and resource preloading, can still be used on multilingual sites. As always, test your language switcher and translated storefront after enabling optimization features.

Why do directories work?

With language directories, every translated page already has its own unique path:

  • example.com/product/
  • example.com/fr/product/
  • example.com/de/product/

That makes caching relatively straightforward. Each language has a separate URL, but everything still belongs to the same site hostname and Cloudflare configuration.

CommerceGurus Turbo can store each page separately, purge the translated URLs when content changes, and cache those pages at Cloudflare’s edge.

Why are subdomains and separate domains more complicated?

A subdomain setup can have several pages with exactly the same path:

  • en.example.com/product/
  • fr.example.com/product/
  • de.example.com/product/

The path is /product/ every time. The hostname is the only thing identifying the language.

That means every part of the caching system has to understand the hostname – not just the cache file itself. The plugin would need to:

  • Create a completely separate cache partition for every language hostname.
  • Ensure the PHP, Apache, and Nginx serving rules always select the correct partition.
  • Create safe Cloudflare Cache Rules for every hostname.
  • Purge every translated hostname when a product or page changes.
  • Warm every hostname after a cache purge.
  • Detect changes when languages, domains, or URL formats are added or removed.
  • Prevent one language’s cached HTML from ever being served on another language’s hostname.

That’s certainly complex 🙂

Separate domains add another complication: example.com and example.fr may belong to different Cloudflare zones. Each zone can have its own API access, cache rules, purge operations, and settings.

Getting any part of that wrong could show a visitor the wrong language. For that reason, CommerceGurus Turbo takes the safer approach and does not currently enable full-page caching for these configurations.

Which WPML setting should I use?

For the best compatibility, go to:

WPML → Languages → Language URL format

Choose the option that places different languages in directories.

For example:

  • English: example.com/
  • French: example.com/fr/
  • German: example.com/de/

This gives you the simplest setup and allows CommerceGurus Turbo’s Page Cache and Cloudflare Edge Cache to work across your translated pages.

What about cache purging?

When you update a page, post, or product, CommerceGurus Turbo asks WPML for its translated URLs and purges those versions as well.

For example, updating:

example.com/product/

can also purge:

  • example.com/fr/product/
  • example.com/de/product/

This prevents an older translation from remaining in the cache after the original content changes.

What about cache warming?

CommerceGurus Turbo warms pages using the URLs in your XML sitemap.

If your translated directory URLs are present in the sitemap, they can be warmed along with the original-language pages.

With language parameters, translated pages can still be cached when someone visits them, but they may not all be warmed automatically. Language subdomains and separate language domains are not currently warmed by Turbo.

Success!

The discount has been applied. You will see it when you checkout.

There has been a problem

Unfortunately this discount cannot be applied to your cart.

$50
Off

Do you want a whopping $50 off Shoptimizer for WooCommerce?

Click the button below to get Shoptimizer for only $49. (Regular price: $99).
This is a special launch offer for today only.
Get it before it is gone!