[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fmdzlKaZdlAH_0qR_KdX7vT_Hz0RfhsOKAZhk9nQgvak":3,"$fZkglffD9bE8Qu_Ylx3ZICaiSwC86izUK5Mt8_fcIxaw":24},{"_id":4,"slug":5,"__v":6,"author":7,"body":8,"canonical":9,"category":10,"createdAt":11,"date":12,"description":13,"htmlContent":14,"image":15,"imageAlt":15,"readingTime":16,"tags":17,"title":22,"updatedAt":23},"69d60bb8fd4d84bed9bc0015","amp-est-mort-que-faire-de-vos-pages-amp-existantes",0,"Equipe Seogard","Google a retiré l'avantage AMP du carrousel Top Stories en juin 2021. Depuis, le cache AMP de Google a été déprécié, et les Core Web Vitals sont devenus le vrai signal de performance mobile. Pourtant, des milliers de sites traînent encore des pages AMP fantômes — avec leurs canonicals croisés, leur markup dupliqué et leur dette technique silencieuse.\n\nSi vous êtes dans ce cas, chaque jour qui passe aggrave la situation : crawl budget gaspillé, contenu dupliqué latent, et une infrastructure que plus personne ne maintient. Voici comment démanteler proprement votre implémentation AMP.\n\n## L'état des lieux : pourquoi AMP ne sert plus à rien en 2026\n\nAMP (Accelerated Mobile Pages) reposait sur un deal implicite : vous acceptiez les contraintes du framework (JavaScript limité, composants propriétaires, hébergement sur le cache Google) en échange d'un placement privilégié dans les résultats mobiles. Ce deal n'existe plus.\n\n### La chronologie de la dépréciation\n\n- **Juin 2021** : Google ouvre le carrousel Top Stories à toutes les pages, AMP ou non. Le seul avantage concurrentiel d'AMP disparaît.\n- **Novembre 2022** : Google [annonce la fin du cache AMP](https://developers.google.com/search/docs/crawling-indexing/amp). Les pages AMP ne sont plus servies depuis `cdn.ampproject.org` mais depuis votre propre serveur.\n- **2023-2024** : les Core Web Vitals (LCP, INP, CLS) deviennent le signal de performance réel. AMP ne garantit plus de meilleur score qu'une page classique bien optimisée.\n- **2025** : le projet AMP est en maintenance minimale. La plupart des éditeurs majeurs (Washington Post, BBC) ont terminé leur démantèlement.\n\n### Ce que vos pages AMP vous coûtent encore\n\nLe problème n'est pas qu'AMP \"ne sert plus\". C'est qu'AMP vous coûte activement :\n\n**Crawl budget** : chaque article qui existe en version AMP (`/article/amp/`) et en version classique (`/article/`) double le nombre d'URLs à crawler. Sur un média de 20 000 articles, ça représente 20 000 URLs supplémentaires que Googlebot doit visiter, évaluer et indexer — ou ignorer. L'[analyse des logs serveur](/blog/log-analysis-pour-le-seo-comprendre-le-comportement-de-googlebot) montre souvent que Googlebot continue de crawler ces pages AMP des mois après qu'elles ont perdu tout intérêt.\n\n**Contenu dupliqué** : la relation `\u003Clink rel=\"amphtml\">` / `\u003Clink rel=\"canonical\">` entre vos pages classiques et AMP crée un lien de dépendance bidirectionnel. Si un des deux côtés casse (erreur 404 sur la version AMP, canonical mal configuré), vous entrez dans un [scénario de contenu dupliqué](/blog/contenu-duplique-causes-techniques-et-solutions) que Google peut mettre des semaines à résoudre.\n\n**Dette de maintenance** : le markup AMP utilise des composants spécifiques (`\u003Camp-img>`, `\u003Camp-carousel>`, `\u003Camp-analytics>`) qui nécessitent un pipeline de build séparé. Chaque modification du template principal doit être répliquée dans le template AMP. Vos développeurs passent du temps sur un format mort.\n\n## Audit préalable : cartographier votre surface AMP\n\nAvant de toucher à quoi que ce soit, vous devez connaître l'étendue exacte de votre implémentation AMP. Une migration à l'aveugle est le meilleur moyen de [provoquer une régression SEO majeure](/blog/regressions-seo-les-10-types-les-plus-frequents).\n\n### Identifier toutes les URLs AMP\n\nLancez un crawl Screaming Frog en ciblant spécifiquement les patterns AMP. La plupart des implémentations suivent l'un de ces schémas :\n\n- `/article-slug/amp/` (suffixe)\n- `/amp/article-slug/` (préfixe)\n- `m.example.com/article-slug` (sous-domaine mobile avec AMP intégré)\n- Paramètre `?amp=1`\n\nDans Screaming Frog, configurez un crawl avec extraction personnalisée :\n\n```\nConfiguration > Custom Extraction > Add:\n- Name: \"AMP HTML tag\"\n  Regex: \u003Chtml[^>]*(\\samp|\\s⚡)[^>]*>\n  Extract: Inner HTML (first match)\n\n- Name: \"AMP Canonical\"  \n  XPath: //link[@rel='canonical']/@href\n  Extract: Attribute value\n\n- Name: \"AmpHTML reference\"\n  XPath: //link[@rel='amphtml']/@href\n  Extract: Attribute value\n```\n\nExportez les résultats. Vous obtenez deux datasets essentiels :\n\n1. **Pages classiques qui pointent vers une version AMP** (celles qui ont un `\u003Clink rel=\"amphtml\">`)\n2. **Pages AMP elles-mêmes** (celles dont le `\u003Chtml>` contient l'attribut `amp` ou `⚡`)\n\n### Vérifier l'état d'indexation dans Search Console\n\nDans Google Search Console, allez dans **Pages > Pourquoi les pages ne sont-elles pas indexées**. Filtrez par URL contenant `/amp/` (ou votre pattern). Vous verrez probablement un mélange de :\n\n- Pages AMP indexées avec un canonical correct vers la version classique\n- Pages AMP indexées comme canonical d'elles-mêmes (problème)\n- Pages AMP en erreur (validation AMP échouée)\n- Pages AMP exclues (\"Page avec redirection\", \"Autre page avec canonical correcte\")\n\nLes [rapports souvent ignorés de Search Console](/blog/google-search-console-les-rapports-que-vous-ignorez) contiennent ces informations. Le rapport \"Pages\" avec le filtre d'URL est votre point de départ.\n\n### Mesurer le trafic résiduel\n\nVérifiez dans Google Analytics (ou votre outil d'analytics) le trafic organique qui arrive encore sur les URLs AMP. Sur beaucoup de sites, ce trafic est proche de zéro depuis la fin du cache AMP. Mais sur certains médias, des pages AMP bien positionnées captent encore du trafic — c'est ces URLs-là qu'il faudra traiter en priorité.\n\n## Scénario concret : migration AMP d'un média de 18 000 articles\n\nPrenons un cas réel typique : un média d'information avec 18 000 articles publiés entre 2017 et 2023. Chaque article existe en deux versions — classique et AMP — soit 36 000 URLs au total. Le site tourne sur un CMS headless avec un front Next.js.\n\n### Données initiales\n\n- **18 200 pages AMP** crawlées par Screaming Frog\n- **14 800** correctement indexées avec canonical vers la version classique\n- **2 100** indexées comme canonical d'elles-mêmes (erreur de configuration)\n- **1 300** en erreur 404 ou soft 404\n- **Trafic organique sur les URLs AMP** : 3 200 sessions/mois (2,1% du trafic total)\n- **Crawl budget consommé** par les URLs AMP : environ 22% des requêtes Googlebot d'après l'analyse des logs\n\n### Objectifs de la migration\n\n1. Supprimer toutes les pages AMP\n2. Rediriger proprement chaque URL AMP vers sa version classique\n3. Nettoyer les balises `\u003Clink rel=\"amphtml\">` des pages classiques\n4. Récupérer 22% de crawl budget\n5. Perte de trafic cible : \u003C 5% sur les 3 200 sessions/mois impactées\n\n### Planning d'exécution\n\n**Semaine 1** : audit + préparation des redirections + tests sur staging\n**Semaine 2** : déploiement des redirections + suppression du `\u003Clink rel=\"amphtml\">`\n**Semaine 3-4** : monitoring + traitement des erreurs résiduelles\n**Semaine 5-8** : stabilisation + nettoyage du sitemap + suivi Search Console\n\nLa durée totale peut sembler longue pour \"juste des redirections\", mais l'expérience montre que les [déploiements précipités causent des catastrophes SEO](/blog/deploiement-vendredi-soir-comment-eviter-la-catastrophe-seo). Prenez le temps.\n\n## Mise en place des redirections 301\n\nC'est le cœur technique de la migration. Chaque URL AMP doit retourner une redirection 301 permanente vers la version classique correspondante.\n\n### Configuration Nginx\n\nSi vos URLs AMP suivent le pattern `/article-slug/amp/`, la règle Nginx est directe :\n\n```nginx\nserver {\n    listen 443 ssl http2;\n    server_name www.example-media.fr;\n\n    # Redirection des URLs AMP suffixées\n    # /mon-article/amp/ → /mon-article/\n    # /mon-article/amp  → /mon-article/\n    location ~ ^(/.*?)/(amp)/?$ {\n        return 301 $1/;\n    }\n\n    # Redirection des URLs AMP préfixées\n    # /amp/mon-article/ → /mon-article/\n    location ~ ^/amp(/.*) {\n        return 301 $1;\n    }\n\n    # Gestion du paramètre ?amp=1\n    if ($arg_amp = \"1\") {\n        rewrite ^(.*)$ $1? permanent;\n    }\n\n    # Le reste de votre configuration...\n}\n```\n\nQuelques points critiques :\n\n- Testez chaque pattern de regex sur [regex101.com](https://regex101.com/) avec vos URLs réelles avant de déployer.\n- La redirection doit retourner un [code 301, pas 302](/blog/status-codes-http-guide-seo-complet). Un 302 dit à Google que la page AMP pourrait revenir. Un 301 dit que c'est définitif.\n- Si vous utilisez un CDN devant Nginx ([Varnish, Cloudflare, etc.](/blog/server-side-caching-et-seo-varnish-redis-cdn)), vérifiez que le CDN ne cache pas les anciennes réponses 200 des pages AMP. Purgez le cache du CDN après déploiement.\n\n### Configuration Apache\n\nL'équivalent en `.htaccess` :\n\n```apache\nRewriteEngine On\n\n# /mon-article/amp/ → /mon-article/\nRewriteRule ^(.+)/amp/?$ /$1/ [R=301,L]\n\n# /amp/mon-article/ → /mon-article/\nRewriteRule ^amp/(.+)$ /$1 [R=301,L]\n\n# Paramètre ?amp=1\nRewriteCond %{QUERY_STRING} (^|&)amp=1(&|$)\nRewriteRule ^(.*)$ /$1? [R=301,L]\n```\n\n### Vérification des redirections\n\nAvant de considérer les redirections comme opérationnelles, validez avec cURL sur un échantillon de 50-100 URLs :\n\n```bash\n# Vérification unitaire\ncurl -I -L \"https://www.example-media.fr/politique/reforme-2024/amp/\"\n\n# Vérification en masse depuis un fichier d'URLs AMP\nwhile IFS= read -r url; do\n    status=$(curl -o /dev/null -s -w \"%{http_code}\" -I \"$url\")\n    final=$(curl -o /dev/null -s -w \"%{url_effective}\" -L \"$url\")\n    echo \"$status | $url → $final\"\ndone \u003C amp-urls.txt | tee redirect-audit.log\n\n# Filtrer les redirections qui ne retournent pas 301\ngrep -v \"^301\" redirect-audit.log\n```\n\nTout ce qui ne retourne pas un 301 propre vers la bonne URL classique doit être investigué. Les cas problématiques courants : chaînes de redirections (AMP → ancienne URL → nouvelle URL), redirections vers la homepage (catch-all mal configuré), et boucles de redirection.\n\n## Nettoyage du markup HTML\n\nLes redirections seules ne suffisent pas. Vous devez nettoyer le HTML de vos pages classiques pour supprimer toute référence à AMP.\n\n### Supprimer les balises `\u003Clink rel=\"amphtml\">`\n\nChaque page classique qui avait une version AMP contient quelque chose comme :\n\n```html\n\u003Chead>\n    \u003C!-- AVANT : à supprimer -->\n    \u003Clink rel=\"amphtml\" href=\"https://www.example-media.fr/politique/reforme-2024/amp/\">\n    \n    \u003C!-- À conserver tel quel -->\n    \u003Clink rel=\"canonical\" href=\"https://www.example-media.fr/politique/reforme-2024/\">\n\u003C/head>\n```\n\nLa balise `\u003Clink rel=\"amphtml\">` doit être retirée. Si elle pointe vers une URL qui redirige en 301, Google finira par comprendre — mais c'est un signal confus qui ralentit la transition. Un signal propre = une transition rapide.\n\nSur un CMS headless avec un front Next.js, la modification est souvent dans le composant `\u003CHead>` :\n\n```tsx\n// components/ArticleHead.tsx — AVANT\nimport Head from 'next/head';\n\ninterface ArticleHeadProps {\n  article: {\n    slug: string;\n    title: string;\n    description: string;\n    canonicalUrl: string;\n  };\n}\n\nexport function ArticleHead({ article }: ArticleHeadProps) {\n  return (\n    \u003CHead>\n      \u003Ctitle>{article.title}\u003C/title>\n      \u003Cmeta name=\"description\" content={article.description} />\n      \u003Clink rel=\"canonical\" href={article.canonicalUrl} />\n      {/* SUPPRIMER cette ligne : */}\n      \u003Clink rel=\"amphtml\" href={`${article.canonicalUrl}amp/`} />\n    \u003C/Head>\n  );\n}\n\n// components/ArticleHead.tsx — APRÈS\nexport function ArticleHead({ article }: ArticleHeadProps) {\n  return (\n    \u003CHead>\n      \u003Ctitle>{article.title}\u003C/title>\n      \u003Cmeta name=\"description\" content={article.description} />\n      \u003Clink rel=\"canonical\" href={article.canonicalUrl} />\n      {/* Plus de référence AMP */}\n    \u003C/Head>\n  );\n}\n```\n\nSi vous utilisez un CMS comme WordPress avec un plugin AMP (AMP for WordPress, par exemple), la désactivation du plugin devrait supprimer automatiquement la balise `amphtml`. Mais **vérifiez** — certains plugins laissent des résidus dans le HTML même après désactivation. Inspectez le source HTML d'au moins 10 pages après désactivation.\n\n### Nettoyer le sitemap\n\nVotre sitemap XML contient probablement les URLs AMP. Deux approches :\n\n1. **Si les URLs AMP avaient leur propre sitemap** (`sitemap-amp.xml`) : supprimez le fichier et retirez-le du `sitemap-index.xml`.\n2. **Si les URLs AMP étaient mélangées dans le sitemap principal** : regénérez le sitemap sans les URLs AMP.\n\nDans les deux cas, ne laissez jamais des URLs qui redirigent dans votre sitemap. Google interprète un sitemap comme une déclaration de vos URLs canoniques actives. Y laisser des URLs 301 envoie un signal contradictoire.\n\nAprès nettoyage, soumettez le sitemap mis à jour dans Search Console.\n\n### Supprimer le code AMP du build\n\nSi votre projet contenait un pipeline de génération des pages AMP (templates AMP, composants `\u003Camp-*>`, validation AMP dans le CI), supprimez tout. Ce code mort est une source de confusion pour les nouveaux développeurs et un vecteur de bugs si quelqu'un le réactive par erreur.\n\nIntégrez un [check dans votre CI/CD](/blog/automatiser-les-checks-seo-dans-le-ci-cd) qui vérifie l'absence de balises AMP dans le HTML généré :\n\n```bash\n# check-no-amp.sh — à intégrer dans votre pipeline CI\n#!/bin/bash\nset -e\n\nBUILD_DIR=\"./out\"  # ou .next, dist, etc.\nAMP_FOUND=0\n\n# Chercher les attributs AMP dans les fichiers HTML générés\nwhile IFS= read -r file; do\n    if grep -qiE '\u003Chtml[^>]*([\\s]amp[\\s>]|[\\s]⚡)' \"$file\"; then\n        echo \"ERREUR: attribut AMP trouvé dans $file\"\n        AMP_FOUND=1\n    fi\n    if grep -qiE 'rel=\"amphtml\"' \"$file\"; then\n        echo \"ERREUR: lien amphtml trouvé dans $file\"\n        AMP_FOUND=1\n    fi\ndone \u003C \u003C(find \"$BUILD_DIR\" -name \"*.html\" -type f)\n\nif [ \"$AMP_FOUND\" -eq 1 ]; then\n    echo \"❌ Des résidus AMP ont été détectés. Migration incomplète.\"\n    exit 1\nelse\n    echo \"✅ Aucun résidu AMP détecté.\"\nfi\n```\n\n## Performance des pages classiques : combler le gap\n\nAMP avait un avantage réel : ses contraintes forçaient des pages légères. Quand vous redirigez une page AMP (\u003C 100 KB, rendu quasi-instantané) vers une page classique qui charge 3 MB de JavaScript, vous allez perdre en Core Web Vitals.\n\n### Auditer les Core Web Vitals de vos pages de destination\n\nUtilisez [Chrome DevTools](/blog/chrome-devtools-pour-le-seo-astuces-avancees) en mode mobile (Lighthouse, onglet Performance) sur un échantillon de vos pages classiques. Les métriques clés :\n\n- **LCP (Largest Contentful Paint)** : doit être \u003C 2,5s. Si vos pages classiques ont un LCP > 4s, vous allez sentir l'impact de la migration.\n- **INP (Interaction to Next Paint)** : doit être \u003C 200ms. Si votre page classique charge un framework JS lourd avec hydration côté client, l'INP peut exploser.\n- **CLS (Cumulative Layout Shift)** : doit être \u003C 0,1. Les pubs display et les images sans dimensions explicites sont les coupables habituels.\n\nSi vos pages classiques sont des SPA rendues côté client, vous avez un problème plus profond que la migration AMP. Googlebot peut interpréter le JavaScript, mais les [divergences entre SSR et CSR](/blog/comparer-ssr-et-csr-detecter-les-divergences-invisibles) créent des comportements imprévisibles. Migrer vers du SSR ou SSG devrait être une priorité parallèle.\n\n### Quick wins performance\n\nQuelques optimisations rapides qui rapprochent vos pages classiques des performances qu'avait AMP :\n\n**Lazy loading natif sur les images** — AMP le faisait par défaut avec `\u003Camp-img>`. Vos pages classiques doivent utiliser `loading=\"lazy\"` sur toutes les images hors viewport initial :\n\n```html\n\u003C!-- Image dans le viewport initial (hero) : pas de lazy loading -->\n\u003Cimg src=\"/images/article-hero.webp\" \n     alt=\"Titre de l'article\" \n     width=\"1200\" \n     height=\"630\"\n     fetchpriority=\"high\">\n\n\u003C!-- Images dans le corps de l'article : lazy loading -->\n\u003Cimg src=\"/images/infographie-donnees.webp\" \n     alt=\"Infographie des données\" \n     width=\"800\" \n     height=\"450\" \n     loading=\"lazy\" \n     decoding=\"async\">\n```\n\n**Préchargement du LCP** — identifiez l'élément LCP de vos articles (souvent l'image hero ou le premier paragraphe) et ajoutez un `\u003Clink rel=\"preload\">` dans le `\u003Chead>` :\n\n```html\n\u003Clink rel=\"preload\" as=\"image\" href=\"/images/article-hero.webp\" fetchpriority=\"high\">\n```\n\n**Réduction du JS bloquant** — AMP interdisait le JavaScript custom. Vos pages classiques chargent probablement des trackers, des widgets sociaux, des scripts pub. Chaque script bloquant ajoute au LCP. Auditez avec `Performance Insights` dans Chrome DevTools et différez tout ce qui n'est pas critique au rendu initial.\n\n## Monitoring post-migration : les 8 semaines critiques\n\nLes deux premiers mois après la migration sont la période à risque. Les problèmes ne sont pas toujours visibles immédiatement — certaines régressions mettent 2-3 semaines à se manifester dans les données Search Console.\n\n### Semaine 1-2 : vérifier les redirections\n\nSurveillez dans Search Console le rapport **Pages** filtré par URL AMP. Vous devriez voir les URLs AMP migrer progressivement du statut \"Page indexée\" vers \"Page avec redirection\". Si certaines URLs AMP restent indexées sans redirection, il y a un trou dans votre configuration.\n\nDans vos logs serveur, vérifiez que Googlebot suit bien les redirections 301 :\n\n```bash\n# Extraire les requêtes Googlebot sur les URLs AMP depuis les access logs\ngrep \"Googlebot\" /var/log/nginx/access.log | grep -E \"/amp/|/amp$|\\?amp=1\" | \\\n    awk '{print $9, $7}' | sort | uniq -c | sort -rn | head -20\n```\n\nVous devez voir des 301 en masse. Si vous voyez des 200 (la page AMP est encore servie) ou des 404, corrigez immédiatement.\n\n### Semaine 3-4 : surveiller les fluctuations de trafic\n\nComparez le trafic organique semaine par semaine sur les URLs impactées. Une baisse de 10-15% la première semaine est normale — Google recrawle et réévalue les pages. Si la baisse persiste au-delà de 3 semaines ou dépasse 20%, investiguez :\n\n- Les pages classiques sont-elles bien indexées ?\n- Les Core Web Vitals des pages classiques sont-ils corrects ?\n- Y a-t-il des erreurs de crawl dans Search Console ?\n\n### Semaine 5-8 : confirmer la stabilisation\n\nLe trafic devrait se stabiliser, voire augmenter légèrement grâce au crawl budget récupéré. Dans notre scénario de média à 18 000 articles, la récupération de 22% de crawl budget signifie que Googlebot peut découvrir et réindexer plus rapidement les nouveaux contenus.\n\nUn outil de [monitoring SEO continu](/blog/monitoring-seo-pourquoi-les-audits-ponctuels-ne-suffisent-plus) comme Seogard détecte automatiquement les régressions pendant cette période critique : apparition soudaine de 404 sur les anciennes URLs AMP, réapparition de balises `amphtml` après un déploiement, ou dégradation des Core Web Vitals sur les pages de destination.\n\n### Signaux de succès\n\nVotre migration AMP est réussie quand :\n\n- **Zéro URL AMP** dans l'index Google (vérifiable via Search Console > Pages, filtre URL)\n- **Trafic organique** sur les pages impactées revenu au niveau pré-migration (± 5%)\n- **Crawl budget AMP** tombé à zéro dans les logs serveur\n- **Aucune balise `amphtml`** dans le HTML de votre site (vérifiable via le check CI décrit plus haut)\n- **Core Web Vitals** des pages classiques dans le vert pour mobile\n\n## Edge cases et pièges fréquents\n\n### Pages AMP sans équivalent classique\n\nCertains sites ont créé des pages AMP qui n'ont pas de version classique correspondante — souvent des landing pages AMP Stories ou des pages de test oubliées. Pour celles-ci, deux options :\n\n1. **La page a du trafic/des backlinks** : créez une version classique, puis redirigez l'URL AMP vers cette nouvelle page.\n2. **La page n'a ni trafic ni backlinks** : renvoyez un 410 (Gone) plutôt qu'un 404. Le 410 dit explicitement à Google que la page a été volontairement supprimée.\n\n### Backlinks pointant vers des URLs AMP\n\nDes sites externes pointent peut-être directement vers vos URLs AMP. La redirection 301 transfère l'essentiel du link equity, mais vérifiez avec Ahrefs, Majestic ou Search Console (Liens > Liens externes) les backlinks les plus importants pointant vers des URLs AMP. Si un backlink de forte autorité pointe vers une URL AMP, assurez-vous que la chaîne de redirection est propre (un seul hop, pas de 302 intermédiaire).\n\n### AMP sur des sous-domaines\n\nSi votre implémentation AMP utilisait un sous-domaine (`amp.example.com`), la migration est plus complexe. Les redirections doivent être cross-domain, et vous devez maintenir le sous-domaine actif uniquement pour servir les 301. Ne supprimez pas le DNS du sous-domaine tant que Google n'a pas fini de recrawler toutes les URLs — comptez 3-6 mois selon le volume.\n\n### Pages AMP dans le cache de services tiers\n\nCertains agrégateurs (Flipboard, Apple News, etc.) peuvent avoir mis en cache vos pages AMP. Les redirections 301 suffiront pour Google, mais ces services tiers peuvent mettre plus longtemps à mettre à jour. Si vous avez des intégrations directes avec ces plateformes, prévenez-les de la migration.\n\n## Le piège du \"on verra plus tard\"\n\nLa tentation est forte de laisser les pages AMP en place en se disant qu'elles ne font pas de mal. Elles en font. Chaque URL AMP qui reste est une URL de plus dans votre périmètre de crawl, une source potentielle de [contenu dupliqué](/blog/contenu-duplique-causes-techniques-et-solutions), et une page de plus à surveiller pour les [régressions](/blog/regressions-seo-les-10-types-les-plus-frequents).\n\nPlus vous attendez, plus il y a de risque qu'un [déploiement futur](/blog/deploiement-vendredi-soir-comment-eviter-la-catastrophe-seo) casse les canonicals croisés sans que personne ne s'en aperçoive. Et quand le problème devient visible dans les données, il est déjà trop tard — Google a indexé le mauvais canonical depuis des semaines.\n\nAMP est un format abandonné. Traitez-le comme tel : démontez-le méthodiquement, redirigez proprement, monitorez la transition, et passez à autre chose. Votre crawl budget, votre équipe de développement et votre dette technique vous remercieront. Un outil comme Seogard peut surveiller automatiquement que vos anciennes URLs AMP restent bien en 301 et qu'aucun résidu `amphtml` ne réapparaît après un déploiement — exactement le type de régression silencieuse qui passe entre les mailles des audits ponctuels.\n```","https://seogard.io/blog/amp-est-mort-que-faire-de-vos-pages-amp-existantes","Mobile","2026-04-08T08:03:04.335Z","2026-04-08","Guide technique complet pour migrer vos pages AMP vers des pages classiques performantes. Redirections, canonicals, monitoring et pièges à éviter.","\u003Cp>Google a retiré l'avantage AMP du carrousel Top Stories en juin 2021. Depuis, le cache AMP de Google a été déprécié, et les Core Web Vitals sont devenus le vrai signal de performance mobile. Pourtant, des milliers de sites traînent encore des pages AMP fantômes — avec leurs canonicals croisés, leur markup dupliqué et leur dette technique silencieuse.\u003C/p>\n\u003Cp>Si vous êtes dans ce cas, chaque jour qui passe aggrave la situation : crawl budget gaspillé, contenu dupliqué latent, et une infrastructure que plus personne ne maintient. Voici comment démanteler proprement votre implémentation AMP.\u003C/p>\n\u003Ch2>L'état des lieux : pourquoi AMP ne sert plus à rien en 2026\u003C/h2>\n\u003Cp>AMP (Accelerated Mobile Pages) reposait sur un deal implicite : vous acceptiez les contraintes du framework (JavaScript limité, composants propriétaires, hébergement sur le cache Google) en échange d'un placement privilégié dans les résultats mobiles. Ce deal n'existe plus.\u003C/p>\n\u003Ch3>La chronologie de la dépréciation\u003C/h3>\n\u003Cul>\n\u003Cli>\u003Cstrong>Juin 2021\u003C/strong> : Google ouvre le carrousel Top Stories à toutes les pages, AMP ou non. Le seul avantage concurrentiel d'AMP disparaît.\u003C/li>\n\u003Cli>\u003Cstrong>Novembre 2022\u003C/strong> : Google \u003Ca href=\"https://developers.google.com/search/docs/crawling-indexing/amp\">annonce la fin du cache AMP\u003C/a>. Les pages AMP ne sont plus servies depuis \u003Ccode>cdn.ampproject.org\u003C/code> mais depuis votre propre serveur.\u003C/li>\n\u003Cli>\u003Cstrong>2023-2024\u003C/strong> : les Core Web Vitals (LCP, INP, CLS) deviennent le signal de performance réel. AMP ne garantit plus de meilleur score qu'une page classique bien optimisée.\u003C/li>\n\u003Cli>\u003Cstrong>2025\u003C/strong> : le projet AMP est en maintenance minimale. La plupart des éditeurs majeurs (Washington Post, BBC) ont terminé leur démantèlement.\u003C/li>\n\u003C/ul>\n\u003Ch3>Ce que vos pages AMP vous coûtent encore\u003C/h3>\n\u003Cp>Le problème n'est pas qu'AMP \"ne sert plus\". C'est qu'AMP vous coûte activement :\u003C/p>\n\u003Cp>\u003Cstrong>Crawl budget\u003C/strong> : chaque article qui existe en version AMP (\u003Ccode>/article/amp/\u003C/code>) et en version classique (\u003Ccode>/article/\u003C/code>) double le nombre d'URLs à crawler. Sur un média de 20 000 articles, ça représente 20 000 URLs supplémentaires que Googlebot doit visiter, évaluer et indexer — ou ignorer. L'\u003Ca href=\"/blog/log-analysis-pour-le-seo-comprendre-le-comportement-de-googlebot\">analyse des logs serveur\u003C/a> montre souvent que Googlebot continue de crawler ces pages AMP des mois après qu'elles ont perdu tout intérêt.\u003C/p>\n\u003Cp>\u003Cstrong>Contenu dupliqué\u003C/strong> : la relation \u003Ccode>&#x3C;link rel=\"amphtml\">\u003C/code> / \u003Ccode>&#x3C;link rel=\"canonical\">\u003C/code> entre vos pages classiques et AMP crée un lien de dépendance bidirectionnel. Si un des deux côtés casse (erreur 404 sur la version AMP, canonical mal configuré), vous entrez dans un \u003Ca href=\"/blog/contenu-duplique-causes-techniques-et-solutions\">scénario de contenu dupliqué\u003C/a> que Google peut mettre des semaines à résoudre.\u003C/p>\n\u003Cp>\u003Cstrong>Dette de maintenance\u003C/strong> : le markup AMP utilise des composants spécifiques (\u003Ccode>&#x3C;amp-img>\u003C/code>, \u003Ccode>&#x3C;amp-carousel>\u003C/code>, \u003Ccode>&#x3C;amp-analytics>\u003C/code>) qui nécessitent un pipeline de build séparé. Chaque modification du template principal doit être répliquée dans le template AMP. Vos développeurs passent du temps sur un format mort.\u003C/p>\n\u003Ch2>Audit préalable : cartographier votre surface AMP\u003C/h2>\n\u003Cp>Avant de toucher à quoi que ce soit, vous devez connaître l'étendue exacte de votre implémentation AMP. Une migration à l'aveugle est le meilleur moyen de \u003Ca href=\"/blog/regressions-seo-les-10-types-les-plus-frequents\">provoquer une régression SEO majeure\u003C/a>.\u003C/p>\n\u003Ch3>Identifier toutes les URLs AMP\u003C/h3>\n\u003Cp>Lancez un crawl Screaming Frog en ciblant spécifiquement les patterns AMP. La plupart des implémentations suivent l'un de ces schémas :\u003C/p>\n\u003Cul>\n\u003Cli>\u003Ccode>/article-slug/amp/\u003C/code> (suffixe)\u003C/li>\n\u003Cli>\u003Ccode>/amp/article-slug/\u003C/code> (préfixe)\u003C/li>\n\u003Cli>\u003Ccode>m.example.com/article-slug\u003C/code> (sous-domaine mobile avec AMP intégré)\u003C/li>\n\u003Cli>Paramètre \u003Ccode>?amp=1\u003C/code>\u003C/li>\n\u003C/ul>\n\u003Cp>Dans Screaming Frog, configurez un crawl avec extraction personnalisée :\u003C/p>\n\u003Cpre>\u003Ccode>Configuration > Custom Extraction > Add:\n- Name: \"AMP HTML tag\"\n  Regex: &#x3C;html[^>]*(\\samp|\\s⚡)[^>]*>\n  Extract: Inner HTML (first match)\n\n- Name: \"AMP Canonical\"  \n  XPath: //link[@rel='canonical']/@href\n  Extract: Attribute value\n\n- Name: \"AmpHTML reference\"\n  XPath: //link[@rel='amphtml']/@href\n  Extract: Attribute value\n\u003C/code>\u003C/pre>\n\u003Cp>Exportez les résultats. Vous obtenez deux datasets essentiels :\u003C/p>\n\u003Col>\n\u003Cli>\u003Cstrong>Pages classiques qui pointent vers une version AMP\u003C/strong> (celles qui ont un \u003Ccode>&#x3C;link rel=\"amphtml\">\u003C/code>)\u003C/li>\n\u003Cli>\u003Cstrong>Pages AMP elles-mêmes\u003C/strong> (celles dont le \u003Ccode>&#x3C;html>\u003C/code> contient l'attribut \u003Ccode>amp\u003C/code> ou \u003Ccode>⚡\u003C/code>)\u003C/li>\n\u003C/ol>\n\u003Ch3>Vérifier l'état d'indexation dans Search Console\u003C/h3>\n\u003Cp>Dans Google Search Console, allez dans \u003Cstrong>Pages > Pourquoi les pages ne sont-elles pas indexées\u003C/strong>. Filtrez par URL contenant \u003Ccode>/amp/\u003C/code> (ou votre pattern). Vous verrez probablement un mélange de :\u003C/p>\n\u003Cul>\n\u003Cli>Pages AMP indexées avec un canonical correct vers la version classique\u003C/li>\n\u003Cli>Pages AMP indexées comme canonical d'elles-mêmes (problème)\u003C/li>\n\u003Cli>Pages AMP en erreur (validation AMP échouée)\u003C/li>\n\u003Cli>Pages AMP exclues (\"Page avec redirection\", \"Autre page avec canonical correcte\")\u003C/li>\n\u003C/ul>\n\u003Cp>Les \u003Ca href=\"/blog/google-search-console-les-rapports-que-vous-ignorez\">rapports souvent ignorés de Search Console\u003C/a> contiennent ces informations. Le rapport \"Pages\" avec le filtre d'URL est votre point de départ.\u003C/p>\n\u003Ch3>Mesurer le trafic résiduel\u003C/h3>\n\u003Cp>Vérifiez dans Google Analytics (ou votre outil d'analytics) le trafic organique qui arrive encore sur les URLs AMP. Sur beaucoup de sites, ce trafic est proche de zéro depuis la fin du cache AMP. Mais sur certains médias, des pages AMP bien positionnées captent encore du trafic — c'est ces URLs-là qu'il faudra traiter en priorité.\u003C/p>\n\u003Ch2>Scénario concret : migration AMP d'un média de 18 000 articles\u003C/h2>\n\u003Cp>Prenons un cas réel typique : un média d'information avec 18 000 articles publiés entre 2017 et 2023. Chaque article existe en deux versions — classique et AMP — soit 36 000 URLs au total. Le site tourne sur un CMS headless avec un front Next.js.\u003C/p>\n\u003Ch3>Données initiales\u003C/h3>\n\u003Cul>\n\u003Cli>\u003Cstrong>18 200 pages AMP\u003C/strong> crawlées par Screaming Frog\u003C/li>\n\u003Cli>\u003Cstrong>14 800\u003C/strong> correctement indexées avec canonical vers la version classique\u003C/li>\n\u003Cli>\u003Cstrong>2 100\u003C/strong> indexées comme canonical d'elles-mêmes (erreur de configuration)\u003C/li>\n\u003Cli>\u003Cstrong>1 300\u003C/strong> en erreur 404 ou soft 404\u003C/li>\n\u003Cli>\u003Cstrong>Trafic organique sur les URLs AMP\u003C/strong> : 3 200 sessions/mois (2,1% du trafic total)\u003C/li>\n\u003Cli>\u003Cstrong>Crawl budget consommé\u003C/strong> par les URLs AMP : environ 22% des requêtes Googlebot d'après l'analyse des logs\u003C/li>\n\u003C/ul>\n\u003Ch3>Objectifs de la migration\u003C/h3>\n\u003Col>\n\u003Cli>Supprimer toutes les pages AMP\u003C/li>\n\u003Cli>Rediriger proprement chaque URL AMP vers sa version classique\u003C/li>\n\u003Cli>Nettoyer les balises \u003Ccode>&#x3C;link rel=\"amphtml\">\u003C/code> des pages classiques\u003C/li>\n\u003Cli>Récupérer 22% de crawl budget\u003C/li>\n\u003Cli>Perte de trafic cible : &#x3C; 5% sur les 3 200 sessions/mois impactées\u003C/li>\n\u003C/ol>\n\u003Ch3>Planning d'exécution\u003C/h3>\n\u003Cp>\u003Cstrong>Semaine 1\u003C/strong> : audit + préparation des redirections + tests sur staging\n\u003Cstrong>Semaine 2\u003C/strong> : déploiement des redirections + suppression du \u003Ccode>&#x3C;link rel=\"amphtml\">\u003C/code>\n\u003Cstrong>Semaine 3-4\u003C/strong> : monitoring + traitement des erreurs résiduelles\n\u003Cstrong>Semaine 5-8\u003C/strong> : stabilisation + nettoyage du sitemap + suivi Search Console\u003C/p>\n\u003Cp>La durée totale peut sembler longue pour \"juste des redirections\", mais l'expérience montre que les \u003Ca href=\"/blog/deploiement-vendredi-soir-comment-eviter-la-catastrophe-seo\">déploiements précipités causent des catastrophes SEO\u003C/a>. Prenez le temps.\u003C/p>\n\u003Ch2>Mise en place des redirections 301\u003C/h2>\n\u003Cp>C'est le cœur technique de la migration. Chaque URL AMP doit retourner une redirection 301 permanente vers la version classique correspondante.\u003C/p>\n\u003Ch3>Configuration Nginx\u003C/h3>\n\u003Cp>Si vos URLs AMP suivent le pattern \u003Ccode>/article-slug/amp/\u003C/code>, la règle Nginx est directe :\u003C/p>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">server\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    listen \u003C/span>\u003Cspan style=\"color:#79B8FF\">443\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> ssl http2;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    server_name \u003C/span>\u003Cspan style=\"color:#E1E4E8\">www.example-media.fr;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">    # Redirection des URLs AMP suffixées\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">    # /mon-article/amp/ → /mon-article/\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">    # /mon-article/amp  → /mon-article/\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    location\u003C/span>\u003Cspan style=\"color:#F97583\"> ~\u003C/span>\u003Cspan style=\"color:#DBEDFF\"> ^(/.*?)/(amp)/?$ \u003C/span>\u003Cspan style=\"color:#E1E4E8\">{\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">        return\u003C/span>\u003Cspan style=\"color:#79B8FF\"> 301\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> $1/;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    }\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">    # Redirection des URLs AMP préfixées\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">    # /amp/mon-article/ → /mon-article/\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    location\u003C/span>\u003Cspan style=\"color:#F97583\"> ~\u003C/span>\u003Cspan style=\"color:#DBEDFF\"> ^/amp(/.*) \u003C/span>\u003Cspan style=\"color:#E1E4E8\">{\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">        return\u003C/span>\u003Cspan style=\"color:#79B8FF\"> 301\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> $1;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    }\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">    # Gestion du paramètre ?amp=1\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    if\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> ($arg_amp \u003C/span>\u003Cspan style=\"color:#F97583\">= \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"1\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">) {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">        rewrite\u003C/span>\u003Cspan style=\"color:#DBEDFF\"> ^(.*)$\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> $1? \u003C/span>\u003Cspan style=\"color:#F97583\">permanent\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    }\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">    # Le reste de votre configuration...\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">}\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>Quelques points critiques :\u003C/p>\n\u003Cul>\n\u003Cli>Testez chaque pattern de regex sur \u003Ca href=\"https://regex101.com/\">regex101.com\u003C/a> avec vos URLs réelles avant de déployer.\u003C/li>\n\u003Cli>La redirection doit retourner un \u003Ca href=\"/blog/status-codes-http-guide-seo-complet\">code 301, pas 302\u003C/a>. Un 302 dit à Google que la page AMP pourrait revenir. Un 301 dit que c'est définitif.\u003C/li>\n\u003Cli>Si vous utilisez un CDN devant Nginx (\u003Ca href=\"/blog/server-side-caching-et-seo-varnish-redis-cdn\">Varnish, Cloudflare, etc.\u003C/a>), vérifiez que le CDN ne cache pas les anciennes réponses 200 des pages AMP. Purgez le cache du CDN après déploiement.\u003C/li>\n\u003C/ul>\n\u003Ch3>Configuration Apache\u003C/h3>\n\u003Cp>L'équivalent en \u003Ccode>.htaccess\u003C/code> :\u003C/p>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">RewriteEngine\u003C/span>\u003Cspan style=\"color:#B392F0\"> On\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># /mon-article/amp/ → /mon-article/\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">RewriteRule\u003C/span>\u003Cspan style=\"color:#DBEDFF\"> ^(.+)/amp/?$\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> /$1/\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> [R=\u003C/span>\u003Cspan style=\"color:#79B8FF\">301\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,L]\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># /amp/mon-article/ → /mon-article/\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">RewriteRule\u003C/span>\u003Cspan style=\"color:#DBEDFF\"> ^amp/(.+)$\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> /$1\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> [R=\u003C/span>\u003Cspan style=\"color:#79B8FF\">301\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,L]\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Paramètre ?amp=1\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">RewriteCond\u003C/span>\u003Cspan style=\"color:#DBEDFF\"> %{QUERY_STRING}\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> (^|&#x26;)amp=1(&#x26;|$)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">RewriteRule\u003C/span>\u003Cspan style=\"color:#DBEDFF\"> ^(.*)$\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> /$1?\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> [R=\u003C/span>\u003Cspan style=\"color:#79B8FF\">301\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,L]\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Ch3>Vérification des redirections\u003C/h3>\n\u003Cp>Avant de considérer les redirections comme opérationnelles, validez avec cURL sur un échantillon de 50-100 URLs :\u003C/p>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Vérification unitaire\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">curl\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -I\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -L\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"https://www.example-media.fr/politique/reforme-2024/amp/\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Vérification en masse depuis un fichier d'URLs AMP\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">while\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> IFS\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#79B8FF\"> read\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -r\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> url\u003C/span>\u003Cspan style=\"color:#E1E4E8\">; \u003C/span>\u003Cspan style=\"color:#F97583\">do\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    status\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\">$(\u003C/span>\u003Cspan style=\"color:#B392F0\">curl\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -o\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> /dev/null\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -s\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -w\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"%{http_code}\"\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -I\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">$url\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    final\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\">$(\u003C/span>\u003Cspan style=\"color:#B392F0\">curl\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -o\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> /dev/null\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -s\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -w\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"%{url_effective}\"\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -L\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">$url\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">    echo\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">$status\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> | \u003C/span>\u003Cspan style=\"color:#E1E4E8\">$url\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> → \u003C/span>\u003Cspan style=\"color:#E1E4E8\">$final\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">done\u003C/span>\u003Cspan style=\"color:#F97583\"> &#x3C;\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> amp-urls.txt \u003C/span>\u003Cspan style=\"color:#F97583\">|\u003C/span>\u003Cspan style=\"color:#B392F0\"> tee\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> redirect-audit.log\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Filtrer les redirections qui ne retournent pas 301\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">grep\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -v\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"^301\"\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> redirect-audit.log\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>Tout ce qui ne retourne pas un 301 propre vers la bonne URL classique doit être investigué. Les cas problématiques courants : chaînes de redirections (AMP → ancienne URL → nouvelle URL), redirections vers la homepage (catch-all mal configuré), et boucles de redirection.\u003C/p>\n\u003Ch2>Nettoyage du markup HTML\u003C/h2>\n\u003Cp>Les redirections seules ne suffisent pas. Vous devez nettoyer le HTML de vos pages classiques pour supprimer toute référence à AMP.\u003C/p>\n\u003Ch3>Supprimer les balises \u003Ccode>&#x3C;link rel=\"amphtml\">\u003C/code>\u003C/h3>\n\u003Cp>Chaque page classique qui avait une version AMP contient quelque chose comme :\u003C/p>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">&#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">head\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">    &#x3C;!-- AVANT : à supprimer -->\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">link\u003C/span>\u003Cspan style=\"color:#B392F0\"> rel\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"amphtml\"\u003C/span>\u003Cspan style=\"color:#B392F0\"> href\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"https://www.example-media.fr/politique/reforme-2024/amp/\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    \u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">    &#x3C;!-- À conserver tel quel -->\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">link\u003C/span>\u003Cspan style=\"color:#B392F0\"> rel\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"canonical\"\u003C/span>\u003Cspan style=\"color:#B392F0\"> href\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"https://www.example-media.fr/politique/reforme-2024/\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">head\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>La balise \u003Ccode>&#x3C;link rel=\"amphtml\">\u003C/code> doit être retirée. Si elle pointe vers une URL qui redirige en 301, Google finira par comprendre — mais c'est un signal confus qui ralentit la transition. Un signal propre = une transition rapide.\u003C/p>\n\u003Cp>Sur un CMS headless avec un front Next.js, la modification est souvent dans le composant \u003Ccode>&#x3C;Head>\u003C/code> :\u003C/p>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">// components/ArticleHead.tsx — AVANT\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">import\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> Head \u003C/span>\u003Cspan style=\"color:#F97583\">from\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> 'next/head'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">interface\u003C/span>\u003Cspan style=\"color:#B392F0\"> ArticleHeadProps\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FFAB70\">  article\u003C/span>\u003Cspan style=\"color:#F97583\">:\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FFAB70\">    slug\u003C/span>\u003Cspan style=\"color:#F97583\">:\u003C/span>\u003Cspan style=\"color:#79B8FF\"> string\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FFAB70\">    title\u003C/span>\u003Cspan style=\"color:#F97583\">:\u003C/span>\u003Cspan style=\"color:#79B8FF\"> string\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FFAB70\">    description\u003C/span>\u003Cspan style=\"color:#F97583\">:\u003C/span>\u003Cspan style=\"color:#79B8FF\"> string\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FFAB70\">    canonicalUrl\u003C/span>\u003Cspan style=\"color:#F97583\">:\u003C/span>\u003Cspan style=\"color:#79B8FF\"> string\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  };\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">}\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">export\u003C/span>\u003Cspan style=\"color:#F97583\"> function\u003C/span>\u003Cspan style=\"color:#B392F0\"> ArticleHead\u003C/span>\u003Cspan style=\"color:#E1E4E8\">({ \u003C/span>\u003Cspan style=\"color:#FFAB70\">article\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> }\u003C/span>\u003Cspan style=\"color:#F97583\">:\u003C/span>\u003Cspan style=\"color:#B392F0\"> ArticleHeadProps\u003C/span>\u003Cspan style=\"color:#E1E4E8\">) {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">  return\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> (\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    &#x3C;\u003C/span>\u003Cspan style=\"color:#79B8FF\">Head\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">title\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>{article.title}&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">title\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">meta\u003C/span>\u003Cspan style=\"color:#B392F0\"> name\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"description\"\u003C/span>\u003Cspan style=\"color:#B392F0\"> content\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\">{article.description} />\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">link\u003C/span>\u003Cspan style=\"color:#B392F0\"> rel\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"canonical\"\u003C/span>\u003Cspan style=\"color:#B392F0\"> href\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\">{article.canonicalUrl} />\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      {\u003C/span>\u003Cspan style=\"color:#6A737D\">/* SUPPRIMER cette ligne : */\u003C/span>\u003Cspan style=\"color:#E1E4E8\">}\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">link\u003C/span>\u003Cspan style=\"color:#B392F0\"> rel\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"amphtml\"\u003C/span>\u003Cspan style=\"color:#B392F0\"> href\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\">{\u003C/span>\u003Cspan style=\"color:#9ECBFF\">`${\u003C/span>\u003Cspan style=\"color:#E1E4E8\">article\u003C/span>\u003Cspan style=\"color:#9ECBFF\">.\u003C/span>\u003Cspan style=\"color:#E1E4E8\">canonicalUrl\u003C/span>\u003Cspan style=\"color:#9ECBFF\">}amp/`\u003C/span>\u003Cspan style=\"color:#E1E4E8\">} />\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    &#x3C;/\u003C/span>\u003Cspan style=\"color:#79B8FF\">Head\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  );\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">}\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">// components/ArticleHead.tsx — APRÈS\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">export\u003C/span>\u003Cspan style=\"color:#F97583\"> function\u003C/span>\u003Cspan style=\"color:#B392F0\"> ArticleHead\u003C/span>\u003Cspan style=\"color:#E1E4E8\">({ \u003C/span>\u003Cspan style=\"color:#FFAB70\">article\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> }\u003C/span>\u003Cspan style=\"color:#F97583\">:\u003C/span>\u003Cspan style=\"color:#B392F0\"> ArticleHeadProps\u003C/span>\u003Cspan style=\"color:#E1E4E8\">) {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">  return\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> (\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    &#x3C;\u003C/span>\u003Cspan style=\"color:#79B8FF\">Head\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">title\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>{article.title}&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">title\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">meta\u003C/span>\u003Cspan style=\"color:#B392F0\"> name\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"description\"\u003C/span>\u003Cspan style=\"color:#B392F0\"> content\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\">{article.description} />\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">link\u003C/span>\u003Cspan style=\"color:#B392F0\"> rel\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"canonical\"\u003C/span>\u003Cspan style=\"color:#B392F0\"> href\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\">{article.canonicalUrl} />\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      {\u003C/span>\u003Cspan style=\"color:#6A737D\">/* Plus de référence AMP */\u003C/span>\u003Cspan style=\"color:#E1E4E8\">}\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    &#x3C;/\u003C/span>\u003Cspan style=\"color:#79B8FF\">Head\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  );\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">}\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>Si vous utilisez un CMS comme WordPress avec un plugin AMP (AMP for WordPress, par exemple), la désactivation du plugin devrait supprimer automatiquement la balise \u003Ccode>amphtml\u003C/code>. Mais \u003Cstrong>vérifiez\u003C/strong> — certains plugins laissent des résidus dans le HTML même après désactivation. Inspectez le source HTML d'au moins 10 pages après désactivation.\u003C/p>\n\u003Ch3>Nettoyer le sitemap\u003C/h3>\n\u003Cp>Votre sitemap XML contient probablement les URLs AMP. Deux approches :\u003C/p>\n\u003Col>\n\u003Cli>\u003Cstrong>Si les URLs AMP avaient leur propre sitemap\u003C/strong> (\u003Ccode>sitemap-amp.xml\u003C/code>) : supprimez le fichier et retirez-le du \u003Ccode>sitemap-index.xml\u003C/code>.\u003C/li>\n\u003Cli>\u003Cstrong>Si les URLs AMP étaient mélangées dans le sitemap principal\u003C/strong> : regénérez le sitemap sans les URLs AMP.\u003C/li>\n\u003C/ol>\n\u003Cp>Dans les deux cas, ne laissez jamais des URLs qui redirigent dans votre sitemap. Google interprète un sitemap comme une déclaration de vos URLs canoniques actives. Y laisser des URLs 301 envoie un signal contradictoire.\u003C/p>\n\u003Cp>Après nettoyage, soumettez le sitemap mis à jour dans Search Console.\u003C/p>\n\u003Ch3>Supprimer le code AMP du build\u003C/h3>\n\u003Cp>Si votre projet contenait un pipeline de génération des pages AMP (templates AMP, composants \u003Ccode>&#x3C;amp-*>\u003C/code>, validation AMP dans le CI), supprimez tout. Ce code mort est une source de confusion pour les nouveaux développeurs et un vecteur de bugs si quelqu'un le réactive par erreur.\u003C/p>\n\u003Cp>Intégrez un \u003Ca href=\"/blog/automatiser-les-checks-seo-dans-le-ci-cd\">check dans votre CI/CD\u003C/a> qui vérifie l'absence de balises AMP dans le HTML généré :\u003C/p>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># check-no-amp.sh — à intégrer dans votre pipeline CI\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">#!/bin/bash\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">set\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -e\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">BUILD_DIR\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"./out\"\u003C/span>\u003Cspan style=\"color:#6A737D\">  # ou .next, dist, etc.\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">AMP_FOUND\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">0\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Chercher les attributs AMP dans les fichiers HTML générés\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">while\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> IFS\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#79B8FF\"> read\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -r\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> file\u003C/span>\u003Cspan style=\"color:#E1E4E8\">; \u003C/span>\u003Cspan style=\"color:#F97583\">do\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    if\u003C/span>\u003Cspan style=\"color:#B392F0\"> grep\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -qiE\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> '&#x3C;html[^>]*([\\s]amp[\\s>]|[\\s]⚡)'\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">$file\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">; \u003C/span>\u003Cspan style=\"color:#F97583\">then\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">        echo\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"ERREUR: attribut AMP trouvé dans \u003C/span>\u003Cspan style=\"color:#E1E4E8\">$file\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        AMP_FOUND\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">1\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    fi\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    if\u003C/span>\u003Cspan style=\"color:#B392F0\"> grep\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -qiE\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> 'rel=\"amphtml\"'\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">$file\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">; \u003C/span>\u003Cspan style=\"color:#F97583\">then\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">        echo\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"ERREUR: lien amphtml trouvé dans \u003C/span>\u003Cspan style=\"color:#E1E4E8\">$file\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        AMP_FOUND\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">1\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    fi\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">done\u003C/span>\u003Cspan style=\"color:#F97583\"> &#x3C;\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> &#x3C;(\u003C/span>\u003Cspan style=\"color:#B392F0\">find\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">$BUILD_DIR\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\" \u003C/span>\u003Cspan style=\"color:#79B8FF\">-name\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"*.html\" \u003C/span>\u003Cspan style=\"color:#79B8FF\">-type\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> f)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">if\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> [ \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">$AMP_FOUND\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"\u003C/span>\u003Cspan style=\"color:#F97583\"> -eq\u003C/span>\u003Cspan style=\"color:#79B8FF\"> 1\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> ]; \u003C/span>\u003Cspan style=\"color:#F97583\">then\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">    echo\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"❌ Des résidus AMP ont été détectés. Migration incomplète.\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">    exit\u003C/span>\u003Cspan style=\"color:#79B8FF\"> 1\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">else\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">    echo\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"✅ Aucun résidu AMP détecté.\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">fi\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Ch2>Performance des pages classiques : combler le gap\u003C/h2>\n\u003Cp>AMP avait un avantage réel : ses contraintes forçaient des pages légères. Quand vous redirigez une page AMP (&#x3C; 100 KB, rendu quasi-instantané) vers une page classique qui charge 3 MB de JavaScript, vous allez perdre en Core Web Vitals.\u003C/p>\n\u003Ch3>Auditer les Core Web Vitals de vos pages de destination\u003C/h3>\n\u003Cp>Utilisez \u003Ca href=\"/blog/chrome-devtools-pour-le-seo-astuces-avancees\">Chrome DevTools\u003C/a> en mode mobile (Lighthouse, onglet Performance) sur un échantillon de vos pages classiques. Les métriques clés :\u003C/p>\n\u003Cul>\n\u003Cli>\u003Cstrong>LCP (Largest Contentful Paint)\u003C/strong> : doit être &#x3C; 2,5s. Si vos pages classiques ont un LCP > 4s, vous allez sentir l'impact de la migration.\u003C/li>\n\u003Cli>\u003Cstrong>INP (Interaction to Next Paint)\u003C/strong> : doit être &#x3C; 200ms. Si votre page classique charge un framework JS lourd avec hydration côté client, l'INP peut exploser.\u003C/li>\n\u003Cli>\u003Cstrong>CLS (Cumulative Layout Shift)\u003C/strong> : doit être &#x3C; 0,1. Les pubs display et les images sans dimensions explicites sont les coupables habituels.\u003C/li>\n\u003C/ul>\n\u003Cp>Si vos pages classiques sont des SPA rendues côté client, vous avez un problème plus profond que la migration AMP. Googlebot peut interpréter le JavaScript, mais les \u003Ca href=\"/blog/comparer-ssr-et-csr-detecter-les-divergences-invisibles\">divergences entre SSR et CSR\u003C/a> créent des comportements imprévisibles. Migrer vers du SSR ou SSG devrait être une priorité parallèle.\u003C/p>\n\u003Ch3>Quick wins performance\u003C/h3>\n\u003Cp>Quelques optimisations rapides qui rapprochent vos pages classiques des performances qu'avait AMP :\u003C/p>\n\u003Cp>\u003Cstrong>Lazy loading natif sur les images\u003C/strong> — AMP le faisait par défaut avec \u003Ccode>&#x3C;amp-img>\u003C/code>. Vos pages classiques doivent utiliser \u003Ccode>loading=\"lazy\"\u003C/code> sur toutes les images hors viewport initial :\u003C/p>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">&#x3C;!-- Image dans le viewport initial (hero) : pas de lazy loading -->\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">&#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">img\u003C/span>\u003Cspan style=\"color:#B392F0\"> src\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"/images/article-hero.webp\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> \u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">     alt\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"Titre de l'article\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> \u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">     width\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"1200\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> \u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">     height\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"630\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">     fetchpriority\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"high\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">&#x3C;!-- Images dans le corps de l'article : lazy loading -->\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">&#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">img\u003C/span>\u003Cspan style=\"color:#B392F0\"> src\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"/images/infographie-donnees.webp\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> \u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">     alt\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"Infographie des données\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> \u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">     width\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"800\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> \u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">     height\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"450\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> \u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">     loading\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"lazy\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> \u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">     decoding\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"async\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>\u003Cstrong>Préchargement du LCP\u003C/strong> — identifiez l'élément LCP de vos articles (souvent l'image hero ou le premier paragraphe) et ajoutez un \u003Ccode>&#x3C;link rel=\"preload\">\u003C/code> dans le \u003Ccode>&#x3C;head>\u003C/code> :\u003C/p>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">&#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">link\u003C/span>\u003Cspan style=\"color:#B392F0\"> rel\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"preload\"\u003C/span>\u003Cspan style=\"color:#B392F0\"> as\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"image\"\u003C/span>\u003Cspan style=\"color:#B392F0\"> href\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"/images/article-hero.webp\"\u003C/span>\u003Cspan style=\"color:#B392F0\"> fetchpriority\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"high\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>\u003Cstrong>Réduction du JS bloquant\u003C/strong> — AMP interdisait le JavaScript custom. Vos pages classiques chargent probablement des trackers, des widgets sociaux, des scripts pub. Chaque script bloquant ajoute au LCP. Auditez avec \u003Ccode>Performance Insights\u003C/code> dans Chrome DevTools et différez tout ce qui n'est pas critique au rendu initial.\u003C/p>\n\u003Ch2>Monitoring post-migration : les 8 semaines critiques\u003C/h2>\n\u003Cp>Les deux premiers mois après la migration sont la période à risque. Les problèmes ne sont pas toujours visibles immédiatement — certaines régressions mettent 2-3 semaines à se manifester dans les données Search Console.\u003C/p>\n\u003Ch3>Semaine 1-2 : vérifier les redirections\u003C/h3>\n\u003Cp>Surveillez dans Search Console le rapport \u003Cstrong>Pages\u003C/strong> filtré par URL AMP. Vous devriez voir les URLs AMP migrer progressivement du statut \"Page indexée\" vers \"Page avec redirection\". Si certaines URLs AMP restent indexées sans redirection, il y a un trou dans votre configuration.\u003C/p>\n\u003Cp>Dans vos logs serveur, vérifiez que Googlebot suit bien les redirections 301 :\u003C/p>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Extraire les requêtes Googlebot sur les URLs AMP depuis les access logs\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">grep\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"Googlebot\"\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> /var/log/nginx/access.log\u003C/span>\u003Cspan style=\"color:#F97583\"> |\u003C/span>\u003Cspan style=\"color:#B392F0\"> grep\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -E\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"/amp/|/amp$|\\?amp=1\"\u003C/span>\u003Cspan style=\"color:#F97583\"> |\u003C/span>\u003Cspan style=\"color:#79B8FF\"> \\\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">    awk\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> '{print $9, $7}'\u003C/span>\u003Cspan style=\"color:#F97583\"> |\u003C/span>\u003Cspan style=\"color:#B392F0\"> sort\u003C/span>\u003Cspan style=\"color:#F97583\"> |\u003C/span>\u003Cspan style=\"color:#B392F0\"> uniq\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -c\u003C/span>\u003Cspan style=\"color:#F97583\"> |\u003C/span>\u003Cspan style=\"color:#B392F0\"> sort\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -rn\u003C/span>\u003Cspan style=\"color:#F97583\"> |\u003C/span>\u003Cspan style=\"color:#B392F0\"> head\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -20\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>Vous devez voir des 301 en masse. Si vous voyez des 200 (la page AMP est encore servie) ou des 404, corrigez immédiatement.\u003C/p>\n\u003Ch3>Semaine 3-4 : surveiller les fluctuations de trafic\u003C/h3>\n\u003Cp>Comparez le trafic organique semaine par semaine sur les URLs impactées. Une baisse de 10-15% la première semaine est normale — Google recrawle et réévalue les pages. Si la baisse persiste au-delà de 3 semaines ou dépasse 20%, investiguez :\u003C/p>\n\u003Cul>\n\u003Cli>Les pages classiques sont-elles bien indexées ?\u003C/li>\n\u003Cli>Les Core Web Vitals des pages classiques sont-ils corrects ?\u003C/li>\n\u003Cli>Y a-t-il des erreurs de crawl dans Search Console ?\u003C/li>\n\u003C/ul>\n\u003Ch3>Semaine 5-8 : confirmer la stabilisation\u003C/h3>\n\u003Cp>Le trafic devrait se stabiliser, voire augmenter légèrement grâce au crawl budget récupéré. Dans notre scénario de média à 18 000 articles, la récupération de 22% de crawl budget signifie que Googlebot peut découvrir et réindexer plus rapidement les nouveaux contenus.\u003C/p>\n\u003Cp>Un outil de \u003Ca href=\"/blog/monitoring-seo-pourquoi-les-audits-ponctuels-ne-suffisent-plus\">monitoring SEO continu\u003C/a> comme Seogard détecte automatiquement les régressions pendant cette période critique : apparition soudaine de 404 sur les anciennes URLs AMP, réapparition de balises \u003Ccode>amphtml\u003C/code> après un déploiement, ou dégradation des Core Web Vitals sur les pages de destination.\u003C/p>\n\u003Ch3>Signaux de succès\u003C/h3>\n\u003Cp>Votre migration AMP est réussie quand :\u003C/p>\n\u003Cul>\n\u003Cli>\u003Cstrong>Zéro URL AMP\u003C/strong> dans l'index Google (vérifiable via Search Console > Pages, filtre URL)\u003C/li>\n\u003Cli>\u003Cstrong>Trafic organique\u003C/strong> sur les pages impactées revenu au niveau pré-migration (± 5%)\u003C/li>\n\u003Cli>\u003Cstrong>Crawl budget AMP\u003C/strong> tombé à zéro dans les logs serveur\u003C/li>\n\u003Cli>\u003Cstrong>Aucune balise \u003Ccode>amphtml\u003C/code>\u003C/strong> dans le HTML de votre site (vérifiable via le check CI décrit plus haut)\u003C/li>\n\u003Cli>\u003Cstrong>Core Web Vitals\u003C/strong> des pages classiques dans le vert pour mobile\u003C/li>\n\u003C/ul>\n\u003Ch2>Edge cases et pièges fréquents\u003C/h2>\n\u003Ch3>Pages AMP sans équivalent classique\u003C/h3>\n\u003Cp>Certains sites ont créé des pages AMP qui n'ont pas de version classique correspondante — souvent des landing pages AMP Stories ou des pages de test oubliées. Pour celles-ci, deux options :\u003C/p>\n\u003Col>\n\u003Cli>\u003Cstrong>La page a du trafic/des backlinks\u003C/strong> : créez une version classique, puis redirigez l'URL AMP vers cette nouvelle page.\u003C/li>\n\u003Cli>\u003Cstrong>La page n'a ni trafic ni backlinks\u003C/strong> : renvoyez un 410 (Gone) plutôt qu'un 404. Le 410 dit explicitement à Google que la page a été volontairement supprimée.\u003C/li>\n\u003C/ol>\n\u003Ch3>Backlinks pointant vers des URLs AMP\u003C/h3>\n\u003Cp>Des sites externes pointent peut-être directement vers vos URLs AMP. La redirection 301 transfère l'essentiel du link equity, mais vérifiez avec Ahrefs, Majestic ou Search Console (Liens > Liens externes) les backlinks les plus importants pointant vers des URLs AMP. Si un backlink de forte autorité pointe vers une URL AMP, assurez-vous que la chaîne de redirection est propre (un seul hop, pas de 302 intermédiaire).\u003C/p>\n\u003Ch3>AMP sur des sous-domaines\u003C/h3>\n\u003Cp>Si votre implémentation AMP utilisait un sous-domaine (\u003Ccode>amp.example.com\u003C/code>), la migration est plus complexe. Les redirections doivent être cross-domain, et vous devez maintenir le sous-domaine actif uniquement pour servir les 301. Ne supprimez pas le DNS du sous-domaine tant que Google n'a pas fini de recrawler toutes les URLs — comptez 3-6 mois selon le volume.\u003C/p>\n\u003Ch3>Pages AMP dans le cache de services tiers\u003C/h3>\n\u003Cp>Certains agrégateurs (Flipboard, Apple News, etc.) peuvent avoir mis en cache vos pages AMP. Les redirections 301 suffiront pour Google, mais ces services tiers peuvent mettre plus longtemps à mettre à jour. Si vous avez des intégrations directes avec ces plateformes, prévenez-les de la migration.\u003C/p>\n\u003Ch2>Le piège du \"on verra plus tard\"\u003C/h2>\n\u003Cp>La tentation est forte de laisser les pages AMP en place en se disant qu'elles ne font pas de mal. Elles en font. Chaque URL AMP qui reste est une URL de plus dans votre périmètre de crawl, une source potentielle de \u003Ca href=\"/blog/contenu-duplique-causes-techniques-et-solutions\">contenu dupliqué\u003C/a>, et une page de plus à surveiller pour les \u003Ca href=\"/blog/regressions-seo-les-10-types-les-plus-frequents\">régressions\u003C/a>.\u003C/p>\n\u003Cp>Plus vous attendez, plus il y a de risque qu'un \u003Ca href=\"/blog/deploiement-vendredi-soir-comment-eviter-la-catastrophe-seo\">déploiement futur\u003C/a> casse les canonicals croisés sans que personne ne s'en aperçoive. Et quand le problème devient visible dans les données, il est déjà trop tard — Google a indexé le mauvais canonical depuis des semaines.\u003C/p>\n\u003Cp>AMP est un format abandonné. Traitez-le comme tel : démontez-le méthodiquement, redirigez proprement, monitorez la transition, et passez à autre chose. Votre crawl budget, votre équipe de développement et votre dette technique vous remercieront. Un outil comme Seogard peut surveiller automatiquement que vos anciennes URLs AMP restent bien en 301 et qu'aucun résidu \u003Ccode>amphtml\u003C/code> ne réapparaît après un déploiement — exactement le type de régression silencieuse qui passe entre les mailles des audits ponctuels.\u003C/p>\n\u003Cpre>\u003Ccode>\u003C/code>\u003C/pre>",null,12,[18,19,20,21],"amp","migration","mobile","performance","AMP est mort : migrer vos pages AMP sans perdre de trafic","Wed Apr 08 2026 08:03:04 GMT+0000 (Coordinated Universal Time)",[25],{"_id":26,"slug":27,"__v":6,"author":7,"canonical":28,"category":10,"createdAt":29,"date":30,"description":31,"image":15,"imageAlt":15,"readingTime":16,"tags":32,"title":37,"updatedAt":38},"69d08d563c1c869ceaa62f45","mobile-first-indexing-verifier-que-votre-site-est-pret","https://seogard.io/blog/mobile-first-indexing-verifier-que-votre-site-est-pret","2026-04-04T04:02:30.466Z","2026-04-04","Checklist technique pour vérifier que votre site est prêt pour l'indexation mobile-first : parité de contenu, structured data, performance et monitoring.",[33,34,35,36],"mobile-first","indexing","responsive","seo","Mobile-first indexing : checklist technique complète","Sat Apr 04 2026 04:02:30 GMT+0000 (Coordinated Universal Time)"]