Magento store views en SEO: meertalig zonder duplicate content
Terug naar blog

Magento store views en SEO: meertalig zonder duplicate content

9 min leestijd

Magento store views zijn prima voor SEO, zolang elke store view een eigen URL-ruimte heeft, eigen vertaalde content en correcte hreflang-annotaties naar de andere versies.

Magento store views zijn prima voor SEO, zolang elke store view een eigen URL-ruimte heeft, eigen vertaalde content en correcte hreflang-annotaties naar de andere versies. Duplicate content ontstaat pas als twee store views dezelfde taal en dezelfde content serveren zonder dat Google weet voor welk land elke versie bedoeld is. Dat los je op met hreflang, consistente canonicals en per store view vertaalde URL keys, niet door store views samen te voegen.

Hoe Magento websites, stores en store views indeelt

Magento 2 heeft drie niveaus onder de globale configuratie:

  • Website: eigen klanten, eigen prijsscope, eigen betaal- en verzendinstellingen. Vaak één per land of per merk.
  • Store: een root-categorie. Hier bepaal je welke catalogusboom zichtbaar is.
  • Store view: de laag waarop je taal en presentatie regelt. Productnamen, beschrijvingen, URL keys, meta titles en CMS-content kun je per store view overschrijven.

Voor SEO is de store view de interessantste laag. Daar leven de teksten en URL's die Google indexeert. Een typische opzet voor een shop in Nederland en België:

WebsiteStoreStore viewURL
BeneluxHoofdcatalogusNLhttps://www.voorbeeldshop.nl/
BeneluxHoofdcatalogusBE-NLhttps://www.voorbeeldshop.be/
BeneluxHoofdcatalogusBE-FRhttps://www.voorbeeldshop.be/fr/

Dezelfde producten, dezelfde catalogus, drie store views. De BE-NL- en NL-versie zijn grotendeels identiek. Precies daar zit het risico.

Wil je eerst de architectuur goed hebben voordat je aan SEO denkt, lees dan ons artikel over multi-store setup in Magento 2.

Waar duplicate content in store views vandaan komt

Duplicate content is geen straf. Google kiest bij gelijke pagina's één versie om te tonen en negeert de rest. Dat is een probleem als Google de verkeerde kiest: de Nederlandse URL in de Belgische zoekresultaten, met euro's en verzendinformatie die niet kloppen.

De vier gebruikelijke oorzaken:

  1. Dezelfde taal in twee store views zonder hreflang. NL en BE-NL serveren identieke teksten. Google ziet twee kopieën en kiest er één.
  2. Niet-vertaalde content in een anderstalige store view. De BE-FR-store view toont Nederlandse productbeschrijvingen omdat er op store view-niveau niets is ingevuld. Magento valt dan terug op de default-waarde.
  3. Meerdere URL's per product binnen één store view. Met "Use Categories Path for Product URLs" op Yes krijgt een product in drie categorieën drie URL's.
  4. Store-wisselparameters die crawlbaar zijn. Links met ?___store=be_fr&___from_store=nl in de taalswitcher leveren extra URL's op die Google kan vinden.

Het eerste punt vraagt om hreflang. De andere drie zijn configuratie.

De terugvallogica van Magento: handig en verraderlijk

Elke attribuutwaarde in Magento heeft een scope. Vul je een productbeschrijving alleen op default-niveau in, dan erft elke store view die waarde. In de admin zie je dat aan het vinkje "Use Default Value".

Dat is handig voor velden die echt gelijk zijn, zoals een SKU of een EAN. Het is verraderlijk voor teksten:

  • Een Franstalige store view met Nederlandse beschrijvingen is voor Google een slechte Franse pagina. Hij rankt niet in het Frans en concurreert in het slechtste geval met je Nederlandse versie.
  • Een URL key die niet per store view is ingesteld, blijft in de oorspronkelijke taal. Je krijgt /fr/hardloopschoenen-dames in plaats van /fr/chaussures-de-course-femme.
Concreet: draai voor elke anderstalige store view een export van producten en categorieën waarbij je per attribuut controleert of er een store view-waarde bestaat. Alles wat erft van default en tekst bevat, is een kandidaat voor vertaling. Voor vertaalde URL's geldt hetzelfde.

URL-structuur per store view

Je hebt drie opties voor de URL-ruimte van een store view:

  • Eigen domein (ccTLD): voorbeeldshop.nl en voorbeeldshop.be. Sterk landsignaal, maar elk domein bouwt zijn eigen autoriteit op.
  • Submap: voorbeeldshop.com/nl/ en voorbeeldshop.com/be-fr/. Eén domein, gedeelde autoriteit.
  • Subdomein: nl.voorbeeldshop.com. Werkt, maar heeft weinig voordelen boven een submap.

In Magento stel je dit in via de Base URL per store view (Stores > Configuration > General > Web > Base URLs, op store view-scope). Voor submappen kun je "Add Store Code to Urls" aanzetten onder Url Options. Let op: die instelling geldt dan voor alle store views. Je krijgt ook op je hoofdversie een store code in de URL, tenzij je dat met eigen base URLs per store view oplost.

De keuze tussen subdomein en submap werken we uit op onze pagina over internationale SEO. Belangrijker dan de keuze zelf: kies één keer en houd het vast. Elke wijziging achteraf is een migratie.

Hreflang in Magento: er zit niets standaard in

Magento 2 Open Source genereert geen hreflang-tags. Dat moet je toevoegen met een extensie of eigen code. Hreflang vertelt Google welke URL bij welke taal- en regiocombinatie hoort. Voor het voorbeeld hierboven ziet dat op een productpagina zo uit:

html
<link rel="alternate" hreflang="nl-NL" href="https://www.voorbeeldshop.nl/hardloopschoen-model-x" />
<link rel="alternate" hreflang="nl-BE" href="https://www.voorbeeldshop.be/hardloopschoen-model-x" />
<link rel="alternate" hreflang="fr-BE" href="https://www.voorbeeldshop.be/fr/chaussure-de-course-model-x" />
<link rel="alternate" hreflang="x-default" href="https://www.voorbeeldshop.nl/hardloopschoen-model-x" />

De regels waar het in Magento meestal misgaat:

  • Wederkerigheid. Elke versie moet naar alle andere versies verwijzen, en naar zichzelf. Mist de BE-versie de verwijzing terug naar NL, dan negeert Google die combinatie.
  • De juiste URL per store view. Omdat URL keys per store view kunnen verschillen, moet de extensie de URL rewrite van de andere store view ophalen. Niet de huidige URL key met een ander domein ervoor plakken.
  • Alleen indexeerbare doelen. Hreflang naar een URL met noindex, een redirect of een andere canonical is een tegenstrijdig signaal.
  • Producten die niet in elke store view bestaan. Staat een product niet in BE-FR, dan hoort die hreflang-regel er niet te zijn. Veel extensies genereren hem toch.
  • Categorieën en CMS-pagina's. Productpagina's krijgen vaak hreflang, categorieën en CMS-pagina's worden vergeten. Voor CMS-pagina's moet je meestal handmatig vastleggen welke pagina's elkaars vertaling zijn.

Een alternatief voor tags in de head is hreflang in de XML-sitemap. Bij grote catalogi houdt dat de HTML lichter, maar het maakt fouten minder zichtbaar. Kies één methode, niet beide door elkaar.

Wil je snel een correcte set tags opbouwen of controleren, gebruik dan onze hreflang-generator. De volledige uitleg over taal- en landcodes staat in ons artikel over hreflang-implementatie voor meertalige webshops.

Canonicals per store view

Elke store view hoort naar zichzelf te canonicaliseren. De BE-NL-productpagina krijgt een canonical naar de BE-NL-URL, niet naar de NL-versie.

Dat klinkt vanzelfsprekend, maar het gaat geregeld mis:

  • Iemand zet een canonical van BE naar NL "om duplicate content te voorkomen". Daarmee vertel je Google dat de Belgische pagina's kopieën zijn. Ze verdwijnen uit de Belgische resultaten.
  • Een extensie bouwt de canonical op basis van de default store view.

Canonical en hreflang moeten hetzelfde verhaal vertellen. De canonical zegt "dit is de voorkeursversie van deze pagina". Hreflang zegt "en hier staan de varianten voor andere talen en landen". Wijst de canonical naar een andere store view, dan valt de hreflang-annotatie weg.

Binnen een store view los je de categoriepad-URL's op met de standaardinstellingen. Zet "Use Categories Path for Product URLs" op No en "Use Canonical Link Meta Tag for Products" op Yes. Alle instellingen staan in onze Magento 2 SEO-instellingen checklist.

Sitemaps en robots.txt per store view

Magento genereert XML-sitemaps per store view (Marketing > SEO & Search > Site Map). Maak er één per store view aan, met een eigen bestandsnaam of pad:

/sitemap/nl/sitemap.xml
/sitemap/be-nl/sitemap.xml
/sitemap/be-fr/sitemap.xml

Controleer daarna drie dingen:

  • Elke URL in de sitemap gebruikt de base URL van die store view. Een BE-sitemap vol .nl-URL's betekent dat de base URL verkeerd staat op een van de scopes.
  • Alleen indexeerbare, canonieke URL's. Geen uitgeschakelde producten, geen URL's met categoriepad als je die niet canoniek wilt.
  • Verwijzing in robots.txt. De robots.txt stel je in via Content > Design > Configuration, per website of store view. Zet daar de juiste sitemap-regel per domein.

Voorbeeld voor het Belgische domein:

User-agent: *
Disallow: /checkout/
Disallow: /customer/
Disallow: /*?___store=
Disallow: /*?___from_store=

Sitemap: https://www.voorbeeldshop.be/sitemap/be-nl/sitemap.xml
Sitemap: https://www.voorbeeldshop.be/sitemap/be-fr/sitemap.xml

Let op met die Disallow-regels voor store-parameters. Ze houden Googlebot weg van de wisselparameters, maar ze lossen het niet op als je taalswitcher die URL's in de HTML aanbiedt. Beter: laat de taalswitcher direct naar de vertaalde URL van de huidige pagina linken.

Taalswitcher en automatische redirects

De standaard store switcher van Magento werkt met een tussenstap via stores/store/redirect en de parameters ___store en ___from_store. Voor bezoekers prima. Voor Google is het een omweg via een redirect naar een URL die niet altijd de vertaling van de huidige pagina is.

Wat je wilt:

  • Gewone <a href>-links naar de vertaalde URL van dezelfde pagina. Dat is ook een extra signaal naast hreflang.
  • Geen automatische redirect op basis van IP of browsertaal zonder uitweg. Googlebot crawlt grotendeels vanuit de VS en zonder Accept-Language-header. Stuur je die automatisch door, dan ziet hij één store view en de rest nooit. Een melding ("Je bekijkt de Belgische shop, wil je naar de Nederlandse?") is veiliger dan een harde redirect.

In Hyvä-thema's is de switcher een eenvoudige template. Daar kun je de links direct op de vertaalde URL zetten zonder extra JavaScript.

URL rewrites en de groei van je database

Elke store view krijgt zijn eigen set URL rewrites. Een product in vijf categorieën en drie store views kan tientallen rijen opleveren in de tabel url_rewrite, zeker met categoriepad-URL's.

Gevolgen voor SEO en performance:

  • Een nieuwe store view toevoegen genereert rewrites voor de hele catalogus. Bij grote catalogi kan dat lang duren en een grote tabel opleveren.
  • Een URL key wijzigen met "Create Permanent Redirect for URLs if URL Key Changed" aan, levert per store view extra redirect-rijen op. Dat is goed voor SEO, maar de tabel groeit mee.
  • Oude store views die je uitschakelt laten rewrites achter. Ruim die op, en zorg dat de oude URL's met een 301 naar de juiste nieuwe pagina gaan.

Wanneer een aparte store view niet de juiste keuze is

De eerlijke versie: niet elk land heeft een eigen store view nodig.

  • Zelfde taal, zelfde prijzen, zelfde verzending? Dan voegt een tweede store view vooral onderhoud toe. Eén Nederlandstalige versie kan ook in België ranken.
  • Een tweede taal zonder vertaalbudget? Een store view met machinevertaling en niet-vertaalde URL keys doet je SEO meer kwaad dan goed. Begin pas als je de content echt kunt vertalen en onderhouden.
  • Andere prijzen of btw? Dan heb je meestal een aparte website-scope nodig, niet alleen een store view.

Twijfel je over de juiste opzet, kijk dan op onze pagina over internationale SEO of meer specifiek over Magento SEO.

Controlelijst voor meertalige Magento-shops

  1. Elke store view heeft een eigen base URL, en die klopt op store view-scope.
  2. Teksten en URL keys zijn per store view ingevuld, niet geërfd van default.
  3. Hreflang staat op producten, categorieën en CMS-pagina's, wederkerig, inclusief x-default.
  4. Elke pagina canonicaliseert naar zichzelf binnen de eigen store view.
  5. Eén XML-sitemap per store view, met de juiste domeinen.
  6. Robots.txt per domein met de juiste sitemap-regels.
  7. De taalswitcher linkt naar de vertaalde URL van dezelfde pagina.
  8. Geen harde redirects op basis van IP of browsertaal.
  9. In Search Console: één property per domein of per submap, zodat je per markt kunt meten.

Veelgestelde vragen

Ziet Google twee Nederlandstalige store views als duplicate content?

Ja, als ze dezelfde teksten tonen zonder hreflang. Google kiest dan één versie en negeert de andere. Met hreflang nl-NL en nl-BE weet Google welke versie bij welk land hoort en kan het per land de juiste tonen.

Heeft Magento 2 standaard hreflang?

Nee. Magento 2 Open Source genereert geen hreflang-tags. Je hebt een extensie of eigen code nodig, of je voegt hreflang toe via de XML-sitemap.

Moet ik "Add Store Code to Urls" aanzetten?

Alleen als je voor submappen kiest en die instelling bij je opzet past. Ze geldt voor alle store views tegelijk. Werk je met eigen domeinen per store view, dan heb je haar niet nodig.

Kan ik een canonical van de Belgische naar de Nederlandse versie zetten?

Dat kan, maar dan vertel je Google dat de Belgische pagina's kopieën zijn. Ze verdwijnen dan uit de Belgische resultaten. Wil je beide markten bedienen, gebruik dan zelfverwijzende canonicals met hreflang.

Hoeveel store views kan Magento aan?

Technisch veel. In de praktijk groeit met elke store view de URL rewrites-tabel, de indexeertijd en het vertaalwerk. Voeg een store view toe als er een echte markt achter zit, niet omdat het kan.

Ruthger Idema

Geschreven door Ruthger Idema

15+ jaar ervaring in e-commerce development. Gespecialiseerd in Magento, Shopify en Laravel maatwerk.

Meer over ons team →
Deel dit artikel:

Wil je jouw e-commerce naar het volgende niveau?

Plan een vrijblijvend gesprek met onze experts over Magento, Shopify of Laravel maatwerk.

Plan een Tech Check