[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fZ9Kv3Mf7ZfUPkFzNCXL23HoSB-BqjQAM83IFNw7MXbE":3,"$fkpINwwoTrw42U35Kcglxkvu4N0l456sN2cABaUlbL2M":25},{"_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":23,"updatedAt":24},"69d75d2baa6b273b0c25874d","google-confirms-march-2026-core-update-is-complete-via-sejournal-mattgsouthern",0,"Equipe Seogard","Google a confirmé le 8 avril 2026 la fin du déploiement du March 2026 Core Update, démarré le 13 mars. Vingt-six jours de rollout — plus long que la moyenne des core updates récents. La vraie question n'est pas \"est-ce terminé ?\", c'est : comment mesurer l'impact réel sur votre site maintenant que les données sont stabilisées, et quels signaux techniques distinguer du bruit statistique.\n\n## Chronologie et contexte : ce que ce rollout révèle\n\nLe March 2026 Core Update a suivi un schéma devenu familier : annonce sur le [Google Search Status Dashboard](https://status.search.google.com/incidents), confirmation via le compte @GoogleSearchLiaison, puis silence radio pendant 26 jours.\n\n### Durée de rollout : un signal en soi\n\nLes core updates récents ont oscillé entre 13 et 30 jours de déploiement. Celui de mars 2026 se situe dans la fourchette haute. Une durée longue ne signifie pas un update \"plus important\" — elle reflète plutôt la complexité du re-scoring progressif sur l'index global. Google déploie par batches géographiques et thématiques, ce qui explique pourquoi certains sites voient des fluctuations dès J+3 tandis que d'autres restent stables jusqu'à J+18.\n\nLe point critique : **vos données Search Console ne sont fiables pour l'analyse post-update qu'à partir de 3 à 5 jours après la date de fin officielle**. Les derniers batches de re-scoring mettent du temps à se propager dans les métriques de performance. Si vous analysez vos données le jour même de l'annonce de fin, vous travaillez avec du bruit.\n\n### Pas de guidance spécifique, comme d'habitude\n\nGoogle n'a donné aucune indication thématique sur ce core update. Pas de mention de \"helpful content\", pas de signal EEAT renforcé, pas de focus sur un type de site. La [documentation officielle de Google sur les core updates](https://developers.google.com/search/updates/core-updates) reste la même : \"focus on creating great content.\" Traduit en langage technique : vous devez faire votre propre diagnostic différentiel.\n\nC'est précisément ce que le reste de cet article couvre.\n\n## Méthodologie d'analyse post-core update\n\nAvant de toucher au moindre filtre dans Search Console, posez votre cadre d'analyse. Un core update affecte le classement de manière systémique — il ne cible pas une page, il réévalue la position relative de milliers de documents dans des SERPs entières. Votre analyse doit refléter cette granularité.\n\n### Définir vos fenêtres de comparaison\n\nLa première erreur : comparer \"avant/après\" sans définir précisément les bornes. Voici les fenêtres recommandées :\n\n- **Période pré-update** : 1er février 2026 → 12 mars 2026 (6 semaines avant le début du rollout)\n- **Période de rollout** : 13 mars → 8 avril 2026 (données instables, à exclure de l'analyse causale)\n- **Période post-update** : 12 avril → 26 avril 2026 (minimum 2 semaines de données stabilisées)\n\nPourquoi exclure la période de rollout ? Parce que pendant le déploiement, votre site peut voir des positions fluctuer de 15 places en 48h puis revenir. Inclure ces données dans une moyenne fausse l'analyse.\n\n### Requêtes GSC pour isoler l'impact\n\nL'API Search Console est votre outil principal. Voici un script Python qui extrait les données de performance par page et compare les deux fenêtres :\n\n```python\nfrom google.oauth2 import service_account\nfrom googleapiclient.discovery import build\nimport pandas as pd\n\nSCOPES = ['https://www.googleapis.com/auth/webmasters.readonly']\nSERVICE_ACCOUNT_FILE = 'service-account.json'\nSITE_URL = 'sc-domain:votresite.fr'\n\ncredentials = service_account.Credentials.from_service_account_file(\n    SERVICE_ACCOUNT_FILE, scopes=SCOPES\n)\nservice = build('searchconsole', 'v1', credentials=credentials)\n\ndef fetch_performance(start_date, end_date, dimensions=['page']):\n    request = {\n        'startDate': start_date,\n        'endDate': end_date,\n        'dimensions': dimensions,\n        'rowLimit': 25000,\n        'dataState': 'final'  # Crucial : exclure les données partielles\n    }\n    response = service.searchanalytics().query(\n        siteUrl=SITE_URL, body=request\n    ).execute()\n    \n    rows = response.get('rows', [])\n    data = []\n    for row in rows:\n        data.append({\n            'page': row['keys'][0],\n            'clicks': row['clicks'],\n            'impressions': row['impressions'],\n            'ctr': row['ctr'],\n            'position': row['position']\n        })\n    return pd.DataFrame(data)\n\n# Pré-update : 6 semaines avant\ndf_pre = fetch_performance('2026-02-01', '2026-03-12')\n# Post-update : 2 semaines stabilisées\ndf_post = fetch_performance('2026-04-12', '2026-04-26')\n\n# Merge et calcul des deltas\ndf_merged = df_pre.merge(df_post, on='page', suffixes=('_pre', '_post'))\ndf_merged['delta_clicks'] = df_merged['clicks_post'] - df_merged['clicks_pre']\ndf_merged['delta_position'] = df_merged['position_post'] - df_merged['position_pre']\n\n# Pages les plus impactées négativement\nlosers = df_merged[df_merged['delta_clicks'] \u003C -10].sort_values('delta_clicks')\nprint(losers[['page', 'clicks_pre', 'clicks_post', 'delta_position']].head(50))\n```\n\nLe paramètre `dataState: 'final'` est essentiel — il exclut les données provisoires que Google ajuste rétroactivement pendant 2-3 jours. Si vous avez automatisé votre [reporting via l'API Search Console](/blog/search-console-api-automatiser-le-reporting-seo), ajoutez ce paramètre à tous vos appels post-update.\n\n### Segmenter par type de page, pas par URL individuelle\n\nAnalyser URL par URL est un piège sur les gros sites. Un e-commerce de 20 000 pages produit aura des fluctuations naturelles sur chaque fiche. Ce qui compte, c'est le pattern par template :\n\n- Pages catégories : position moyenne et CTR avant/après\n- Pages produit : idem, segmentées par profondeur (catégorie L1, L2, L3)\n- Pages blog/contenu éditorial : même analyse\n- Pages transactionnelles (panier, checkout) : normalement hors scope, mais vérifiez qu'elles ne sont pas indexées par erreur\n\nSi vos pages catégories perdent en moyenne 3 positions mais vos pages produit restent stables, le signal est clair : Google a réévalué le contenu de vos pages de listing, pas vos fiches individuelles. La réponse technique est différente dans les deux cas.\n\n## Scénario concret : un média de 8 000 pages face au core update\n\nPrenons un site média tech avec 8 200 articles publiés, 45% du trafic organique concentré sur 400 articles evergreen. Avant le March 2026 Core Update : 180 000 clics/mois depuis Google, position moyenne de 12.3 sur l'ensemble du site.\n\n### Ce que les données montrent après le rollout\n\nAprès le 12 avril, l'analyse segmentée révèle :\n\n- **Articles evergreen (400 pages)** : +8% de clics, position moyenne passée de 8.1 à 7.4. Gain net.\n- **Articles d'actualité > 6 mois (3 200 pages)** : -22% de clics, position moyenne passée de 18.2 à 23.7. Chute significative.\n- **Articles d'actualité \u003C 6 mois (2 100 pages)** : stable, variation dans la marge d'erreur.\n- **Pages auteurs, tags, archives (2 500 pages)** : -35% d'impressions, mais ces pages ne généraient quasi aucun clic.\n\n### Diagnostic différentiel\n\nLe premier réflexe serait de dire \"Google pénalise le contenu ancien\". C'est un raccourci dangereux. L'analyse fine révèle que les articles d'actualité qui ont chuté ont deux points communs :\n\n1. **Un ratio contenu utile / boilerplate défavorable** : sidebar lourde, blocs \"articles liés\" qui représentent 60% du DOM visible, contenu principal de 300-400 mots.\n2. **Aucune mise à jour depuis publication** : pas de `dateModified` en structured data, pas de last-modified header HTTP, contenu factuellement dépassé.\n\nLes articles evergreen qui ont gagné, eux, avaient été mis à jour dans les 3 derniers mois et affichaient un contenu principal dense (1 500+ mots) avec un bon ratio signal/bruit dans le DOM.\n\n### Actions techniques concrètes\n\nPour ce site, trois interventions prioritaires :\n\n**1. Nettoyer le DOM des pages d'articles anciens :**\n\n```html\n\u003C!-- AVANT : DOM pollué -->\n\u003Carticle class=\"post\">\n  \u003Ch1>Titre de l'article\u003C/h1>\n  \u003Cdiv class=\"content\">\n    \u003Cp>300 mots de contenu...\u003C/p>\n  \u003C/div>\n  \u003Cdiv class=\"sidebar-inline\">\n    \u003C!-- 15 blocs \"articles liés\" injectés dans le main content -->\n    \u003Cdiv class=\"related-block\">...\u003C/div>\n    \u003Cdiv class=\"related-block\">...\u003C/div>\n    \u003C!-- ... x15 -->\n  \u003C/div>\n\u003C/article>\n\n\u003C!-- APRÈS : contenu principal isolé -->\n\u003Carticle class=\"post\">\n  \u003Ch1>Titre de l'article\u003C/h1>\n  \u003Cdiv class=\"content\" data-main-content=\"true\">\n    \u003Cp>Contenu enrichi, 800+ mots...\u003C/p>\n  \u003C/div>\n\u003C/article>\n\u003Caside class=\"related-articles\" aria-label=\"Articles suggérés\">\n  \u003C!-- 5 articles max, hors du main content -->\n\u003C/aside>\n```\n\nL'objectif : que le crawl de Google identifie clairement le contenu principal. Déplacer les blocs \"related\" hors du `\u003Carticle>` et dans un `\u003Caside>` sémantique n'est pas cosmétique — c'est un signal structurel que les systèmes de quality scoring utilisent pour évaluer le ratio contenu utile/chrome de page.\n\n**2. Implémenter un programme de refresh systématique** sur les articles à fort potentiel mais obsolètes. Critère de priorisation : pages avec > 500 impressions/mois mais CTR \u003C 1%. Elles apparaissent dans les SERPs mais personne ne clique — signe que le snippet (souvent tiré du contenu) n'est pas pertinent par rapport à l'intention actuelle.\n\n**3. Gérer les pages [thin content](/blog/thin-content-quand-vos-pages-nuisent-au-seo-global)** : les 2 500 pages auteurs, tags et archives qui perdent 35% d'impressions sont un symptôme. Si Google dévalue ces pages, c'est qu'elles diluent le quality scoring global du domaine. Deux options : `noindex` ou consolidation par redirection 301.\n\n## Signaux techniques à auditer en priorité\n\nUn core update ne cible pas un facteur technique isolé. Mais certains signaux techniques amplifient ou atténuent l'impact. Voici ceux à vérifier systématiquement.\n\n### Rendering et SSR/CSR\n\nSi votre site repose sur du client-side rendering, un core update peut amplifier des problèmes de contenu invisible au crawl. Google rend le JavaScript, mais avec un délai et des limitations. Un core update qui réévalue la qualité du contenu va comparer ce que Googlebot \"voit\" après rendering — et si votre contenu principal dépend d'appels API client-side qui échouent silencieusement 5% du temps, ce 5% de pages mal rendues tire votre score global vers le bas.\n\nVérifiez le rendering réel de vos pages critiques :\n\n```bash\n# Utiliser l'URL Inspection API en batch pour vérifier le rendered HTML\n# Ou plus simplement, via Screaming Frog en mode JavaScript rendering\n\n# Config Screaming Frog pour audit post-update :\n# Configuration > Spider > Rendering > JavaScript\n# Configuration > Spider > Crawl Limits > 5000 URLs\n# Configuration > Spider > Advanced > Respect Canonicals\n\n# Exporter le diff entre HTML brut et HTML rendu :\n# Bulk Export > Response Codes > JavaScript Rendering Issues\n\n# Commande curl pour vérifier le contenu initial (avant JS) :\ncurl -s -A \"Googlebot\" \"https://votresite.fr/page-critique\" | \\\n  grep -c '\u003Cdiv class=\"product-description\">'\n# Si le résultat est 0, le contenu dépend du JS\n```\n\nLes [divergences entre SSR et CSR](/blog/comparer-ssr-et-csr-detecter-les-divergences-invisibles) sont une source fréquente de pertes de positions lors des core updates, parce que Google réévalue le contenu réellement accessible — pas celui que vous voyez dans votre navigateur.\n\n### Core Web Vitals post-update\n\nLes CWV ne sont pas un facteur direct d'un core update. Mais un site dont le LCP dépasse 4s sur mobile va naturellement sous-performer dans un contexte où Google réévalue la qualité globale. Vérifiez vos données CrUX post-update via l'API :\n\n```javascript\n// Vérifier les CWV via l'API CrUX pour vos top pages\nconst API_KEY = 'VOTRE_CLE_API';\nconst TOP_PAGES = [\n  'https://votresite.fr/',\n  'https://votresite.fr/categorie/produits',\n  'https://votresite.fr/blog/article-phare'\n];\n\nasync function checkCWV(url) {\n  const response = await fetch(\n    `https://chromeuxreport.googleapis.com/v1/records:queryRecord?key=${API_KEY}`,\n    {\n      method: 'POST',\n      body: JSON.stringify({\n        url: url,\n        metrics: [\n          'largest_contentful_paint',\n          'interaction_to_next_paint',\n          'cumulative_layout_shift'\n        ]\n      })\n    }\n  );\n  const data = await response.json();\n  \n  if (data.record) {\n    const lcp = data.record.metrics.largest_contentful_paint;\n    const inp = data.record.metrics.interaction_to_next_paint;\n    const cls = data.record.metrics.cumulative_layout_shift;\n    \n    console.log(`\\n--- ${url} ---`);\n    console.log(`LCP p75: ${lcp?.percentiles?.p75}ms`);\n    console.log(`INP p75: ${inp?.percentiles?.p75}ms`);\n    console.log(`CLS p75: ${cls?.percentiles?.p75}`);\n    \n    // Alerter si LCP > 2500ms (seuil \"needs improvement\")\n    if (lcp?.percentiles?.p75 > 2500) {\n      console.warn(`⚠ LCP dégradé sur ${url}`);\n    }\n  }\n}\n\nTOP_PAGES.forEach(checkCWV);\n```\n\nUtilisez [Chrome DevTools](/blog/chrome-devtools-pour-le-seo-astuces-avancees) pour reproduire les conditions de crawl : désactivez le cache, throttlez le réseau en \"Slow 3G\", et vérifiez que votre contenu principal est visible sans interaction.\n\n### Canonical et contenu dupliqué\n\nChaque core update est une occasion pour Google de réévaluer quel URL est la \"bonne\" pour un contenu donné. Si vous avez des [problèmes de contenu dupliqué](/blog/contenu-duplique-causes-techniques-et-solutions) latents — canonicals mal configurées, paramètres d'URL non gérés, versions www/non-www — un core update peut décider de changer l'URL canonique qu'il retient. Résultat : une page qui rankait disparaît des SERPs, remplacée par une variante que vous ne vouliez pas indexer.\n\nVérifiez dans Search Console > Pages > \"Duplicate, Google chose different canonical than user\" si le nombre de pages dans ce bucket a augmenté après le 13 mars.\n\n## Ce que les outils de tracking montrent (et leurs limites)\n\n### Les outils tiers (Semrush, Sistrix, Ahrefs) et la volatilité\n\nLes \"sensors\" de volatilité SERP de ces outils montrent des pics pendant le rollout. Utile pour confirmer qu'un update est en cours. Inutile pour diagnostiquer votre situation spécifique. Ces outils trackent un échantillon de mots-clés — pas les vôtres, et pas avec la granularité nécessaire.\n\n### Search Console : le seul outil fiable, avec ses délais\n\nLes données Search Console ont un retard de 24-72h, parfois plus pendant un core update. Le rapport \"Performances\" est votre source de vérité, mais uniquement après stabilisation. Les [rapports avancés que beaucoup ignorent](/blog/google-search-console-les-rapports-que-vous-ignorez) — notamment le rapport d'indexation par sitemap et le rapport de couverture par type d'erreur — sont particulièrement révélateurs post-update.\n\n### Screaming Frog pour l'audit structurel\n\nUn crawl complet post-update n'est pas pour mesurer l'impact (Search Console fait ça). C'est pour identifier les problèmes techniques que le core update a pu amplifier :\n\n- Pages avec un `\u003Ctitle>` identique à une autre page\n- Pages orphelines (aucun lien interne entrant)\n- Chaînes de redirections > 2 hops\n- Pages avec un ratio texte/HTML \u003C 10%\n\nUn core update ne crée pas ces problèmes. Mais il augmente le coût de ces problèmes en termes de ranking.\n\n## Faut-il agir immédiatement ou attendre ?\n\nLa réponse courte : **attendez 2 semaines après la fin officielle, puis agissez méthodiquement.**\n\nLa réponse longue dépend de l'ampleur de l'impact :\n\n- **Perte \u003C 10% du trafic organique** : dans la marge de fluctuation saisonnière. Surveillez, ne réagissez pas.\n- **Perte de 10-25%** : diagnostic approfondi nécessaire. Identifiez les templates affectés, auditez le contenu et les signaux techniques. Planifiez des corrections sur 4-6 semaines.\n- **Perte > 25%** : probable problème systémique. Audit complet du site : qualité du contenu, architecture de liens internes, signaux EEAT, problèmes d'indexation. Les corrections ne porteront leurs fruits qu'au prochain core update (le suivant arrive généralement 3-4 mois après).\n\n### Le piège de la sur-réaction\n\nLe pire scénario post-core update : un Lead SEO paniqué qui lance une refonte complète de la structure d'URL, change tous les titles, et supprime 30% des pages du site en une semaine. Chaque modification crée du bruit supplémentaire. Impossible ensuite de savoir ce qui a fonctionné.\n\nProcédez par lots isolés. Changez un type de template à la fois. Mesurez l'impact sur 2-3 semaines avant de passer au lot suivant. Si votre [architecture de site](/blog/architecture-de-site-seo-flat-vs-deep-structure) est un facteur, documentez l'état actuel avant de toucher quoi que ce soit.\n\n## Automatiser la détection pour le prochain core update\n\nLe vrai coût des core updates n'est pas la perte de trafic — c'est le temps de diagnostic. Si vous découvrez l'impact 3 semaines après la fin du rollout parce que personne ne regardait les dashboards, vous avez perdu un mois.\n\n### Alertes automatisées\n\nConfigurez des [alertes avec des seuils appropriés](/blog/alertes-seo-quels-seuils-et-quelle-frequence) : une chute de 15% des clics sur un template donné en comparaison semaine-sur-semaine devrait déclencher une notification. Un outil de monitoring comme Seogard détecte automatiquement ce type de régression — chute de positions, meta tags modifiées, pages désindexées — sans attendre que quelqu'un pense à vérifier.\n\n### KPIs à tracker en continu\n\nLes [KPIs SEO techniques](/blog/mesurer-l-impact-seo-technique-quels-kpis-suivre) qui comptent dans un contexte de core update :\n\n- **Impressions par template** (pas par URL) : le premier signal d'un changement de visibilité\n- **Position moyenne pondérée par impressions** : la position moyenne brute est trompeuse si votre mix de requêtes change\n- **Ratio pages indexées / pages soumises** : si Google désindexe massivement des pages pendant un update, c'est un signal fort\n- **Taux de couverture \"crawled - not indexed\"** : un pic post-update signifie que Google a recrawlé des pages et décidé de les retirer de l'index\n\n### Intégrer le monitoring dans le CI/CD\n\nSi votre site est déployé plusieurs fois par semaine, chaque déploiement peut introduire une régression technique qui serait invisible en temps normal mais catastrophique pendant un core update. Un title tag supprimé par un merge mal résolu, un canonical cassé par un changement de routing, un SSR qui tombe en CSR silencieusement. [Automatisez vos checks SEO dans votre pipeline CI/CD](/blog/automatiser-les-checks-seo-dans-le-ci-cd) : c'est la seule façon de garantir que votre site est techniquement irréprochable quand Google décide de réévaluer tout le monde.\n\n## Le contexte plus large : le SEO en 2026 et les core updates\n\nCe March 2026 Core Update arrive dans un contexte où Google continue de [faire évoluer Search](/blog/seo-in-2026-higher-standards-ai-influence-and-a-web-still-catching-up) vers un modèle hybride : résultats classiques + AI Overviews. Les core updates restent le mécanisme principal de réévaluation de la qualité pour les résultats organiques classiques. Mais la visibilité globale de votre site dépend de plus en plus de votre capacité à [structurer le contenu pour les systèmes IA](/blog/how-to-design-content-that-ai-systems-prefer-and-promote) en parallèle.\n\nLe core update de mars 2026 est terminé. Vos données sont stables à partir du 12-13 avril. C'est maintenant que le travail de diagnostic commence — méthodiquement, par template, avec des données fiables. Et c'est maintenant que vous mettez en place le monitoring qui vous évitera de revivre le même stress dans 3 mois.\n```","https://seogard.io/blog/google-confirms-march-2026-core-update-is-complete-via-sejournal-mattgsouthern","Actualités SEO","2026-04-09T08:02:51.680Z","2026-04-09","Le core update de mars 2026 est terminé. Méthodologie d'analyse, signaux à surveiller, requêtes GSC et scénarios concrets pour mesurer l'impact réel.","\u003Cp>Google a confirmé le 8 avril 2026 la fin du déploiement du March 2026 Core Update, démarré le 13 mars. Vingt-six jours de rollout — plus long que la moyenne des core updates récents. La vraie question n'est pas \"est-ce terminé ?\", c'est : comment mesurer l'impact réel sur votre site maintenant que les données sont stabilisées, et quels signaux techniques distinguer du bruit statistique.\u003C/p>\n\u003Ch2>Chronologie et contexte : ce que ce rollout révèle\u003C/h2>\n\u003Cp>Le March 2026 Core Update a suivi un schéma devenu familier : annonce sur le \u003Ca href=\"https://status.search.google.com/incidents\">Google Search Status Dashboard\u003C/a>, confirmation via le compte @GoogleSearchLiaison, puis silence radio pendant 26 jours.\u003C/p>\n\u003Ch3>Durée de rollout : un signal en soi\u003C/h3>\n\u003Cp>Les core updates récents ont oscillé entre 13 et 30 jours de déploiement. Celui de mars 2026 se situe dans la fourchette haute. Une durée longue ne signifie pas un update \"plus important\" — elle reflète plutôt la complexité du re-scoring progressif sur l'index global. Google déploie par batches géographiques et thématiques, ce qui explique pourquoi certains sites voient des fluctuations dès J+3 tandis que d'autres restent stables jusqu'à J+18.\u003C/p>\n\u003Cp>Le point critique : \u003Cstrong>vos données Search Console ne sont fiables pour l'analyse post-update qu'à partir de 3 à 5 jours après la date de fin officielle\u003C/strong>. Les derniers batches de re-scoring mettent du temps à se propager dans les métriques de performance. Si vous analysez vos données le jour même de l'annonce de fin, vous travaillez avec du bruit.\u003C/p>\n\u003Ch3>Pas de guidance spécifique, comme d'habitude\u003C/h3>\n\u003Cp>Google n'a donné aucune indication thématique sur ce core update. Pas de mention de \"helpful content\", pas de signal EEAT renforcé, pas de focus sur un type de site. La \u003Ca href=\"https://developers.google.com/search/updates/core-updates\">documentation officielle de Google sur les core updates\u003C/a> reste la même : \"focus on creating great content.\" Traduit en langage technique : vous devez faire votre propre diagnostic différentiel.\u003C/p>\n\u003Cp>C'est précisément ce que le reste de cet article couvre.\u003C/p>\n\u003Ch2>Méthodologie d'analyse post-core update\u003C/h2>\n\u003Cp>Avant de toucher au moindre filtre dans Search Console, posez votre cadre d'analyse. Un core update affecte le classement de manière systémique — il ne cible pas une page, il réévalue la position relative de milliers de documents dans des SERPs entières. Votre analyse doit refléter cette granularité.\u003C/p>\n\u003Ch3>Définir vos fenêtres de comparaison\u003C/h3>\n\u003Cp>La première erreur : comparer \"avant/après\" sans définir précisément les bornes. Voici les fenêtres recommandées :\u003C/p>\n\u003Cul>\n\u003Cli>\u003Cstrong>Période pré-update\u003C/strong> : 1er février 2026 → 12 mars 2026 (6 semaines avant le début du rollout)\u003C/li>\n\u003Cli>\u003Cstrong>Période de rollout\u003C/strong> : 13 mars → 8 avril 2026 (données instables, à exclure de l'analyse causale)\u003C/li>\n\u003Cli>\u003Cstrong>Période post-update\u003C/strong> : 12 avril → 26 avril 2026 (minimum 2 semaines de données stabilisées)\u003C/li>\n\u003C/ul>\n\u003Cp>Pourquoi exclure la période de rollout ? Parce que pendant le déploiement, votre site peut voir des positions fluctuer de 15 places en 48h puis revenir. Inclure ces données dans une moyenne fausse l'analyse.\u003C/p>\n\u003Ch3>Requêtes GSC pour isoler l'impact\u003C/h3>\n\u003Cp>L'API Search Console est votre outil principal. Voici un script Python qui extrait les données de performance par page et compare les deux fenêtres :\u003C/p>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">from\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> google.oauth2 \u003C/span>\u003Cspan style=\"color:#F97583\">import\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> service_account\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">from\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> googleapiclient.discovery \u003C/span>\u003Cspan style=\"color:#F97583\">import\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> build\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">import\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> pandas \u003C/span>\u003Cspan style=\"color:#F97583\">as\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> pd\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">SCOPES\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> [\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'https://www.googleapis.com/auth/webmasters.readonly'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">]\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">SERVICE_ACCOUNT_FILE\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> 'service-account.json'\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">SITE_URL\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> 'sc-domain:votresite.fr'\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">credentials \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> service_account.Credentials.from_service_account_file(\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">    SERVICE_ACCOUNT_FILE\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#FFAB70\">scopes\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#79B8FF\">SCOPES\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">service \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> build(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'searchconsole'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'v1'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#FFAB70\">credentials\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\">credentials)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">def\u003C/span>\u003Cspan style=\"color:#B392F0\"> fetch_performance\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(start_date, end_date, dimensions\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\">[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'page'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">]):\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    request \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">        'startDate'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: start_date,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">        'endDate'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: end_date,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">        'dimensions'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: dimensions,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">        'rowLimit'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#79B8FF\">25000\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">        'dataState'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'final'\u003C/span>\u003Cspan style=\"color:#6A737D\">  # Crucial : exclure les données partielles\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    }\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    response \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> service.searchanalytics().query(\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FFAB70\">        siteUrl\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#79B8FF\">SITE_URL\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#FFAB70\">body\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\">request\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    ).execute()\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    \u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    rows \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> response.get(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'rows'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, [])\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    data \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> []\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    for\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> row \u003C/span>\u003Cspan style=\"color:#F97583\">in\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> rows:\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        data.append({\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">            'page'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: row[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'keys'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">][\u003C/span>\u003Cspan style=\"color:#79B8FF\">0\u003C/span>\u003Cspan style=\"color:#E1E4E8\">],\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">            'clicks'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: row[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'clicks'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">],\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">            'impressions'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: row[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'impressions'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">],\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">            'ctr'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: row[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'ctr'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">],\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">            'position'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: row[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'position'\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:#F97583\">    return\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> pd.DataFrame(data)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Pré-update : 6 semaines avant\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">df_pre \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> fetch_performance(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'2026-02-01'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'2026-03-12'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Post-update : 2 semaines stabilisées\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">df_post \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> fetch_performance(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'2026-04-12'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'2026-04-26'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Merge et calcul des deltas\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">df_merged \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> df_pre.merge(df_post, \u003C/span>\u003Cspan style=\"color:#FFAB70\">on\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'page'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#FFAB70\">suffixes\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'_pre'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'_post'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">))\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">df_merged[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'delta_clicks'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">] \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> df_merged[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'clicks_post'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">] \u003C/span>\u003Cspan style=\"color:#F97583\">-\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> df_merged[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'clicks_pre'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">]\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">df_merged[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'delta_position'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">] \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> df_merged[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'position_post'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">] \u003C/span>\u003Cspan style=\"color:#F97583\">-\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> df_merged[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'position_pre'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">]\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Pages les plus impactées négativement\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">losers \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> df_merged[df_merged[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'delta_clicks'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">] \u003C/span>\u003Cspan style=\"color:#F97583\">&#x3C;\u003C/span>\u003Cspan style=\"color:#F97583\"> -\u003C/span>\u003Cspan style=\"color:#79B8FF\">10\u003C/span>\u003Cspan style=\"color:#E1E4E8\">].sort_values(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'delta_clicks'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">print\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(losers[[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'page'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'clicks_pre'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'clicks_post'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'delta_position'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">]].head(\u003C/span>\u003Cspan style=\"color:#79B8FF\">50\u003C/span>\u003Cspan style=\"color:#E1E4E8\">))\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>Le paramètre \u003Ccode>dataState: 'final'\u003C/code> est essentiel — il exclut les données provisoires que Google ajuste rétroactivement pendant 2-3 jours. Si vous avez automatisé votre \u003Ca href=\"/blog/search-console-api-automatiser-le-reporting-seo\">reporting via l'API Search Console\u003C/a>, ajoutez ce paramètre à tous vos appels post-update.\u003C/p>\n\u003Ch3>Segmenter par type de page, pas par URL individuelle\u003C/h3>\n\u003Cp>Analyser URL par URL est un piège sur les gros sites. Un e-commerce de 20 000 pages produit aura des fluctuations naturelles sur chaque fiche. Ce qui compte, c'est le pattern par template :\u003C/p>\n\u003Cul>\n\u003Cli>Pages catégories : position moyenne et CTR avant/après\u003C/li>\n\u003Cli>Pages produit : idem, segmentées par profondeur (catégorie L1, L2, L3)\u003C/li>\n\u003Cli>Pages blog/contenu éditorial : même analyse\u003C/li>\n\u003Cli>Pages transactionnelles (panier, checkout) : normalement hors scope, mais vérifiez qu'elles ne sont pas indexées par erreur\u003C/li>\n\u003C/ul>\n\u003Cp>Si vos pages catégories perdent en moyenne 3 positions mais vos pages produit restent stables, le signal est clair : Google a réévalué le contenu de vos pages de listing, pas vos fiches individuelles. La réponse technique est différente dans les deux cas.\u003C/p>\n\u003Ch2>Scénario concret : un média de 8 000 pages face au core update\u003C/h2>\n\u003Cp>Prenons un site média tech avec 8 200 articles publiés, 45% du trafic organique concentré sur 400 articles evergreen. Avant le March 2026 Core Update : 180 000 clics/mois depuis Google, position moyenne de 12.3 sur l'ensemble du site.\u003C/p>\n\u003Ch3>Ce que les données montrent après le rollout\u003C/h3>\n\u003Cp>Après le 12 avril, l'analyse segmentée révèle :\u003C/p>\n\u003Cul>\n\u003Cli>\u003Cstrong>Articles evergreen (400 pages)\u003C/strong> : +8% de clics, position moyenne passée de 8.1 à 7.4. Gain net.\u003C/li>\n\u003Cli>\u003Cstrong>Articles d'actualité > 6 mois (3 200 pages)\u003C/strong> : -22% de clics, position moyenne passée de 18.2 à 23.7. Chute significative.\u003C/li>\n\u003Cli>\u003Cstrong>Articles d'actualité &#x3C; 6 mois (2 100 pages)\u003C/strong> : stable, variation dans la marge d'erreur.\u003C/li>\n\u003Cli>\u003Cstrong>Pages auteurs, tags, archives (2 500 pages)\u003C/strong> : -35% d'impressions, mais ces pages ne généraient quasi aucun clic.\u003C/li>\n\u003C/ul>\n\u003Ch3>Diagnostic différentiel\u003C/h3>\n\u003Cp>Le premier réflexe serait de dire \"Google pénalise le contenu ancien\". C'est un raccourci dangereux. L'analyse fine révèle que les articles d'actualité qui ont chuté ont deux points communs :\u003C/p>\n\u003Col>\n\u003Cli>\u003Cstrong>Un ratio contenu utile / boilerplate défavorable\u003C/strong> : sidebar lourde, blocs \"articles liés\" qui représentent 60% du DOM visible, contenu principal de 300-400 mots.\u003C/li>\n\u003Cli>\u003Cstrong>Aucune mise à jour depuis publication\u003C/strong> : pas de \u003Ccode>dateModified\u003C/code> en structured data, pas de last-modified header HTTP, contenu factuellement dépassé.\u003C/li>\n\u003C/ol>\n\u003Cp>Les articles evergreen qui ont gagné, eux, avaient été mis à jour dans les 3 derniers mois et affichaient un contenu principal dense (1 500+ mots) avec un bon ratio signal/bruit dans le DOM.\u003C/p>\n\u003Ch3>Actions techniques concrètes\u003C/h3>\n\u003Cp>Pour ce site, trois interventions prioritaires :\u003C/p>\n\u003Cp>\u003Cstrong>1. Nettoyer le DOM des pages d'articles anciens :\u003C/strong>\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;!-- AVANT : DOM pollué -->\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">&#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">article\u003C/span>\u003Cspan style=\"color:#B392F0\"> class\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"post\"\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\">h1\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>Titre de l'article&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">h1\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\">div\u003C/span>\u003Cspan style=\"color:#B392F0\"> class\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"content\"\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\">p\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>300 mots de contenu...&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">p\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\">div\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\">div\u003C/span>\u003Cspan style=\"color:#B392F0\"> class\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"sidebar-inline\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">    &#x3C;!-- 15 blocs \"articles liés\" injectés dans le main content -->\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">div\u003C/span>\u003Cspan style=\"color:#B392F0\"> class\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"related-block\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>...&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">div\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\">div\u003C/span>\u003Cspan style=\"color:#B392F0\"> class\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"related-block\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>...&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">div\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">    &#x3C;!-- ... x15 -->\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  &#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">div\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\">article\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;!-- APRÈS : contenu principal isolé -->\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">&#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">article\u003C/span>\u003Cspan style=\"color:#B392F0\"> class\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"post\"\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\">h1\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>Titre de l'article&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">h1\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\">div\u003C/span>\u003Cspan style=\"color:#B392F0\"> class\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"content\"\u003C/span>\u003Cspan style=\"color:#B392F0\"> data-main-content\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"true\"\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\">p\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>Contenu enrichi, 800+ mots...&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">p\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\">div\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\">article\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\">aside\u003C/span>\u003Cspan style=\"color:#B392F0\"> class\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"related-articles\"\u003C/span>\u003Cspan style=\"color:#B392F0\"> aria-label\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"Articles suggérés\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">  &#x3C;!-- 5 articles max, hors du main content -->\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">aside\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>L'objectif : que le crawl de Google identifie clairement le contenu principal. Déplacer les blocs \"related\" hors du \u003Ccode>&#x3C;article>\u003C/code> et dans un \u003Ccode>&#x3C;aside>\u003C/code> sémantique n'est pas cosmétique — c'est un signal structurel que les systèmes de quality scoring utilisent pour évaluer le ratio contenu utile/chrome de page.\u003C/p>\n\u003Cp>\u003Cstrong>2. Implémenter un programme de refresh systématique\u003C/strong> sur les articles à fort potentiel mais obsolètes. Critère de priorisation : pages avec > 500 impressions/mois mais CTR &#x3C; 1%. Elles apparaissent dans les SERPs mais personne ne clique — signe que le snippet (souvent tiré du contenu) n'est pas pertinent par rapport à l'intention actuelle.\u003C/p>\n\u003Cp>\u003Cstrong>3. Gérer les pages \u003Ca href=\"/blog/thin-content-quand-vos-pages-nuisent-au-seo-global\">thin content\u003C/a>\u003C/strong> : les 2 500 pages auteurs, tags et archives qui perdent 35% d'impressions sont un symptôme. Si Google dévalue ces pages, c'est qu'elles diluent le quality scoring global du domaine. Deux options : \u003Ccode>noindex\u003C/code> ou consolidation par redirection 301.\u003C/p>\n\u003Ch2>Signaux techniques à auditer en priorité\u003C/h2>\n\u003Cp>Un core update ne cible pas un facteur technique isolé. Mais certains signaux techniques amplifient ou atténuent l'impact. Voici ceux à vérifier systématiquement.\u003C/p>\n\u003Ch3>Rendering et SSR/CSR\u003C/h3>\n\u003Cp>Si votre site repose sur du client-side rendering, un core update peut amplifier des problèmes de contenu invisible au crawl. Google rend le JavaScript, mais avec un délai et des limitations. Un core update qui réévalue la qualité du contenu va comparer ce que Googlebot \"voit\" après rendering — et si votre contenu principal dépend d'appels API client-side qui échouent silencieusement 5% du temps, ce 5% de pages mal rendues tire votre score global vers le bas.\u003C/p>\n\u003Cp>Vérifiez le rendering réel de vos pages critiques :\u003C/p>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Utiliser l'URL Inspection API en batch pour vérifier le rendered HTML\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Ou plus simplement, via Screaming Frog en mode JavaScript rendering\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Config Screaming Frog pour audit post-update :\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Configuration > Spider > Rendering > JavaScript\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Configuration > Spider > Crawl Limits > 5000 URLs\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Configuration > Spider > Advanced > Respect Canonicals\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Exporter le diff entre HTML brut et HTML rendu :\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Bulk Export > Response Codes > JavaScript Rendering Issues\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Commande curl pour vérifier le contenu initial (avant JS) :\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">curl\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -s\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -A\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"Googlebot\"\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"https://votresite.fr/page-critique\"\u003C/span>\u003Cspan style=\"color:#F97583\"> |\u003C/span>\u003Cspan style=\"color:#79B8FF\"> \\\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">  grep\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -c\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> '&#x3C;div class=\"product-description\">'\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Si le résultat est 0, le contenu dépend du JS\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>Les \u003Ca href=\"/blog/comparer-ssr-et-csr-detecter-les-divergences-invisibles\">divergences entre SSR et CSR\u003C/a> sont une source fréquente de pertes de positions lors des core updates, parce que Google réévalue le contenu réellement accessible — pas celui que vous voyez dans votre navigateur.\u003C/p>\n\u003Ch3>Core Web Vitals post-update\u003C/h3>\n\u003Cp>Les CWV ne sont pas un facteur direct d'un core update. Mais un site dont le LCP dépasse 4s sur mobile va naturellement sous-performer dans un contexte où Google réévalue la qualité globale. Vérifiez vos données CrUX post-update via l'API :\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érifier les CWV via l'API CrUX pour vos top pages\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">const\u003C/span>\u003Cspan style=\"color:#79B8FF\"> API_KEY\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> 'VOTRE_CLE_API'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">const\u003C/span>\u003Cspan style=\"color:#79B8FF\"> TOP_PAGES\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> [\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  'https://votresite.fr/'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  'https://votresite.fr/categorie/produits'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  'https://votresite.fr/blog/article-phare'\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\">async\u003C/span>\u003Cspan style=\"color:#F97583\"> function\u003C/span>\u003Cspan style=\"color:#B392F0\"> checkCWV\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#FFAB70\">url\u003C/span>\u003Cspan style=\"color:#E1E4E8\">) {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">  const\u003C/span>\u003Cspan style=\"color:#79B8FF\"> response\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#F97583\"> await\u003C/span>\u003Cspan style=\"color:#B392F0\"> fetch\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    `https://chromeuxreport.googleapis.com/v1/records:queryRecord?key=${\u003C/span>\u003Cspan style=\"color:#79B8FF\">API_KEY\u003C/span>\u003Cspan style=\"color:#9ECBFF\">}`\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\">      method: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'POST'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      body: \u003C/span>\u003Cspan style=\"color:#79B8FF\">JSON\u003C/span>\u003Cspan style=\"color:#E1E4E8\">.\u003C/span>\u003Cspan style=\"color:#B392F0\">stringify\u003C/span>\u003Cspan style=\"color:#E1E4E8\">({\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        url: url,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        metrics: [\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">          'largest_contentful_paint'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">          'interaction_to_next_paint'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">          'cumulative_layout_shift'\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\">\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:#F97583\">  const\u003C/span>\u003Cspan style=\"color:#79B8FF\"> data\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#F97583\"> await\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> response.\u003C/span>\u003Cspan style=\"color:#B392F0\">json\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:#F97583\">  if\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> (data.record) {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    const\u003C/span>\u003Cspan style=\"color:#79B8FF\"> lcp\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> data.record.metrics.largest_contentful_paint;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    const\u003C/span>\u003Cspan style=\"color:#79B8FF\"> inp\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> data.record.metrics.interaction_to_next_paint;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    const\u003C/span>\u003Cspan style=\"color:#79B8FF\"> cls\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> data.record.metrics.cumulative_layout_shift;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    \u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    console.\u003C/span>\u003Cspan style=\"color:#B392F0\">log\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">`\u003C/span>\u003Cspan style=\"color:#79B8FF\">\\n\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\">    console.\u003C/span>\u003Cspan style=\"color:#B392F0\">log\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">`LCP p75: ${\u003C/span>\u003Cspan style=\"color:#E1E4E8\">lcp\u003C/span>\u003Cspan style=\"color:#9ECBFF\">?.\u003C/span>\u003Cspan style=\"color:#E1E4E8\">percentiles\u003C/span>\u003Cspan style=\"color:#9ECBFF\">?.\u003C/span>\u003Cspan style=\"color:#E1E4E8\">p75\u003C/span>\u003Cspan style=\"color:#9ECBFF\">}ms`\u003C/span>\u003Cspan style=\"color:#E1E4E8\">);\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    console.\u003C/span>\u003Cspan style=\"color:#B392F0\">log\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">`INP p75: ${\u003C/span>\u003Cspan style=\"color:#E1E4E8\">inp\u003C/span>\u003Cspan style=\"color:#9ECBFF\">?.\u003C/span>\u003Cspan style=\"color:#E1E4E8\">percentiles\u003C/span>\u003Cspan style=\"color:#9ECBFF\">?.\u003C/span>\u003Cspan style=\"color:#E1E4E8\">p75\u003C/span>\u003Cspan style=\"color:#9ECBFF\">}ms`\u003C/span>\u003Cspan style=\"color:#E1E4E8\">);\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    console.\u003C/span>\u003Cspan style=\"color:#B392F0\">log\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">`CLS p75: ${\u003C/span>\u003Cspan style=\"color:#E1E4E8\">cls\u003C/span>\u003Cspan style=\"color:#9ECBFF\">?.\u003C/span>\u003Cspan style=\"color:#E1E4E8\">percentiles\u003C/span>\u003Cspan style=\"color:#9ECBFF\">?.\u003C/span>\u003Cspan style=\"color:#E1E4E8\">p75\u003C/span>\u003Cspan style=\"color:#9ECBFF\">}`\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\">    // Alerter si LCP > 2500ms (seuil \"needs improvement\")\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    if\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> (lcp?.percentiles?.p75 \u003C/span>\u003Cspan style=\"color:#F97583\">>\u003C/span>\u003Cspan style=\"color:#79B8FF\"> 2500\u003C/span>\u003Cspan style=\"color:#E1E4E8\">) {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      console.\u003C/span>\u003Cspan style=\"color:#B392F0\">warn\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">`⚠ LCP dégradé sur ${\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\">    }\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:#79B8FF\">TOP_PAGES\u003C/span>\u003Cspan style=\"color:#E1E4E8\">.\u003C/span>\u003Cspan style=\"color:#B392F0\">forEach\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(checkCWV);\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>Utilisez \u003Ca href=\"/blog/chrome-devtools-pour-le-seo-astuces-avancees\">Chrome DevTools\u003C/a> pour reproduire les conditions de crawl : désactivez le cache, throttlez le réseau en \"Slow 3G\", et vérifiez que votre contenu principal est visible sans interaction.\u003C/p>\n\u003Ch3>Canonical et contenu dupliqué\u003C/h3>\n\u003Cp>Chaque core update est une occasion pour Google de réévaluer quel URL est la \"bonne\" pour un contenu donné. Si vous avez des \u003Ca href=\"/blog/contenu-duplique-causes-techniques-et-solutions\">problèmes de contenu dupliqué\u003C/a> latents — canonicals mal configurées, paramètres d'URL non gérés, versions www/non-www — un core update peut décider de changer l'URL canonique qu'il retient. Résultat : une page qui rankait disparaît des SERPs, remplacée par une variante que vous ne vouliez pas indexer.\u003C/p>\n\u003Cp>Vérifiez dans Search Console > Pages > \"Duplicate, Google chose different canonical than user\" si le nombre de pages dans ce bucket a augmenté après le 13 mars.\u003C/p>\n\u003Ch2>Ce que les outils de tracking montrent (et leurs limites)\u003C/h2>\n\u003Ch3>Les outils tiers (Semrush, Sistrix, Ahrefs) et la volatilité\u003C/h3>\n\u003Cp>Les \"sensors\" de volatilité SERP de ces outils montrent des pics pendant le rollout. Utile pour confirmer qu'un update est en cours. Inutile pour diagnostiquer votre situation spécifique. Ces outils trackent un échantillon de mots-clés — pas les vôtres, et pas avec la granularité nécessaire.\u003C/p>\n\u003Ch3>Search Console : le seul outil fiable, avec ses délais\u003C/h3>\n\u003Cp>Les données Search Console ont un retard de 24-72h, parfois plus pendant un core update. Le rapport \"Performances\" est votre source de vérité, mais uniquement après stabilisation. Les \u003Ca href=\"/blog/google-search-console-les-rapports-que-vous-ignorez\">rapports avancés que beaucoup ignorent\u003C/a> — notamment le rapport d'indexation par sitemap et le rapport de couverture par type d'erreur — sont particulièrement révélateurs post-update.\u003C/p>\n\u003Ch3>Screaming Frog pour l'audit structurel\u003C/h3>\n\u003Cp>Un crawl complet post-update n'est pas pour mesurer l'impact (Search Console fait ça). C'est pour identifier les problèmes techniques que le core update a pu amplifier :\u003C/p>\n\u003Cul>\n\u003Cli>Pages avec un \u003Ccode>&#x3C;title>\u003C/code> identique à une autre page\u003C/li>\n\u003Cli>Pages orphelines (aucun lien interne entrant)\u003C/li>\n\u003Cli>Chaînes de redirections > 2 hops\u003C/li>\n\u003Cli>Pages avec un ratio texte/HTML &#x3C; 10%\u003C/li>\n\u003C/ul>\n\u003Cp>Un core update ne crée pas ces problèmes. Mais il augmente le coût de ces problèmes en termes de ranking.\u003C/p>\n\u003Ch2>Faut-il agir immédiatement ou attendre ?\u003C/h2>\n\u003Cp>La réponse courte : \u003Cstrong>attendez 2 semaines après la fin officielle, puis agissez méthodiquement.\u003C/strong>\u003C/p>\n\u003Cp>La réponse longue dépend de l'ampleur de l'impact :\u003C/p>\n\u003Cul>\n\u003Cli>\u003Cstrong>Perte &#x3C; 10% du trafic organique\u003C/strong> : dans la marge de fluctuation saisonnière. Surveillez, ne réagissez pas.\u003C/li>\n\u003Cli>\u003Cstrong>Perte de 10-25%\u003C/strong> : diagnostic approfondi nécessaire. Identifiez les templates affectés, auditez le contenu et les signaux techniques. Planifiez des corrections sur 4-6 semaines.\u003C/li>\n\u003Cli>\u003Cstrong>Perte > 25%\u003C/strong> : probable problème systémique. Audit complet du site : qualité du contenu, architecture de liens internes, signaux EEAT, problèmes d'indexation. Les corrections ne porteront leurs fruits qu'au prochain core update (le suivant arrive généralement 3-4 mois après).\u003C/li>\n\u003C/ul>\n\u003Ch3>Le piège de la sur-réaction\u003C/h3>\n\u003Cp>Le pire scénario post-core update : un Lead SEO paniqué qui lance une refonte complète de la structure d'URL, change tous les titles, et supprime 30% des pages du site en une semaine. Chaque modification crée du bruit supplémentaire. Impossible ensuite de savoir ce qui a fonctionné.\u003C/p>\n\u003Cp>Procédez par lots isolés. Changez un type de template à la fois. Mesurez l'impact sur 2-3 semaines avant de passer au lot suivant. Si votre \u003Ca href=\"/blog/architecture-de-site-seo-flat-vs-deep-structure\">architecture de site\u003C/a> est un facteur, documentez l'état actuel avant de toucher quoi que ce soit.\u003C/p>\n\u003Ch2>Automatiser la détection pour le prochain core update\u003C/h2>\n\u003Cp>Le vrai coût des core updates n'est pas la perte de trafic — c'est le temps de diagnostic. Si vous découvrez l'impact 3 semaines après la fin du rollout parce que personne ne regardait les dashboards, vous avez perdu un mois.\u003C/p>\n\u003Ch3>Alertes automatisées\u003C/h3>\n\u003Cp>Configurez des \u003Ca href=\"/blog/alertes-seo-quels-seuils-et-quelle-frequence\">alertes avec des seuils appropriés\u003C/a> : une chute de 15% des clics sur un template donné en comparaison semaine-sur-semaine devrait déclencher une notification. Un outil de monitoring comme Seogard détecte automatiquement ce type de régression — chute de positions, meta tags modifiées, pages désindexées — sans attendre que quelqu'un pense à vérifier.\u003C/p>\n\u003Ch3>KPIs à tracker en continu\u003C/h3>\n\u003Cp>Les \u003Ca href=\"/blog/mesurer-l-impact-seo-technique-quels-kpis-suivre\">KPIs SEO techniques\u003C/a> qui comptent dans un contexte de core update :\u003C/p>\n\u003Cul>\n\u003Cli>\u003Cstrong>Impressions par template\u003C/strong> (pas par URL) : le premier signal d'un changement de visibilité\u003C/li>\n\u003Cli>\u003Cstrong>Position moyenne pondérée par impressions\u003C/strong> : la position moyenne brute est trompeuse si votre mix de requêtes change\u003C/li>\n\u003Cli>\u003Cstrong>Ratio pages indexées / pages soumises\u003C/strong> : si Google désindexe massivement des pages pendant un update, c'est un signal fort\u003C/li>\n\u003Cli>\u003Cstrong>Taux de couverture \"crawled - not indexed\"\u003C/strong> : un pic post-update signifie que Google a recrawlé des pages et décidé de les retirer de l'index\u003C/li>\n\u003C/ul>\n\u003Ch3>Intégrer le monitoring dans le CI/CD\u003C/h3>\n\u003Cp>Si votre site est déployé plusieurs fois par semaine, chaque déploiement peut introduire une régression technique qui serait invisible en temps normal mais catastrophique pendant un core update. Un title tag supprimé par un merge mal résolu, un canonical cassé par un changement de routing, un SSR qui tombe en CSR silencieusement. \u003Ca href=\"/blog/automatiser-les-checks-seo-dans-le-ci-cd\">Automatisez vos checks SEO dans votre pipeline CI/CD\u003C/a> : c'est la seule façon de garantir que votre site est techniquement irréprochable quand Google décide de réévaluer tout le monde.\u003C/p>\n\u003Ch2>Le contexte plus large : le SEO en 2026 et les core updates\u003C/h2>\n\u003Cp>Ce March 2026 Core Update arrive dans un contexte où Google continue de \u003Ca href=\"/blog/seo-in-2026-higher-standards-ai-influence-and-a-web-still-catching-up\">faire évoluer Search\u003C/a> vers un modèle hybride : résultats classiques + AI Overviews. Les core updates restent le mécanisme principal de réévaluation de la qualité pour les résultats organiques classiques. Mais la visibilité globale de votre site dépend de plus en plus de votre capacité à \u003Ca href=\"/blog/how-to-design-content-that-ai-systems-prefer-and-promote\">structurer le contenu pour les systèmes IA\u003C/a> en parallèle.\u003C/p>\n\u003Cp>Le core update de mars 2026 est terminé. Vos données sont stables à partir du 12-13 avril. C'est maintenant que le travail de diagnostic commence — méthodiquement, par template, avec des données fiables. Et c'est maintenant que vous mettez en place le monitoring qui vous évitera de revivre le même stress dans 3 mois.\u003C/p>\n\u003Cpre>\u003Ccode>\u003C/code>\u003C/pre>",null,12,[18,19,20,21,22],"google","core update","march 2026","search console","analyse SEO","March 2026 Core Update : analyse technique post-rollout","Thu Apr 09 2026 08:02:51 GMT+0000 (Coordinated Universal Time)",[26,40,55],{"_id":27,"slug":28,"__v":6,"author":7,"canonical":29,"category":10,"createdAt":30,"date":12,"description":31,"image":15,"imageAlt":15,"readingTime":16,"tags":32,"title":38,"updatedAt":39},"69d724dbaa6b273b0cf88f96","how-ai-search-defines-market-relevance-beyond-hreflang","https://seogard.io/blog/how-ai-search-defines-market-relevance-beyond-hreflang","2026-04-09T04:02:35.927Z","Hreflang ne suffit plus. Découvrez les signaux que l'IA utilise pour sélectionner vos pages locales dans les réponses générées par marché.",[33,34,35,36,37],"search","market relevance","hreflang","AI search","international SEO","AI Search : comment la pertinence locale se joue au-delà de hreflang","Thu Apr 09 2026 04:02:35 GMT+0000 (Coordinated Universal Time)",{"_id":41,"slug":42,"__v":6,"author":7,"canonical":43,"category":10,"createdAt":44,"date":45,"description":46,"image":15,"imageAlt":15,"readingTime":16,"tags":47,"title":53,"updatedAt":54},"69d5d358fd4d84bed98d86ff","google-ai-overviews-90-accurate-yet-millions-of-errors-remain-analysis","https://seogard.io/blog/google-ai-overviews-90-accurate-yet-millions-of-errors-remain-analysis","2026-04-08T04:02:32.018Z","2026-04-08","Analyse technique de la fiabilité des AI Overviews Google : impact SEO, détection des réponses fausses, et stratégies pour protéger votre trafic organique.",[18,48,49,50,51,52],"ai overviews","accurate","millions","errors","seo technique","AI Overviews : 90% de précision, des millions d'erreurs/jour","Wed Apr 08 2026 04:02:32 GMT+0000 (Coordinated Universal Time)",{"_id":56,"slug":57,"__v":6,"author":7,"canonical":58,"category":10,"createdAt":59,"date":45,"description":60,"image":15,"imageAlt":15,"readingTime":16,"tags":61,"title":66,"updatedAt":67},"69d67c39aa6b273b0c71db6b","why-product-feeds-need-an-organic-strategy-for-ai-search","https://seogard.io/blog/why-product-feeds-need-an-organic-strategy-for-ai-search","2026-04-08T16:03:05.565Z","Vos product feeds sont optimisés pour Google Ads, pas pour le SEO. Voici comment les aligner avec la recherche organique et les surfaces IA.",[62,63,36,64,65],"product feeds","organic strategy","structured data","e-commerce SEO","Product Feeds : bâtir une stratégie organique pour l'AI Search","Wed Apr 08 2026 16:03:05 GMT+0000 (Coordinated Universal Time)"]