SEO: hreflang, sitemaps and canonical
- hreflang — every page lists the versions in the other published languages in the
<head>. A draft language is not announced, neither here nor in the sitemap. - Canonical and
og:url— on translated pages they point to the translated address, with WordPress alone or with Yoast SEO, Rank Math or Slim SEO. A canonical pointing to the original page would tell Google the translation is duplicate content. - Sitemap — the plugin has no sitemap of its own: it adds the translated pages to the one you already have and already submitted to Search Console.
- Yoast SEO, Rank Math and Slim SEO — each page gets one
<url>per language, with all versions in<xhtml:link hreflang>, as Google recommends. - No SEO plugin — the WordPress
wp-sitemap.xmlgets one sitemap per language.
- Yoast SEO, Rank Math and Slim SEO — each page gets one
- Saving the languages clears the Rank Math and Yoast sitemap cache, so a new language shows up right away.
- Structured data (JSON-LD) — what Google shows in search results: the product name and description, the breadcrumb, the page title, written by WooCommerce and the SEO plugins. On translated pages it uses the same translations as the page, and the site’s links inside it point to the translated addresses. It uses no characters. A text that only exists in the JSON-LD, and on no page, stays in the source language.
- Addresses are translated — see Translated addresses.
URLs, search and dates
Translated addresses
With Settings → Translated addresses on, every address is in the reader’s language — pages, posts, products, categories, tags, custom post types and taxonomies, the bases and the WooCommerce endpoints: /product/linen-blouse/ becomes /de/produkt/leinenbluse/, and /my-account/orders/ becomes /de/mein-konto/bestellungen/. It is what Google recommends. It is on for new installs; a site that updates keeps the addresses it has until you turn it on.
- Nothing breaks. The source-language address with the prefix redirects with a 301 to the translated one, so existing links, bookmarks and search results keep working. Turning the option off does the reverse.
- An address never changes on its own. It is made once, from the translated title (or from the slug, when it was written by hand), and stays. A new translation of the title does not move it.
- Change it by hand in the Addresses tab. The previous address keeps redirecting to the new one, for good.
- Turning it on creates the addresses in the background; they appear within a few minutes.
- Almost no characters. Most addresses come from the title, which is translated anyway. Only hand-written slugs and the bases use a few characters, once.
- Other scripts. Russian and Japanese addresses stay in their own script, as Google recommends, and accents follow each language’s rules (in German,
übecomesue).
The translated address goes into every internal link on the page — the content, the menus, ACF link fields, page builder buttons, shortcodes — and into the canonical, hreflang, the sitemaps and the structured data. Underneath, WordPress still sees only the source slugs: the plugin swaps them on the way in and on the way out. No rewrite rules are needed: /es/tienda/ works with the permalinks the site already has.
Search
Someone searching in another language finds results. If a visitor in German searches for “Jacke”, the plugin looks up the matching source term (“Jacket”) — the theme and the search engine do not need to know anything.
Dates
The date format saved in the settings often carries text from the source language (j \d\e F \d\e Y would give “9 de September de 2026”). On translated pages the plugin uses each language’s own format (September 9, 2026).
Page cache
- Each language is a different address, so the page cache stores each version separately.
- After translating, the plugin automatically purges the translated versions of the pages that changed in: WP-Optimize, LiteSpeed Cache, WP Rocket and W3 Total Cache.
- After a translation fixed by hand — in Strings or on the page itself — the plugin purges the whole cache one minute later. A sentence can be on every page (the menu, the footer), and the fixes made within that minute go into the same purge. Whoever fixes it sees the change at once, because logged-in users skip the cache.
- With another caching system, you may have to purge it by hand after a large translation (or hook it up through the actions in For developers).
Warning: cache lifetime under 12 hours. If the theme shows a login box in the header (or any form with a nonce), that security code is only valid for 12 to 24 hours. On a page cached for longer than that, the login fails silently. This applies to every language.