Guide Shopware SEO

Comment SEO fonctionne on Shopware 6 — le native contrôle il ships (Twig-templated SEO URLs, canonical handling, XML sitemaps, hreflang via le Sales Channel/Domain model, et, dans recent versions, native robots.txt et JSON-LD), le version gates que decide ce que vous en réalité obtenir, le traps (rebuild le indexer après a template modifier, variant contenu dupliqué, seo_url tableau growth), et pourquoi headless (Composable Frontends) moves le entier SEO liste de contrôle dans le Nuxt couche.

Première publication : 2 juil. 2026 · Dernière mise à jour : 3 août 2026 · Avancé

Shopware 6 ships an unusually grand amount de native SEO technique pour a self-hosted plateforme — Twig-templated SEO URLs per entity type, canonical handling, three-stratégie XML sitemap generation, et hreflang derived depuis le Sales Channel/Domain model — mais qu’est-ce que 'native' dépend heavily on votre version: per-domain robots.txt seulement arrived dans 6.7.1.0 et JSON-LD données structurées (replacing Microdata) dans 6.7.9.0 behind a fonctionnalité flag. Le recurring traps sont spécifique: vous doit rebuild le SEO indexer (dal:refresh:indexer) après modification une URL template, produit variants chaque obtenir leur propre URL et ne peut pas être canonicalized straight à le parent sans a template override, et le seo_url tableau grows roughly avec variants times languages. Going headless avec Composable Frontends (Vue + Nuxt) moves le entier SEO liste de contrôle — sitemap, canonical, meta balises, données structurées — dans le Nuxt rendu couche, où none de le admin SEO paramètres appliquer le même façon.

«> TL;DR — Shopware 6 ships more native technical SEO than most self-hosted

platforms — but “native” is heavily version-gated. SEO URLs are Twig templates per entity type (product / category / landing page), configurable globally or per sales channel; change a template and you must rebuild the index (dal:refresh:index) or existing URLs won’t update. Canonical is a separate system from URL templates: automatic for categories, semi-manual for variants (you can point one variant at another as canonical, but not straight at the parent without a template override). The XML sitemap has three refresh strategies (scheduled / live / manual, with sitemap:generate for manual) and Shopware explicitly disclaims any indexing guarantee. robots.txt is nothing-automatic before 6.7.1.0 (manual file + server rewrite) and native per-domain admin editing after. Structured data just migrated from Microdata to JSON-LD in 6.7.9.0 behind the JSON_LD_DATA flag. hreflang comes from the Sales Channel > Domain model, with a cross-sales-channel gap that spawned paid plugins. And going headless (Composable Frontends, Vue + Nuxt) moves the whole SEO checklist into the Nuxt rendering layer. » (Traduction) (Résumé en français de la section dix-sept, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

Preuve à l’appui de cette affirmation Shopware 6 provides configurable SEO URL templates and sitemap settings, with behavior dependent on version and sales-channel configuration. Portée : Shopware 6 administration; plugins and release versions can change output. Niveau de confiance : élevé · Vérifié : Shopware documentation: SEO Preuve à l’appui de cette affirmation Shopware release notes document material SEO-related changes across 6.7 releases, so exact native behavior must be checked by installed version. Portée : Shopware 6.7 release line, not all earlier installations. Niveau de confiance : élevé · Vérifié : Shopware 6.7 release notes

Le frame: native, version-gated, et où vous encore faire le fonctionner

La plupart Shopware SEO contenu est soit a screenshot walkthrough de le admin paramètres or a pitch depuis a Shopware agency. Aucun indique vous le deux choses que en réalité matter: ce que Shopware ships natively dépend on votre version, et le remaining gaps sont spécifique et predictable. Sort chaque task dans three buckets — native-et-actuel, native-seulement-si-vous êtes-on-a-recent-version, et encore-votre-job — et le plateforme arrête étant mysterious.

Shopware itself frames le native side generously: il dit le plateforme “inclut nombreux SEO fonctionnalités out de le box – depuis country- et langue-spécifique URLs à meta données, hreflang, et performances optimizations, allowing vous à construire strong SEO sans additional plugins.” c’est largely vrai — avec le version caveats ci-dessous, et avec a court liste de choses (bulk meta, variant canonicals, cross-channel hreflang, headless rendu) que encore besoin plugins or code.

Parce que Shopware est self-hosted et open-source-core, il sits differently depuis le hosted platforms. Où Shopify forces /products/ et /collections/ prefixes et ne va pas let vous natively edit robots.txt, et BigCommerce hands vous an editable robots.txt et custom Structure d’URLs on a managed stack, Shopware donne vous plus contrôler que quelconque de les — vous pouvez override storefront templates directement — à le coût de owning plus de le résultat, notamment votre propre hosting, indexation rebuilds, et (on headless) votre propre rendu pipeline. c’est closer dans spirit à Magento or a self-hosted WooCommerce store que à Shopify.

Structure d’URL: SEO URL templates

«SEO URLs live at Settings > Shop > SEO, and they’re configurable per sales channel or globally. There are three separately-templated entity types — product detail pages, category pages, and landing pages — and the templates use Twig syntax. Shopware’s docs put it plainly: “In the SEO settings you can define the structure for the SEO URLs of the product detail pages and categories. For this purpose you have a variety of variables at your disposal.” » (Traduction) (Résumé en français de la section vingt-quatre, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

The mechanics worth knowing:

«- The default product template is {{ product.name }}, and there are 50+ product variables available (product number, EAN, manufacturer name, breadcrumb/categories, custom fields, release date, and more). » (Traduction) (Résumé en français de la section vingt-six, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.) «- Multi-level variables must be typed by hand. Clicking the variable picker only inserts the incomplete parent token — {{ product.translated.name }} has to be finished manually. » (Traduction) (Résumé en français de la section vingt-six, sous-partie deux : le texte source est conservé pour vérification lors de la relecture francophone.) «- You can truncate long names. For a product name longer than, say, 50 characters, Shopware documents {{ product.translated.name[:50] }} to shorten it in the URL. » (Traduction) (Résumé en français de la section vingt-six, sous-partie trois : le texte source est conservé pour vérification lors de la relecture francophone.) «- The category default uses the breadcrumb: {% for part in category.seoBreadcrumb %}{{ part }}/{% endfor %}. » (Traduction) (Résumé en français de la section vingt-six, sous-partie quatre : le texte source est conservé pour vérification lors de la relecture francophone.) «- Twig filters work for normalization — for example {{ product.translated.name|lower }}/{{ product.productNumber }} — and Shopware notes “in general you can use the available Twig filters.” » (Traduction) (Résumé en français de la section vingt-six, sous-partie cinq : le texte source est conservé pour vérification lors de la relecture francophone.) «- Conditional (IF) logic handles missing fields; the docs give a variant-aware example using {% if product.canonicalProductId is not null %}. » (Traduction) (Résumé en français de la section vingt-six, sous-partie six : le texte source est conservé pour vérification lors de la relecture francophone.)

«The trap almost everyone hits: “After you have made changes to the SEO template, it is necessary to rebuild the index so that the URLs are updated. You can do this from the console using the command php bin/console dal:refresh:index.” Editing a template only affects newly generated URLs — existing products keep their old slugs until you rebuild. If you change the template and “nothing happened,” this is why. » (Traduction) (Résumé en français de la section vingt-sept, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

Sous le hood, SEO URLs actif dans a seo_url database tableau avec a dual-URL concept: a technique path_info (le réel route) et a human seo_path_info (le slug), plus sales_channel_id, language_id, is_canonical, et is_deleted/is_modified flags. Custom or dynamic SEO URL routes sont ajouté par developers via a SeoUrlRouteInterface implementation registered avec le shopware.seo_url.route container balise. Vous ne pas besoin ce pour a normal store, mais il explique le scale behavior dans le pitfalls section ci-dessous.

Balise canonicals

«Canonicalization on Shopware is a separate mechanism from the URL templates — this is the single most misunderstood part of Shopware SEO. Shopware’s own docs even define the concept the way Google does: “A canonical URL is the URL of the page that the search engine assumes is the most representative of several duplicated pages on your site.” » (Traduction) (Résumé en français de la section trente, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

Three choses to garder straight:

  • Categories sont canonicalized automatiquement. Quand a produit est reachable via plusieurs categories (et therefore plusieurs URLs), Shopware’s marketing décrit il as detecting ce et “automatiquement marks le correct URL, automatiquement preventing SEO technique problèmes.” Treat le marketing phrasing as a claim à confirmer on votre propre store, mais le automatic-category behavior est réel.
  • Variants sont seulement semi-manual. Chaque variant obtient son propre SEO URL, et le built-dans “Variant pour Canonical URL” picker lets vous nominate un variant as le canonical cible. Ce que il fait pas faire est let vous pouvezonicalize a variant straight back à le parent produit — a gap practitioners corriger par overriding product-detail/meta.html.twig (or avec a plugin) donc variants canonicalize à le parent’s SEO URL quand un exists. Si votre variant pages sont near-duplicates competing avec chaque autre, ce est le corriger.
  • il y a a mondial 301 behavior toggle. Sous “Forwarding behavior,” Shopware peut “sortie an HTTP 301 redirect quand URLs sont changed” plutôt que leaving old URLs actif après a template edit — le paramètre que pairs avec le dal:refresh:index rebuild ci-dessus.

Ce maps directement sur Google’s propre stance que canonicalization est a hint et que duplicate variant/parameter URLs sont normal dans ecommerce — le general mechanics sont dans canonicalization, qui ce article est le Shopware-spécifique companion à.

XML sitemap

«The sitemap lives at Settings > Shop > Sitemap. Shopware “generates a standard sitemap that is compressed and cached in the file system,” and for large catalogs “the sitemap is divided into several files and can be generated in the background” — the multi-file split that keeps each file inside the sitemaps.org / Google limits of 50,000 URLs and 50 MB uncompressed. » (Traduction) (Résumé en français de la section trente-cinq, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

Là sont three refresh strategies, et le difference matters:

  1. scheduled — generated automatiquement on a scheduled task à a définir interval.
  2. actif — créé quand none exists, et recreated une fois le refresh temps elapses.
  3. manuellement — automatic generation est off entirely; “le sitemap va seulement être créé si vous appel le suivant command manuellement: php bin/console sitemap:generate. Dans ce cas, il est necessary à exécuter ce command à nouveau chaque temps a nouveau URL est ajouté or an old un est supprimé.”

Two choses personnes miss:

«- The public URL is sitemap.xml, and there’s no human-facing /sitemap page. Shopware is explicit: “Shopware 6 does not provide a visitor sitemap (suffix /sitemap after your domain). The index file sitemap.xml is created for evaluation by Google.” » (Traduction) (Résumé en français de la section trente-neuf, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.) «- A sitemap guarantees nothing. Shopware states outright that it “cannot guarantee that every URL will be crawled and indexed. This always depends on the search engine provider.” A sitemap is a discovery aid, not an indexing promise — same as on every other platform. » (Traduction) (Résumé en français de la section trente-neuf, sous-partie deux : le texte source est conservé pour vérification lors de la relecture francophone.)

Ajout or excluding custom URLs (au-delà products/categories) isn’t an admin toggle — it’s developer fonctionner via custom UrlProvider classes, documented in Shopware’s developer sitemap guides.

robots.txt — vérifier votre version premier

Ce is the la plupart version-sensitive partie of Shopware SEO, so date-stamp it avant vous advise anyone.

  • Avant 6.7.1.0 (la plupart older installs): rien est generated automatiquement. Shopware’s docs dire “le robots fichier n’est pas créé automatiquement dans Shopware 6, mais a à être créé manuellement as a texte fichier” placed dans /public/. Pour multi-domain setups vous servir a per-domain fichier avec a serveur rewrite — Apache RewriteRule ^robots\.txt$ robots/%{HTTP_HOST}.txt [NS] or le NGINX equivalent rewrite ^/robots\.txt$ /robots/$host.txt — pointing à a /public/robots/<domain>.txt structure.
  • Depuis 6.7.1.0 onward (July 2025 release): native per-domain robots.txt management shipped dans le admin — vous “peut define individual robots.txt règles pour chaque domain dans le Admin sous Paramètres > General > Basic information.” Ce commencé as a Hacktoberfest 2024 community contribution.

«So the myth “Shopware doesn’t let you edit robots.txt” is only true pre-6.7.1.0. Confirm the store’s version before telling someone to “just edit it in the admin” — older stores still need the manual-file-plus-rewrite approach. The admin field (“Rules for robots.txt” under Settings > General > Basic information) is a free-text area merged straight into that domain’s robots.txt, so it accepts full User-agent: / Allow: / Disallow: blocks, not just flat rules — confirmed both in Shopware’s current docs and in a 6.7.10.0 fix (avoid duplicate robots.txt directives for user-agent blocks) that specifically reproduces the bug using per-user-agent blocks in that field. » (Traduction) (Résumé en français de la section quarante-quatre, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

Données structurées: the Microdata → JSON-LD migration

«Shopware went through a real architecture shift here in 6.7.9.0: the storefront moved from scattered inline Microdata to JSON-LD emitted as a <script type="application/ld+json"> block in the <head>. It’s behind a feature flag, JSON_LD_DATA, and is off by default — with the flag on, JSON-LD is injected and the old Microdata is removed. The Microdata is deprecated and slated for removal in 6.8.0.0. » (Traduction) (Résumé en français de la section quarante-six, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

Une fois vous flip le flag, le JSON-LD sortie est substantially richer que le old Microdata:

  • Product — tout produit images, VideoObject pour produit videos, AggregateRating avec ratingCount, up à le 10 la plupart recent Review éléments, OfferShippingDetails/ShippingDeliveryTime pour unique-price produits, Dimensions as QuantitativeValue, itemCondition, typed seller info, et gtin13 (EAN) / mpn quand présent.
  • WebSite avec SearchAction (enables Google’s Sitelinks recherche box).
  • Top-level Organization (shop logo).
  • ItemList on category / recherche-résultat pages, plus BreadcrumbList.

«Each schema type lives in its own overridable Twig template under storefront/layout/structured-data/. The same 6.7.9.0 release also added per-product Open Graph fields in the admin SEO tab — custom og:title, og:description, and og:image, defaulting to the product’s meta title/description/cover image when unset — so social shares and some search-result previews can now diverge intentionally from the meta tags without a plugin. » (Traduction) (Résumé en français de la section quarante-neuf, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

Le practical takeaway: ce est a myth-buster. Plenty de practitioner posts et payant Store extensions (“JSON-LD Rich Extraits pour produit pages”) predate le native fonctionnalité. Si vous êtes on 6.7.9.0+, vérifier si vous encore besoin que plugin avant buying il — et si vous êtes on an older version, c’est exactly quand a plugin encore earns son garder. Google’s Produit données structurées guidelines sont le spec ce sortie targets, et Google exige données structurées à reflect visible page contenu — donc fill le champs vous vouloir dans le markup.

«## International SEO: hreflang via Sales Channel + Domain » (Traduction) (Résumé en français de la section cinquante-deux, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

Shopware ne fait pas ont a standalone hreflang editor. hreflang est derived depuis le Sales Channel > Domain model: chaque sales channel peut ont plusieurs domains, et chaque domain maps à un langue, un currency, a extrait définir, et a unit système — définir up avec son “propre virtual URL, langue, currency, extrait set et son propre unit système.”

Two settings do the SEO fonctionner:

  • A localization mode dropdown avec deux options: ISO standard, “utile, pour exemple, si vous utiliser différent (country-spécifique) langue variants que peut utiliser leur propre country-spécifique terms,” qui produces complet region-langue codes comme en-US vs en-GB; et navigateur langue localization, qui est langue-seulement (plain en). Utiliser ISO standard quand vous genuinely ont regional variants.
  • A par défaut domain que, après vous enable le hreflang meta balise, “va servir as a fallback pour tout languages” — Shopware’s version de Google’s x-default.

Le connu weak spot: ce fonctionne dans a unique sales channel’s domains, mais cross-sales-channel hreflang — séparé sales channels per country/TLD running near-duplicate catalogs — n’est pas natively lié. Que gap est exactly ce que payant “Hreflang Manager” store extensions exist à solve. je voudrais treat le cross-channel gap as a strong community/marketplace signal plutôt que a documented Shopware limitation, mais c’est a recurring pain point on le forums.

Un chose Shopware’s propre docs ne pas spell out que Google exige: hreflang doit être bidirectional (retourner balises) et inclure an x-default. Si vous êtes nouveau à le renvoyer-balise requirement, le general mechanics sont dans hreflang — Shopware’s default-domain paramètre handles le x-default side, mais vous encore vouloir à vérifier le retourner balises resolve.

«## Headless: Composable Frontends (Shopware Frontends) » (Traduction) (Résumé en français de la section cinquante-huit, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

Shopware’s headless option est “Shopware Frontends” (formerly “Composable Frontends” / “PWA”) — a Vue.js + Nuxt toolkit que consumes le Shopware Store API, distinct depuis le par défaut Twig/Symfony storefront. Il ships a component library, an API client, reusable “composables,” et generated TypeScript types; le référence “Vue Demo Store” est construit on Nuxt + Tailwind.

Ici’s le partie chaque autre guide skips: going headless moves essentially tout SEO responsibility dans le Nuxt couche, et none de le admin SEO paramètres appliquer le même façon. Le SEO URL templates, le canonical paramètres, le sitemap admin toggle, et le nouveau robots.txt admin panel sont tout Symfony-storefront (Twig) fonctionnalités. A Composable Frontends construire nécessite son propre:

  • Rendu mode que produces crawlable HTML — Nuxt SSR (or hybrid / ISR / edge rendu) pour le SEO-pertinent pages. A pure client-side-rendu (SPA) construire reintroduces le classic JavaScript-rendu SEO risque, donc headless est pas automatiquement meilleur pour le SEO — a badly configuré headless storefront peut être pire que le par défaut Twig un.
  • Sitemap generation, balise canonicals, données structurées, et meta-balise injection implemented dans le Nuxt app (typically via Nuxt’s head/SEO-meta composables), généralement encore pulling slugs et produit données depuis le même Shopware SEO URL / Store API données.

Donc le myth “going headless avec Shopware corrections/améliore SEO” est faux as stated. SEO résultat dépend entirely on comment vous configurer rendu dans Nuxt. Ce est le même trap as quelconque headless construire — le plateforme-agnostic version lives dans JavaScript SEO et CMS headless SEO.

Courant pitfalls at scale

Le practitioner pain points cluster dans three places:

«- Default misconfigurations. Practitioner audits flag that “Remove Category ID from URL” ships set to No by default (worth enabling for cleaner URLs), that pagination signals are off by default, and that blog/archive pagination pages are worth noindex-ing because they “add no value; they only take up crawl budget.” One widely repeated claim — that Shopware auto-adds nofollow to all external links — I’d verify against a real install before repeating; it wasn’t confirmed against Shopware’s own docs. » (Traduction) (Résumé en français de la section soixante-cinq, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.) «- Product-variant duplicate content. This is the single most recurring Shopware SEO complaint. Each variant gets its own URL (/SW10000.1, /SW10000.2, …) with inherited, near-identical descriptions, so variants compete unless you canonicalize them — and, per the canonical section above, the built-in picker can’t point straight at the parent without a template override. » (Traduction) (Résumé en français de la section soixante-cinq, sous-partie deux : le texte source est conservé pour vérification lors de la relecture francophone.) «- seo_url table growth on large multilingual catalogs. Row count roughly follows (parent + active variants) × number of languages — a practitioner deep dive puts a 9-variant product across 17 languages at ~153 rows for a single product family. Frequent template edits multiply history rows further. At scale the fixes are: generate SEO URLs for parent products only (not every variant), prune soft-deleted / non-canonical rows periodically, and add composite indexes. This is why a large Shopware store can feel slow and accumulate odd duplicate SEO URLs. » (Traduction) (Résumé en français de la section soixante-cinq, sous-partie trois : le texte source est conservé pour vérification lors de la relecture francophone.)

Quand native outils are suffisant vs. quand vous besoin a plugin or dev fonctionner

Le rough threshold echoed à travers practitioner sources: native outils sont suffisant pour petit, simple catalogs (on le order de a quelques hundred produits), et plugins or custom development become necessary à meaningful scale — thousands de SKUs, deep variant matrices, nombreux languages, or cross-sales-channel international setups. Concretely, reach pour a plugin or code quand vous besoin bulk titre/meta patterns, canonical-à-parent pour variants, cross-sales-channel hreflang, custom sitemap entries, or JSON-LD on a pre-6.7.9.0 version. Tout sinon — SEO URL templates, category canonicals, le sitemap, unique-channel multi-domain hreflang, et (on actuel versions) robots.txt et JSON-LD — est native.

Shopware vs le hosted platforms — le honest version

ShopwareShopifyBigCommerce
HostingSelf-hosted / Shopware cloudHosted SaaSHosted SaaS
Structure d’URLTwig templates, entièrement customForces /products/, /collections/Entièrement custom, aucun forced prefixes
robots.txtNative admin depuis 6.7.1.0 (manual avant)Pas natively editableEditable dans admin
Built-dans schemaNative JSON-LD depuis 6.7.9.0 (flagged)App requisOui (Cornerstone)
hreflangNative via Sales Channel/Domain (unique-channel)App / theme fonctionnerManual
Headless optionComposable Frontends (Vue + Nuxt)HydrogenCatalyst (Suivant.js)
Indexer rebuild étapeOui (dal:refresh:index)Pas exposedPas exposed

Tout de les classer fine. Shopware’s genuine advantage est contrôler — Twig-templated URLs, overridable storefront templates, et a grand native fonctionnalité définir que garde growing par version. Son genuine coût est que vous propre plus de le pipeline: votre hosting, votre indexer rebuilds, votre version awareness, et — si vous go headless — votre entier rendu et SEO-balise couche. Comme Magento et self-hosted WooCommerce, et unlike Shopify or PrestaShop’s simpler defaults, que trade favors teams avec development capacity.

Ajouter une note d’expert

Épingler une citation d’expert

Nouvelle personne ? Créez son profil non revendiqué à /admin/experts/ → Épingler une citation d’expert d’abord.