Un client est venu me voir au début 2022 -- marque de mode de taille moyenne, environ 40 000 sessions organiques mensuelles, une bonne note de domaine, ils utilisaient Shopify depuis quatre ans. Ils avaient embauché une agence de développement pour tout reconstruire sur Next.js avec l'API Storefront de Shopify. Le nouveau site était magnifique. Vraiment rapide. Et six semaines après son lancement, ils avaient perdu 38 % de leur trafic organique.
Point clé : les migrations Shopify sans tête protègent vos classements de la même manière que toute migration : une carte de redirection complète, un transport de métadonnées identique à l'octet près, et un budget Core Web Vitals sur la nouvelle version.Headless Shopify migrations protect rankings the same way every migration does: full redirect map, byte-identical metadata transport, and a Core Web Vitals budget on the new build.
Personne n'avait fait d'audit des redirections. Le sitemap était cassé. Les balises canoniques pointaient vers le mauvais environnement. C'était un désastre, et cela leur a coûté environ 60 000 £ en revenus avant que nous ne stabilisions les choses.
Les migrations headless sont l'un de ces changements qui semblent être une pure victoire technique -- rendu plus rapide, front-end découplé, liberté totale de design -- mais si vous traitez le SEO comme une réflexion tardive, vous le paierez. Chèrement. J'ai travaillé sur plus de 12 000 sites chez Seahawk et j'ai vu ce schéma se répéter assez souvent pour que je veuille bien tout documenter.look like a pure technical win -- faster rendering, decoupled front-end, total design freedom -- but if you treat SEO as an afterthought, you'll pay for it. Badly. I've worked on 12,000+ sites at Seahawk and I've seen this pattern repeat itself enough times that I wanted to write it all down properly.
---
Pourquoi Shopify Headless Casse le SEO en Premier Lieu
L'architecture de thème standard de Shopify gère une grande partie du travail SEO sans que vous le remarquiez. Les balises canonical sont générées automatiquement. Le sitemap.xml à /sitemap.xml est maintenu automatiquement. Les données structurées pour les produits sont intégrées nativement via Liquid. La pagination utilise les conventions rel="next" et rel="prev" que Shopify gère discrètement en arrière-plan./sitemap.xml is maintained automatically. Structured data for products comes baked in via Liquid. Pagination uses rel="next" and rel="prev" conventions that Shopify manages quietly in the background.
Au moment où vous passez au headless -- généralement avec un framework comme Next.js, Nuxt, Remix ou SvelteKit qui récupère les données via l'API Storefront de Shopify -- vous en êtes responsable. Chaque canonical. Chaque hreflang. Chaque bloc de données structurées. Chaque redirection. Ça ne vient plus gratuitement.Next.js, Nuxt, Remix, or SvelteKit pulling data from the Shopify Storefront API -- you own all of that. Every canonical. Every hreflang. Every structured data block. Every redirect. It doesn't come for free anymore.
Et voilà le truc : la plupart des équipes de développement sont embauchées parce qu'elles sont bonnes en React. Pas parce qu'elles savent ce qu'est un piège de crawl de navigation facettisée.
Les trois modes de défaillance que je vois constamment
- Les URL d'environnement de staging qui fuient dans les index de production. L'équipe de dev construit sur staging.mybrand.com ou une URL de prévisualisation Vercel, oublie de la noindex correctement, Google la crawle, et soudain vous avez du contenu dupliqué en concurrence avec votre site actif. The dev team builds on
staging.mybrand.comor a Vercel preview URL, forgets tonoindexit properly, Google crawls it, and suddenly you have duplicate content competing with your live site. - Les redirections cassées ou manquantes lors de la restructuration d'URL. Les projets headless impliquent presque toujours des changements d'URL. /collections/mens-shirts devient /category/shirts ou pire. Sans les 301s en place, chaque lien entrant et chaque URL indexée par Google retourne un 404. Headless projects almost always involve URL changes.
/collections/mens-shirtsbecomes/category/shirtsor something worse. Without 301s in place, every inbound link and every Google-indexed URL returns a 404. - Le rendu côté client qui tue la crawlabilité. Si votre front-end headless affiche le contenu des produits purement côté client sans SSR ou SSG, Googlebot risque de ne pas récupérer votre contenu de manière fiable. Google peut rendre du JavaScript, mais il est traité en une deuxième vague et il y a un délai d'indexation. Pour les grands catalogues, ce délai vous coûte cher. If your headless front-end is rendering product content purely client-side without SSR or SSG, Googlebot may not be picking up your content reliably. Google can render JavaScript, but it's processed in a second wave and there's indexing lag. For large catalogues, that lag costs you.
---
L'Audit Pré-Migration Que Vous Ne Pouvez Pas Sauter
Je vais être direct : si vous n'avez pas fait ça avant de passer en live, vous êtes déjà en retard. Mais il n'est jamais trop tard.
Avant qu'un seul enregistrement DNS ne change, je veux avoir quatre choses en main.
1. Un crawl complet du site Shopify existant. Utilisez Screaming Frog (je l'exécute localement ici à Londres sur une machine dédiée -- pas de crawl cloud, local, pour pouvoir capturer tout y compris les pages rendues en JavaScript). Exportez chaque URL, code de statut, balise titre, meta description, canonical et H1. C'est votre point de référence. C'est votre photo avant. Use Screaming Frog (I run it locally here in London on a dedicated machine -- not cloud crawl, local, so I can catch everything including JavaScript-rendered pages). Export every URL, status code, title tag, meta description, canonical, and H1. This is your baseline. It's your before-photo.
2. Un document de mapping. Chaque ancienne URL → nouvelle URL. Pas seulement les pages de catégories et de produits. Les articles de blog. Les pages de tags. Les pages de guide des tailles. L'URL /pages/about qui a 47 backlinks provenant de cette mention presse en 2020. Chaque URL qui a un historique de crawl, des backlinks ou des mots-clés en classement doit être dans cette feuille de calcul. Every old URL → new URL. Not just category and product pages. Blog posts. Tag pages. Size guide pages. The /pages/about URL that has 47 backlinks from that press mention in 2020. Every URL that has crawl history, backlinks, or ranking keywords needs to be in this spreadsheet.
3. Un export de backlinks depuis Ahrefs ou SEMrush. Filtrez sur les pages avec au moins un domaine référent. Ce sont vos cibles de redirection prioritaires. Manquez une 301 sur une page avec 12 domaines référents et vous venez de supprimer une part significative de votre link equity. Filter to pages with at least one referring domain. These are your highest-priority redirect targets. Miss a 301 on a page with 12 referring domains and you've just deleted a meaningful chunk of link equity.
4. Snapshot des classements de mots-clés. Exportez vos classements actuels depuis Google Search Console -- au minimum, les 200 meilleures requêtes par volume de clics. Vous avez besoin de cela pour pouvoir comparer avant et après la migration. Si « mens linen trousers » passe de la position 4 à la position 22 après le lancement, vous devez pouvoir le repérer immédiatement. Export your current rankings from Google Search Console -- at minimum, the top 200 queries by click volume. You need this so you can compare pre- and post-migration. If "mens linen trousers" drops from position 4 to position 22 after go-live, you need to be able to spot that immediately.
---
Implémentation des redirections dans une configuration headless
C'est là que ça devient un peu technique, mais restez avec moi.
Dans une configuration Shopify standard, vous gérez les redirections dans l'admin Shopify. Dans une configuration headless, votre framework front-end gère le routage -- ce qui signifie que les redirections se trouvent ailleurs selon votre cible de déploiement.
Si vous êtes sur Vercel (c'est là que se retrouvent la plupart des projets Next.js headless Shopify), vos redirections vont dans vercel.json sous le tableau redirects. Ça gère proprement les 301 et le réseau edge de Vercel les applique avant même que la page ne se rende, ce qui est exactement ce que vous voulez pour le SEO -- la redirection se fait au niveau de l'infrastructure, pas en JavaScript.vercel.json under the redirects array. It handles 301s cleanly and Vercel's edge network applies them before the page even renders, which is exactly what you want for SEO -- the redirect happens at the infrastructure layer, not in JavaScript.
Si vous êtes sur Netlify, même principe -- netlify.toml ou un fichier _redirects.Netlify, same idea -- netlify.toml or a _redirects file.
Si vous auto-hébergez sur quelque chose comme AWS CloudFront ou un serveur Node personnalisé, vous devez implémenter les redirections au niveau du reverse proxy. Ne le faites pas dans React router. Les redirections au niveau edge transmettent l'équité de lien proprement.
Une chose que je fais toujours : après avoir implémenté chaque redirection, je fais un contrôle par lot via httpstatus.io pour vérifier la chaîne. Une chaîne 301 → 301 → 200 est mauvaise. Vous voulez 301 → 200. Les chaînes de redirection perdent de l'équité de lien et ralentissent les choses.httpstatus.io to verify the chain. A 301 → 301 → 200 chain is bad. You want 301 → 200. Redirect chains bleed link equity and slow things down.
---
Canoniques, données structurées, et les détails que les équipes oublient
En 2023, Seahawk a accompagné une marque de soins DTC qui a migré vers une configuration Hydrogen headless (le framework React propre de Shopify). Les développeurs avaient fait du bon travail sur les redirections. Mais ils avaient oublié que Hydrogen ne génère pas automatiquement les balises canoniques -- il faut les définir manuellement dans le <head> en utilisant le composant SEO de Hydrogen. Résultat : chaque page produit se canonicalisait vers elle-même avec les paramètres de chaîne de requête ajoutés, parce que la logique du panier et des filtres écrivait les paramètres dans l'URL. Google voyait des centaines de pages produits quasi-dupliquées.<head> using Hydrogen's SEO component. Result: every product page was canonicalising to itself with the query string parameters appended, because the cart and filter logic was writing params into the URL. Google was seeing hundreds of near-duplicate product pages.
La correction a pris environ un jour une fois que nous l'avons trouvée, mais la volatilité de classement qu'elle a causée a pris environ trois semaines pour se stabiliser.
Ce qu'il faut vérifier manuellement avant le lancement
- Les balises canoniques sur les pages produit pointent vers l'URL propre (pas de query strings, pas de paramètres UTM).
noindex doit être sur votre environnement de staging et sur toutes les URLs de prévisualisation Vercel/Netlify -- ajoutez cela à votre checklist de déploiement, pas à votre liste de tâches.is on your staging environment and any Vercel/Netlify preview URLs -- add this to your deployment checklist, not your to-do list.- Les données structurées de produit (type Schema.org Product) sont rendues côté serveur dans la <head>, et non injectées par un script côté client après hydratation.Schema.org
Producttype) is being server-rendered in the<head>, not injected by a client-side script after hydration. - Votre robots.txt est accessible au domaine racine et ne bloque pas Googlebot de vos nouveaux motifs d'URL.
robots.txtis reachable at the root domain and isn't blocking Googlebot from your new URL patterns. - Le sitemap XML reflète la nouvelle structure d'URL -- pas l'ancien sitemap Shopify, et pas une version en cache provenant de votre processus de build.
---
Core Web Vitals : l'épée à double tranchant
Voici l'argument que la plupart des agences avancent quand elles vendent du headless : « Ça va améliorer vos Core Web Vitals. » Et elles n'ont pas tort -- potentiellement. Un front-end Next.js bien construit avec optimisation d'images, cache en edge, et code splitting approprié peut vraiment atteindre le vert sur les trois métriques Core Web Vitals.potentially. A well-built Next.js front-end with image optimisation, edge caching, and proper code splitting can genuinely hit green across all three Core Web Vitals metrics.
Mais j'ai vu des migrations headless qui ont empiré les CWV. Spécifiquement LCP (Largest Contentful Paint) et CLS (Cumulative Layout Shift).worse. Specifically LCP (Largest Contentful Paint) and CLS (Cumulative Layout Shift).
LCP s'aggrave quand l'image héros ou l'image produit above-the-fold n'est pas correctement préchargée. Dans une configuration headless, votre pipeline d'images est votre responsabilité. Vous ne comptiez plus sur le CDN de Shopify -- vous devez vous assurer que votre framework utilise des flags de priorité sur les images héros (dans Next.js, c'est la prop priority sur <Image>) et que vous servez des images correctement dimensionnées via un CDN comme Cloudflare ou Fastly.priority flags on hero images (in Next.js, that's the priority prop on <Image>) and that you're serving correctly sized images via a CDN like Cloudflare or Fastly.
CLS s'aggrave quand les polices ou le contenu dynamique (notamment l'état du panier, les bannières promotionnelles ou les puces de filtre) provoquent des décalages de mise en page pendant l'hydratation. Les thèmes Shopify gèrent cela raisonnablement bien dès le départ. Votre front-end headless personnalisé ne le fera pas, sauf si quelqu'un le conçoit spécifiquement pour cela.
Testez avec PageSpeed Insights sur votre URL de staging avant le go-live, pas après. Utilisez les données de terrain du Chrome UX Report si le site a été en staging assez longtemps pour en accumuler. Et vérifiez sur mobile -- c'est la donnée que Google utilise réellement pour le classement.PageSpeed Insights on your staging URL before go-live, not after. Use field data from Chrome UX Report if the site has been in staging long enough to accumulate it. And check on mobile -- that's the data Google actually uses for ranking.
---
Budget de Crawl et Grands Catalogues
Si vous avez moins de 5 000 URLs produits, le budget de crawl n'est probablement pas votre préoccupation principale. Mais si vous migrez un catalogue avec 50 000+ SKUs, navigation à facettes, variantes multiples de devises/régions, et un blog remontant à 2015 -- vous devez réfléchir à cela.
Les configurations headless créent souvent plus d'URLs que la configuration Shopify qu'elles remplacent. Les filtres à facettes qui étaient auparavant gérés via AJAX avec noindex dans Shopify obtiennent maintenant leurs propres routes rendues côté serveur si quelqu'un n'a pas réfléchi attentivement à la gestion des paramètres d'URL. Soudain, Googlebot essaie de crawler un site avec 200 000 URLs alors que vous en aviez 30 000 avant.more URLs than the Shopify setup they're replacing. Faceted filters that were previously handled via AJAX with noindex in Shopify now get their own server-rendered routes if someone hasn't thought carefully about URL parameter handling. Suddenly Googlebot is trying to crawl a 200,000-URL site when you had 30,000 before.
Gardez votre robots.txt serré. Interdisez le crawling des patterns d'URL filtrés qui ne représentent pas du contenu unique et rankable. Utilisez rel="canonical" sur les pages filtrées pour pointer vers la catégorie racine. Et ne créez pas de routes individuelles côté serveur pour chaque combinaison de facettes -- c'est le chemin vers la folie et le gaspillage de crawl.robots.txt tight. Disallow crawling of filtered URL patterns that don't represent unique, rankable content. Use rel="canonical" on filtered pages to point back to the root category. And don't create individual server-side routes for every facet combination -- that way lies madness and crawl waste.
---
Suivi Post-Migration (La Partie que les Gens Arrêtent de Faire Après la Deuxième Semaine)
La migration est en ligne, le client approuve, tout le monde célèbre. Et ensuite personne ne consulte la Search Console pendant un mois. Ne faites pas cela.
Configurez une exportation hebdomadaire des données GSC pendant les trois premiers mois minimum. Tracez les impressions, clics, position moyenne et couverture d'index. Guettez les baisses d'index -- si votre nombre de pages indexées chute soudainement de 8 000 à 4 200, quelque chose ne va pas et vous devez le trouver avant que Google décide que ces pages sont disparues pour de bon.
J'ai aussi configuré un monitor de disponibilité (j'utilise Better Uptime) sur l'URL du sitemap elle-même -- yourdomain.com/sitemap.xml. Si elle commence à retourner un 500 lors d'un déploiement, vous voulez le savoir immédiatement, pas trois jours plus tard quand vous remarquez que les classements dégringolent.yourdomain.com/sitemap.xml. If it starts returning a 500 during a deployment, you want to know immediately, not three days later when you notice rankings sliding.
Une dernière chose : renvoyez votre sitemap dans la Search Console après la mise en ligne. C'est peut-être évident. Mais je l'ai vu oublier plus de fois que je ne l'aimerais admettre.
---
FAQ
Aller en headless fait-il toujours du mal au SEO au départ ?
Pas toujours, mais il y a presque toujours une certaine volatilité de classement dans les quatre à huit premières semaines, le temps que Google re-crawle et ré-indexe la nouvelle configuration. Si vos redirections sont solides, vos canonicals corrects et vos données structurées intactes, cela se stabilise généralement et s'améliore souvent. Le danger vient quand les migrations sont bâclées -- c'est là que la volatilité à court terme se transforme en perte à long terme.
Puis-je utiliser le framework Hydrogen de Shopify et maintenir un bon SEO ?
Oui. Hydrogen utilise le rendu côté serveur par défaut, ce qui est la bonne fondation pour le SEO. Les lacunes se situent dans les détails -- gestion des canonicals, génération de sitemaps et données structurées. Shopify fournit bien un utilitaire SEO dans la librairie de composants de Hydrogen, mais ce n'est pas magique. Vous avez quand même besoin de quelqu'un qui comprenne ce qu'il fait et pourquoi.
Combien de temps faut-il pour que les classements se rétablissent après un problème de migration ?
Honnêtement ? Ça dépend de la gravité. Une redirection manquante sur une poignée de pages pourrait se corriger d'elle-même en quelques semaines une fois que vous la réparez. Une erreur canonique site-wide ou un noindex accidentel sur tout votre domaine peut prendre deux à quatre mois pour s'en remettre, parfois plus pour les termes très compétitifs. Plus tôt vous détectez et corrigez, plus court est le rétablissement.noindex on your entire domain can take two to four months to recover from, sometimes longer for highly competitive terms. The sooner you catch and fix it, the shorter the recovery.
Est-ce que headless en vaut la peine d'un point de vue SEO seul ?
Non. Headless vaut le coup pour la performance, la flexibilité et l'expérience développeur front-end. Le SEO est un facteur neutre si vous migrez correctement. Ne laissez pas une agence vous vendre le headless en mettant en avant les bénéfices SEO -- les mêmes gains de performance peuvent souvent être obtenus avec un thème Shopify 2.0 bien optimisé et une solide configuration CDN, pour une fraction du coût.if you migrate correctly. Don't let an agency sell you headless by leading with SEO benefits -- the same performance gains can often be achieved with a well-optimised Shopify 2.0 theme and a solid CDN setup, at a fraction of the cost.
---
Les migrations ne sont pas des lancements. Ce sont des transferts de confiance -- d'un ancien environnement que Google connaît bien à un nouveau qu'il ne connaît pas. Traitez chaque détail technique comme s'il avait de l'importance, car pour votre canal organique, c'est le cas.
