StoreLingo help
Back to app Legal

SEO under Strategy A: URLs, hreflang, sitemaps

StoreLingo writes real per-locale duplicate CMS rows back into your Webflow site. The translated pages are served by Webflow itself, not by StoreLingo, so the URLs, sitemaps, and meta tags are governed entirely by your Webflow setup.

For hreflang specifically, StoreLingo defaults to fully automatic. On every publish we register a tiny inline script in your Webflow site (via the Webflow Custom Code API) that injects <link rel="alternate" hreflang> tags into every page's head at runtime. You do nothing. If you would rather server-render the tags yourself, switch the mode to Manual in the sidebar's Hreflang for Google dialog and we hand you the exact HTML block to paste into your Collection page Head Code. If you handle SEO entirely outside StoreLingo, switch to Off.

This page covers everything: what each mode does, what is automatic, and what you optionally own.


URL structure

For every source product or CMS item, StoreLingo creates a duplicate row in the same Webflow collection with a locale-prefixed slug:

Source slug Dutch duplicate German duplicate
ceramic-mug nl-ceramic-mug de-ceramic-mug
coffee-blend-2024 nl-coffee-blend-2024 de-coffee-blend-2024

Your Webflow site's URL routing is unchanged. If your product page template renders at /product/[slug], the localized URLs become:

This is a flat URL space, not a per-locale subdirectory (no /nl/product/...) and not a subdomain (no nl.yoursite.com). All locales live in the same collection and share the same template.

Why slug-prefix routing and not subdirectories

Webflow's static page routing does not let third-party apps inject new URL prefixes. Subdirectories (/nl/...) would require either a reverse proxy in front of Webflow or migrating to Webflow's native Localization, which currently does not support Ecommerce products. Slug-prefix routing is the only model that works inside Webflow's published-site constraints today.

When Webflow opens native Ecommerce localization, StoreLingo will offer a one-click migration to the native model, at which point per-locale subdirectories become available.


Sitemap

Webflow auto-generates sitemap.xml for every CMS item in every collection on your site. Because StoreLingo's locale duplicates are real CMS items, they are picked up automatically. No action required from you to get the translated pages into your sitemap.

To verify, hit https://yoursite.com/sitemap.xml after your first publish. You should see entries for both the source slug and every locale-prefixed slug.


Hreflang

Three modes, picked in the sidebar's Hreflang for Google dialog:

Automatic (default)

StoreLingo uses Webflow's Custom Code API to register a small inline script against your site. On every publish the script is refreshed with your current locale list. The script runs in the browser on every page, detects whether the URL belongs to a translated CMS item, and injects the right <link rel="alternate" hreflang> tags into the page head. Google honours JS-injected hreflang, the only trade-off versus server-rendered is slightly slower crawl indexing (days instead of hours), which is negligible for ecommerce SEO timelines.

You can audit or revoke the script at any time from Webflow Site Settings → Custom Code. The script's source is fully visible. Uninstalling StoreLingo does not remove the registered script automatically — switch the mode to Off in StoreLingo before uninstalling if you want a clean slate.

Required OAuth scope: custom_code:write (asked for at site connect).

Manual

StoreLingo does not touch your Webflow Custom Code at all. We show you the exact HTML block to paste into each translated Collection page's Head Code. Server-rendered tags (slightly better for SEO than JS-injected) at the cost of a one-time paste per collection. Two manual approaches follow.

Off

No hreflang at all from StoreLingo. Use this if a separate SEO tool already handles it on your site.


Manual mode: two approaches

Approach A: Hand-rolled hreflang block in the page Head Code

In your Webflow CMS Collection page (Designer, Pages panel, click the collection page, then Custom Code, Inside <head> tag), paste:

<link rel="alternate" hreflang="en" href="https://yoursite.com/product/{{wf {&quot;path&quot;:&quot;slug&quot;,&quot;type&quot;:&quot;PlainText&quot;\} }}" />
<link rel="alternate" hreflang="nl" href="https://yoursite.com/product/nl-{{wf {&quot;path&quot;:&quot;slug&quot;,&quot;type&quot;:&quot;PlainText&quot;\} }}" />
<link rel="alternate" hreflang="de" href="https://yoursite.com/product/de-{{wf {&quot;path&quot;:&quot;slug&quot;,&quot;type&quot;:&quot;PlainText&quot;\} }}" />
<link rel="alternate" hreflang="x-default" href="https://yoursite.com/product/{{wf {&quot;path&quot;:&quot;slug&quot;,&quot;type&quot;:&quot;PlainText&quot;\} }}" />

Limitations:

  1. This emits hreflang on every rendering of the page, including on the localized duplicates themselves. The localized duplicates will get hreflang tags that point at nl-nl-ceramic-mug (double-prefixed). You need a Webflow conditional visibility rule (Settings, Conditional visibility, "slug does not start with nl-") on the link tags to suppress this, OR adopt approach B.
  2. Every locale has to be hardcoded into the head block. If you add a new locale in StoreLingo, you must come back here and add a new <link> line.

Approach B: Locale collection + Collection List in Head Code

Cleaner long-term but takes 30 minutes to set up:

  1. Create a new Webflow Collection called "Locales" with fields code (PlainText) and displayName (PlainText).
  2. Add one item per locale you publish to (en, nl, de, etc).
  3. In the product Collection page's Head Code, drop a hidden Collection List bound to Locales, and use Webflow's text-substitution syntax to emit one hreflang tag per locale item, interpolating {slug-prefix}-{current-product-slug}.
  4. Now adding a locale = adding one row to your Locales collection. No code change.

Webflow's Help Center has a guide on Collection Lists inside Head Code search "Collection list in Head" on help.webflow.com.

Why we do not generate this for you

Generating hreflang would require StoreLingo to either (a) write into your Webflow page Head Code on your behalf, which means our app would have to mutate your Designer pages (high blast radius, no undo, would scare Marketplace reviewers), or (b) inject a runtime JavaScript snippet, which would defeat the entire Strategy A "no runtime dependency on us" promise. Neither is the right tradeoff. The hand-wired approach is one-time setup, lives in your Webflow Designer where you can audit it, and survives if you ever uninstall StoreLingo.


Meta titles and descriptions

Webflow auto-binds CMS field values to the page's <title> and <meta name="description"> when you configure the page in Designer (Pages panel, click the Collection page, then SEO settings, then bind to fields). Because StoreLingo translates the underlying CMS field values, the meta tags on each per-locale duplicate page automatically render in the translated language.

No action required as long as your Webflow CMS Collection page SEO settings are bound to CMS fields, not hardcoded strings. If they are hardcoded, the meta tags will be in English on every locale's page, which is wrong. Audit your Page Settings before launch.


Image alt text

Image alt text is per-image in Webflow, stored as a field on each image asset. StoreLingo's translatableFields configuration can include image alt text fields if you opt them in via the Fields settings dialog. Once opted in, translated alt text rides through the same pipeline.

Action: open Fields settings on each collection that has image fields and add the alt-text field name (usually image-alt or main-image-alt) to the translatable list. Re-run AI translate missing.


Open Graph tags

Same model as meta titles. Bind your OG tags to CMS fields in Webflow Designer, opt those fields into StoreLingo's translatable list, run AI translate. Translated OG tags render on every per-locale page automatically.


Robots.txt and canonical tags

Webflow generates one robots.txt per site. Strategy A does not change this. Canonical tags on each product page point to that page's own URL by default (Webflow behavior), so each locale duplicate has its own canonical, which is what you want for SEO.

If you have ever set a custom canonical override in Webflow Designer that hardcodes the English URL, you must remove that override before publishing locales. Otherwise the German page will declare the English URL as canonical and Google will deindex the German version.


What StoreLingo guarantees vs what you own

Concern Who handles it
Translated CMS field values written to Webflow StoreLingo
Per-locale slug generation (nl-..., de-...) StoreLingo
Webflow site publish trigger StoreLingo
Sitemap entry for every locale duplicate Webflow (automatic)
Meta title and description per locale Webflow (auto, if SEO is bound to CMS fields)
OG tags per locale Webflow (auto, if bound to CMS fields)
hreflang link tags You (one-time Designer setup, see above)
Locale-switcher UI on your site You (Webflow Designer component)
Reverse proxy or subdirectory routing Out of scope; not possible inside Webflow today

How StoreLingo's SEO model compares

StoreLingo (Strategy A) Weglot Linguana
Pages live in your Webflow CMS Yes No (runtime overlay) No (rendered on their domain)
Survives if the app is uninstalled Yes, pages stay published No, locales disappear No, locales disappear
hreflang automatic No, customer wires once in Head Code Yes, server-side Yes
Sitemap automatic Yes (via Webflow) Yes (Weglot-served sitemap) Yes (Linguana-served sitemap)
Per-locale subdirectory No (slug-prefix instead) Yes Yes
Webflow-native SEO scoring Yes (real pages) Reduced (overlay flagged by some crawlers) Reduced

The honest tradeoff: Strategy A trades automatic hreflang for permanent ownership of the translated pages and full Webflow-native SEO behavior. Most ecommerce customers will accept that trade once it is explained. If a customer's primary requirement is "set it and forget it" SEO with zero manual setup, Weglot is the better fit and we should tell them so.


Pre-launch checklist for a new customer

  1. Publish to at least one locale, confirm the per-locale slugs render on the live site.
  2. Check https://yoursite.com/sitemap.xml and confirm the locale slugs are present.
  3. Wire hreflang in Head Code on every collection page that has translated content (Approach A or B above).
  4. Audit Page Settings in Webflow Designer: confirm SEO title and description are bound to CMS fields, not hardcoded.
  5. Audit image alt text: opt alt-text fields into StoreLingo's Fields settings, re-run translate.
  6. Submit the updated sitemap to Google Search Console.

That is the entire SEO surface area under Strategy A.