[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fEQnHKs8yrm9GL0yZqG_imcWbc0hJjfP-Wy8nyfsv50Y":3,"$fJMPmZ20tpkYCFQFFTVKdlQQOzxvn7jinOmPewSlSI3Q":24,"$fcTFjTaPPT1sVcnh1wWEGoTWMSaOD4bwmwntkMae6w5s":112},{"_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},"6a2ed065aa6b273b0c9328d9","rank-math-update-nouveau-format-de-sitemaps-declenche-une-reindexation-complete",0,"Equipe Seogard","# Rank Math : quand un update de sitemap déclenche une réindexation de 8 400 pages\n\nMercredi 10h15. L'équipe contenu d'un éditeur média français pousse la mise à jour automatique de Rank Math SEO, version 1.0.233. Rien dans le changelog ne mentionne un changement structurel. Aucune alerte, aucun warning dans le dashboard WordPress. Le site tourne sur un WordPress 6.7 avec WP Rocket, 8 400 pages indexées, 1.2 million de clics organiques par mois. Quatre jours plus tard, Search Console affiche un pic de crawl jamais vu. Le lundi suivant, le trafic organique chute de 34 %.\n\n## Lundi 9h02 — Le mail de Search Console\n\nLe responsable SEO ouvre sa boîte. Un mail Search Console, envoyé dimanche soir : « Augmentation significative du nombre de pages explorées ». Le graphique de crawl dans les paramètres d'exploration montre un bond de 1 200 requêtes/jour à 9 800 requêtes/jour sur les trois derniers jours.\n\nPremier réflexe : vérifier si un déploiement a eu lieu. L'historique Git du thème ne montre rien depuis onze jours. Aucun push, aucun merge. Le cache WP Rocket n'a pas été purgé manuellement.\n\nDeuxième réflexe : le fichier `robots.txt`. Toujours en place. Pas de `Disallow` suspect. Le `Sitemap:` pointe bien vers `https://example.fr/sitemap_index.xml`.\n\nTroisième réflexe : ouvrir le rapport de couverture. Et là, le tableau se fige. 6 200 pages en statut « Découverte, actuellement non indexée ». Des pages qui étaient indexées depuis des mois — des catégories, des articles piliers, des fiches auteur. Google les traite comme si elles venaient d'apparaître.\n\nL'équipe vérifie l'onglet Performance. Sur les sept derniers jours :\n\n- Clics : 196 000 (vs 288 000 la semaine d'avant)\n- Impressions : −41 %\n- CTR moyen : stable à 3.2 %\n- Position moyenne : passée de 14.8 à 22.3\n\nLa chute n'est pas liée à une pénalité. Les pages ne sont pas désindexées. Elles sont repassées en file d'attente. Google les redécouvre.\n\nLe CTO est appelé à 9h40. Il vérifie les logs serveur Apache. Le constat est immédiat : Googlebot a frappé le sitemap index 847 fois en 72 heures. En temps normal, c'est 4 à 6 fois par jour. Chaque sitemap enfant — `post-sitemap1.xml`, `post-sitemap2.xml`, etc. — a été re-crawlé intégralement.\n\nÀ 10h15, l'hypothèse « attaque de crawl » est écartée. L'User-Agent est bien `Googlebot`. Les IP sont confirmées via reverse DNS (`crawl-*.googlebot.com`). Ce n'est pas un bot parasite.\n\nÀ 10h30, quelqu'un pose la question : « C'est quoi ce update Rank Math de mercredi ? ».\n\n## Le bug : un changement de format que Google interprète comme un nouveau sitemap\n\nL'équipe compare le sitemap actuel avec une version cachée par WP Rocket datant d'avant la mise à jour. Le diff révèle le problème.\n\n### Avant la mise à jour (Rank Math 1.0.232)\n\n```xml\n\u003C?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\u003Curlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\"\n        xmlns:image=\"http://www.google.com/schemas/sitemap-image/1.1\">\n  \u003Curl>\n    \u003Cloc>https://example.fr/guide-seo-technique/\u003C/loc>\n    \u003Clastmod>2026-05-18T09:14:22+00:00\u003C/lastmod>\n    \u003Cchangefreq>weekly\u003C/changefreq>\n    \u003Cpriority>0.8\u003C/priority>\n    \u003Cimage:image>\n      \u003Cimage:loc>https://example.fr/wp-content/uploads/guide-seo.jpg\u003C/image:loc>\n    \u003C/image:image>\n  \u003C/url>\n\u003C/urlset>\n```\n\n### Après la mise à jour (Rank Math 1.0.233)\n\n```xml\n\u003C?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\u003Curlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\"\n        xmlns:xhtml=\"http://www.w3.org/1999/xhtml\">\n  \u003Curl>\n    \u003Cloc>https://example.fr/guide-seo-technique/\u003C/loc>\n    \u003Clastmod>2026-06-11T00:00:00+00:00\u003C/lastmod>\n  \u003C/url>\n\u003C/urlset>\n```\n\nTrois changements majeurs, tous silencieux.\n\n**1. Le namespace `image` a disparu.** Rank Math 1.0.233 a déplacé les image sitemaps dans un fichier séparé. Les URLs dans le sitemap principal ne portent plus le sous-élément `\u003Cimage:image>`. Le namespace XML change. Pour Google, la structure du document est différente.\n\n**2. Les balises `\u003Cchangefreq>` et `\u003Cpriority>` ont été retirées.** Google [les ignore depuis des années](https://developers.google.com/search/docs/crawling-indexing/sitemaps/build-sitemap), mais leur suppression modifie le hash du document. Tout outil de diffing côté crawler voit un fichier modifié.\n\n**3. La valeur `\u003Clastmod>` a été régénérée.** C'est le point critique. Rank Math 1.0.233 a recalculé le `lastmod` de chaque URL en utilisant la date de dernière modification du post WordPress (`post_modified_gmt`), mais tronquée à minuit (`T00:00:00`). Pour une page modifiée le 18 mai à 09:14:22, le nouveau lastmod affiche le 11 juin à 00:00:00 — la date de régénération du cache sitemap.\n\nPour Googlebot, chaque `\u003Clastmod>` signale une modification récente. 8 400 URLs affichent un lastmod du 11 juin. Google fait exactement ce qu'il doit faire : il recrawle tout.\n\n### Pourquoi personne n'a rien vu\n\nL'équipe SEO vérifie le sitemap via navigateur. Le rendu XSL (la feuille de style visuelle de Rank Math) affiche toujours un tableau propre avec les URLs. Visuellement, rien ne change. Il faut regarder le source XML brut pour voir la différence.\n\nScreaming Frog, lancé en post-mortem, confirme le diagnostic :\n\n```bash\n# Crawl du sitemap avec Screaming Frog CLI\n$ screamingfrog --crawl-sitemap https://example.fr/sitemap_index.xml \\\n    --export-tabs \"Sitemaps:All\" \\\n    --output-folder ./sf-export/\n\n# Résultat : 8 412 URLs dans le sitemap\n# 8 412 avec lastmod = 2026-06-11T00:00:00+00:00\n# 0 URL avec un lastmod antérieur\n```\n\nChaque URL a le même timestamp. C'est un signal d'alerte qu'un crawler humain repère en dix secondes. Mais personne ne crawle le sitemap après un update de plugin.\n\nLa vérification via `curl` montre le problème brut :\n\n```bash\n$ curl -s https://example.fr/post-sitemap1.xml | grep -c \"\u003Clastmod>2026-06-11\"\n500\n\n$ curl -s https://example.fr/post-sitemap2.xml | grep -c \"\u003Clastmod>2026-06-11\"\n500\n```\n\nTous les sitemaps enfants. Chaque page. Même date.\n\n### Le mécanisme côté Google\n\nQuand Google détecte un sitemap avec des `lastmod` massivement mis à jour, il entre en mode redécouverte. Le scheduler de crawl priorise ces URLs. Elles sont recrawlées, retraitées, et leur position dans l'index est temporairement instable.\n\nCe n'est pas une pénalité. C'est un recalcul. Google doit vérifier que le contenu n'a pas changé. En attendant, les pages perdent leur stabilité de ranking. Les URLs qui étaient solidement positionnées en page 1 oscillent entre page 1 et page 3 pendant que le recalcul s'opère.\n\nLe phénomène est amplifié sur les gros sites. Avec 8 400 URLs signalées comme modifiées, le budget de crawl est saturé. Les pages réellement mises à jour (nouveaux articles, corrections) passent en file d'attente basse. Le site perd en fraîcheur réelle.\n\nUn parallèle direct avec [ce qui se passe quand un sitemap Astro pointe vers un mauvais domaine](/blog/astro-site-config-build-local-le-sitemap-entier-pointe-vers-un-domaine-inexistant) : le sitemap est techniquement valide, mais les données qu'il transmet induisent Google en erreur.\n\n## Le fix — Restaurer les lastmod et stabiliser le format\n\n### Étape 1 : Régénérer les lastmod corrects\n\nLe correctif immédiat passe par un filtre Rank Math qui force le `lastmod` à utiliser la vraie date de modification du post, sans troncature.\n\n```php\n\u003C?php\n/**\n * Plugin: Must-Use plugin (wp-content/mu-plugins/fix-sitemap-lastmod.php)\n * Force le lastmod du sitemap Rank Math à utiliser\n * la date de modification réelle du post, au format ISO 8601 complet.\n */\nadd_filter('rank_math/sitemap/entry', function ($entry, $type, $post) {\n    if (!isset($post->ID)) {\n        return $entry;\n    }\n\n    $modified = get_post_modified_time('c', true, $post->ID);\n\n    if ($modified) {\n        $entry['lastmod'] = $modified;\n    }\n\n    return $entry;\n}, 10, 3);\n\n/**\n * Désactiver le cache interne du sitemap Rank Math\n * pour forcer la régénération avec les bonnes dates.\n */\nadd_filter('rank_math/sitemap/enable_caching', '__return_false');\n```\n\nCe mu-plugin se déploie sans activer/désactiver Rank Math. Il est chargé avant les plugins classiques. La désactivation du cache sitemap est temporaire — elle sera retirée une fois les sitemaps régénérés correctement.\n\n### Étape 2 : Purger et régénérer\n\n```bash\n# Purger le cache sitemap de Rank Math via WP-CLI\n$ wp transient delete --all --url=https://example.fr\n\n# Purger le cache objet si Redis/Memcached est actif\n$ wp cache flush\n\n# Purger le cache WP Rocket (qui cache aussi les XML)\n$ wp rocket clean --confirm\n\n# Vérifier la régénération\n$ curl -s https://example.fr/post-sitemap1.xml | head -20\n```\n\nAprès purge, chaque URL affiche son vrai `lastmod` :\n\n```xml\n\u003Curl>\n  \u003Cloc>https://example.fr/guide-seo-technique/\u003C/loc>\n  \u003Clastmod>2026-05-18T09:14:22+00:00\u003C/lastmod>\n\u003C/url>\n```\n\n### Étape 3 : Resoumettre le sitemap\n\nDans Search Console, l'équipe supprime puis resoumet le sitemap index. Cela force Google à relire la version corrigée. Le ping direct est aussi envoyé :\n\n```bash\n$ curl -s \"https://www.google.com/ping?sitemap=https://example.fr/sitemap_index.xml\"\n```\n\n### Étape 4 : Surveiller la récupération\n\nLes métriques de crawl reviennent à la normale en 48 heures. Le volume d'exploration redescend à 1 400 requêtes/jour (légèrement au-dessus de la baseline de 1 200, le temps que Google finisse ses vérifications).\n\nLe trafic organique met plus de temps. Chronologie observée :\n\n- **J+2** : le crawl se calme.\n- **J+5** : les pages piliers (top 20 par trafic) retrouvent leurs positions.\n- **J+9** : 70 % du trafic perdu est récupéré.\n- **J+18** : retour à la baseline. Les 6 200 pages « Découverte, non indexée » repassent en « Indexée ».\n- **J+21** : les impressions dépassent légèrement le niveau pré-incident, probablement grâce au recrawl frais.\n\nLe même schéma de récupération lente — une régression SEO silencieuse causée par un changement technique sans impact visuel — s'observe régulièrement. L'incident rappelle [la désactivation accidentelle de Yoast SEO après un update](/blog/yoast-seo-desactive-par-un-update-plugin-fallback-meta-vides-sur-80-du-blog), où un plugin SEO qui dysfonctionne silencieusement peut coûter des semaines de trafic.\n\n### Étape 5 : Prévention\n\nL'équipe met en place trois garde-fous :\n\n**Un test automatisé post-deploy.** Un script cron qui compare les lastmod du sitemap avec les `post_modified_gmt` en base. Si plus de 10 % des URLs ont un écart supérieur à 24 heures, une alerte Slack part.\n\n```bash\n#!/bin/bash\n# check-sitemap-lastmod.sh — exécuté via cron toutes les 6h\n\nSITEMAP_URL=\"https://example.fr/post-sitemap1.xml\"\nTHRESHOLD=50  # nombre max d'URLs avec lastmod \"aujourd'hui\"\nTODAY=$(date -u +%Y-%m-%d)\n\nCOUNT=$(curl -s \"$SITEMAP_URL\" | grep -c \"\u003Clastmod>${TODAY}\")\n\nif [ \"$COUNT\" -gt \"$THRESHOLD\" ]; then\n  curl -X POST -H 'Content-type: application/json' \\\n    --data \"{\\\"text\\\":\\\"⚠ Sitemap alert: ${COUNT} URLs avec lastmod du jour (seuil: ${THRESHOLD}). Vérifier Rank Math.\\\"}\" \\\n    \"$SLACK_WEBHOOK_URL\"\nfi\n```\n\n**Un freeze des mises à jour auto pour les plugins SEO.** Rank Math, comme Yoast, ne se met plus à jour automatiquement. Chaque update passe par un staging où le sitemap XML est diffé avec la production.\n\n**Un snapshot hebdomadaire du sitemap.** Chaque dimanche, un cron télécharge les sitemaps XML et les commit dans un repo Git privé. Le diff est reviewable en cas d'incident.\n\nCes mesures auraient aussi évité des situations similaires lors de [migrations CDN où les redirects sont oubliés](/blog/migration-cloudflare-vers-bunny-cdn-regles-redirect-https-oubliees) — le principe est le même : ce qui n'est pas monitoré finit par casser silencieusement.\n\n## Ce qu'on en retient\n\nUn plugin SEO qui met à jour son format de sitemap n'est pas un bug. C'est une décision produit légitime. Le problème, c'est l'absence de signal. Pas de warning dans le dashboard. Pas de mention dans le changelog. Pas de migration progressive.\n\nLe `lastmod` est le seul signal que Google prend au sérieux dans un sitemap. Le corrompre — même involontairement — revient à demander un recrawl complet. Sur 500 pages, ça passe. Sur 8 400, c'est trois semaines de turbulences.\n\nLa leçon opérationnelle tient en une phrase : chaque composant qui génère du XML pour Google doit être monitoré comme une route de production. Un outil de monitoring continu type Seogard détecte ce type de dérive — un lastmod uniforme sur 100 % des URLs — en quelques minutes, pas en dix-huit jours.\n\nLes plugins SEO sont de l'infrastructure. Il est temps de les traiter comme telle.\n```","https://seogard.io/blog/rank-math-update-nouveau-format-de-sitemaps-declenche-une-reindexation-complete","CMS","2026-06-14T16:01:41.413Z","2026-06-14","Un update Rank Math change le format des sitemaps. Google traite chaque URL comme nouvelle. Récit du pic de crawl, de la chute, et du fix.","\u003Ch1>Rank Math : quand un update de sitemap déclenche une réindexation de 8 400 pages\u003C/h1>\n\u003Cp>Mercredi 10h15. L'équipe contenu d'un éditeur média français pousse la mise à jour automatique de Rank Math SEO, version 1.0.233. Rien dans le changelog ne mentionne un changement structurel. Aucune alerte, aucun warning dans le dashboard WordPress. Le site tourne sur un WordPress 6.7 avec WP Rocket, 8 400 pages indexées, 1.2 million de clics organiques par mois. Quatre jours plus tard, Search Console affiche un pic de crawl jamais vu. Le lundi suivant, le trafic organique chute de 34 %.\u003C/p>\n\u003Ch2>Lundi 9h02 — Le mail de Search Console\u003C/h2>\n\u003Cp>Le responsable SEO ouvre sa boîte. Un mail Search Console, envoyé dimanche soir : « Augmentation significative du nombre de pages explorées ». Le graphique de crawl dans les paramètres d'exploration montre un bond de 1 200 requêtes/jour à 9 800 requêtes/jour sur les trois derniers jours.\u003C/p>\n\u003Cp>Premier réflexe : vérifier si un déploiement a eu lieu. L'historique Git du thème ne montre rien depuis onze jours. Aucun push, aucun merge. Le cache WP Rocket n'a pas été purgé manuellement.\u003C/p>\n\u003Cp>Deuxième réflexe : le fichier \u003Ccode>robots.txt\u003C/code>. Toujours en place. Pas de \u003Ccode>Disallow\u003C/code> suspect. Le \u003Ccode>Sitemap:\u003C/code> pointe bien vers \u003Ccode>https://example.fr/sitemap_index.xml\u003C/code>.\u003C/p>\n\u003Cp>Troisième réflexe : ouvrir le rapport de couverture. Et là, le tableau se fige. 6 200 pages en statut « Découverte, actuellement non indexée ». Des pages qui étaient indexées depuis des mois — des catégories, des articles piliers, des fiches auteur. Google les traite comme si elles venaient d'apparaître.\u003C/p>\n\u003Cp>L'équipe vérifie l'onglet Performance. Sur les sept derniers jours :\u003C/p>\n\u003Cul>\n\u003Cli>Clics : 196 000 (vs 288 000 la semaine d'avant)\u003C/li>\n\u003Cli>Impressions : −41 %\u003C/li>\n\u003Cli>CTR moyen : stable à 3.2 %\u003C/li>\n\u003Cli>Position moyenne : passée de 14.8 à 22.3\u003C/li>\n\u003C/ul>\n\u003Cp>La chute n'est pas liée à une pénalité. Les pages ne sont pas désindexées. Elles sont repassées en file d'attente. Google les redécouvre.\u003C/p>\n\u003Cp>Le CTO est appelé à 9h40. Il vérifie les logs serveur Apache. Le constat est immédiat : Googlebot a frappé le sitemap index 847 fois en 72 heures. En temps normal, c'est 4 à 6 fois par jour. Chaque sitemap enfant — \u003Ccode>post-sitemap1.xml\u003C/code>, \u003Ccode>post-sitemap2.xml\u003C/code>, etc. — a été re-crawlé intégralement.\u003C/p>\n\u003Cp>À 10h15, l'hypothèse « attaque de crawl » est écartée. L'User-Agent est bien \u003Ccode>Googlebot\u003C/code>. Les IP sont confirmées via reverse DNS (\u003Ccode>crawl-*.googlebot.com\u003C/code>). Ce n'est pas un bot parasite.\u003C/p>\n\u003Cp>À 10h30, quelqu'un pose la question : « C'est quoi ce update Rank Math de mercredi ? ».\u003C/p>\n\u003Ch2>Le bug : un changement de format que Google interprète comme un nouveau sitemap\u003C/h2>\n\u003Cp>L'équipe compare le sitemap actuel avec une version cachée par WP Rocket datant d'avant la mise à jour. Le diff révèle le problème.\u003C/p>\n\u003Ch3>Avant la mise à jour (Rank Math 1.0.232)\u003C/h3>\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\">xml\u003C/span>\u003Cspan style=\"color:#B392F0\"> version\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"1.0\"\u003C/span>\u003Cspan style=\"color:#B392F0\"> encoding\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"UTF-8\"\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\">urlset\u003C/span>\u003Cspan style=\"color:#B392F0\"> xmlns\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"http://www.sitemaps.org/schemas/sitemap/0.9\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">        xmlns:image\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"http://www.google.com/schemas/sitemap-image/1.1\"\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\">url\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\">loc\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>https://example.fr/guide-seo-technique/&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">loc\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\">lastmod\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>2026-05-18T09:14:22+00:00&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">lastmod\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\">changefreq\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>weekly&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">changefreq\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\">priority\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>0.8&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">priority\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\">image:image\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\">image:loc\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>https://example.fr/wp-content/uploads/guide-seo.jpg&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">image:loc\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\">image:image\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\">url\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\">urlset\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Ch3>Après la mise à jour (Rank Math 1.0.233)\u003C/h3>\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\">xml\u003C/span>\u003Cspan style=\"color:#B392F0\"> version\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"1.0\"\u003C/span>\u003Cspan style=\"color:#B392F0\"> encoding\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"UTF-8\"\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\">urlset\u003C/span>\u003Cspan style=\"color:#B392F0\"> xmlns\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"http://www.sitemaps.org/schemas/sitemap/0.9\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">        xmlns:xhtml\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"http://www.w3.org/1999/xhtml\"\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\">url\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\">loc\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>https://example.fr/guide-seo-technique/&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">loc\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\">lastmod\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>2026-06-11T00:00:00+00:00&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">lastmod\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\">url\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\">urlset\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>Trois changements majeurs, tous silencieux.\u003C/p>\n\u003Cp>\u003Cstrong>1. Le namespace \u003Ccode>image\u003C/code> a disparu.\u003C/strong> Rank Math 1.0.233 a déplacé les image sitemaps dans un fichier séparé. Les URLs dans le sitemap principal ne portent plus le sous-élément \u003Ccode>&#x3C;image:image>\u003C/code>. Le namespace XML change. Pour Google, la structure du document est différente.\u003C/p>\n\u003Cp>\u003Cstrong>2. Les balises \u003Ccode>&#x3C;changefreq>\u003C/code> et \u003Ccode>&#x3C;priority>\u003C/code> ont été retirées.\u003C/strong> Google \u003Ca href=\"https://developers.google.com/search/docs/crawling-indexing/sitemaps/build-sitemap\">les ignore depuis des années\u003C/a>, mais leur suppression modifie le hash du document. Tout outil de diffing côté crawler voit un fichier modifié.\u003C/p>\n\u003Cp>\u003Cstrong>3. La valeur \u003Ccode>&#x3C;lastmod>\u003C/code> a été régénérée.\u003C/strong> C'est le point critique. Rank Math 1.0.233 a recalculé le \u003Ccode>lastmod\u003C/code> de chaque URL en utilisant la date de dernière modification du post WordPress (\u003Ccode>post_modified_gmt\u003C/code>), mais tronquée à minuit (\u003Ccode>T00:00:00\u003C/code>). Pour une page modifiée le 18 mai à 09:14:22, le nouveau lastmod affiche le 11 juin à 00:00:00 — la date de régénération du cache sitemap.\u003C/p>\n\u003Cp>Pour Googlebot, chaque \u003Ccode>&#x3C;lastmod>\u003C/code> signale une modification récente. 8 400 URLs affichent un lastmod du 11 juin. Google fait exactement ce qu'il doit faire : il recrawle tout.\u003C/p>\n\u003Ch3>Pourquoi personne n'a rien vu\u003C/h3>\n\u003Cp>L'équipe SEO vérifie le sitemap via navigateur. Le rendu XSL (la feuille de style visuelle de Rank Math) affiche toujours un tableau propre avec les URLs. Visuellement, rien ne change. Il faut regarder le source XML brut pour voir la différence.\u003C/p>\n\u003Cp>Screaming Frog, lancé en post-mortem, confirme le diagnostic :\u003C/p>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Crawl du sitemap avec Screaming Frog CLI\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">$\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> screamingfrog\u003C/span>\u003Cspan style=\"color:#79B8FF\"> --crawl-sitemap\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> https://example.fr/sitemap_index.xml\u003C/span>\u003Cspan style=\"color:#79B8FF\"> \\\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">    --export-tabs\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"Sitemaps:All\"\u003C/span>\u003Cspan style=\"color:#79B8FF\"> \\\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">    --output-folder\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> ./sf-export/\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Résultat : 8 412 URLs dans le sitemap\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># 8 412 avec lastmod = 2026-06-11T00:00:00+00:00\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># 0 URL avec un lastmod antérieur\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>Chaque URL a le même timestamp. C'est un signal d'alerte qu'un crawler humain repère en dix secondes. Mais personne ne crawle le sitemap après un update de plugin.\u003C/p>\n\u003Cp>La vérification via \u003Ccode>curl\u003C/code> montre le problème brut :\u003C/p>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">$\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> curl\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -s\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> https://example.fr/post-sitemap1.xml\u003C/span>\u003Cspan style=\"color:#F97583\"> |\u003C/span>\u003Cspan style=\"color:#B392F0\"> grep\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -c\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"&#x3C;lastmod>2026-06-11\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">500\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">$\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> curl\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -s\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> https://example.fr/post-sitemap2.xml\u003C/span>\u003Cspan style=\"color:#F97583\"> |\u003C/span>\u003Cspan style=\"color:#B392F0\"> grep\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -c\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"&#x3C;lastmod>2026-06-11\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">500\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>Tous les sitemaps enfants. Chaque page. Même date.\u003C/p>\n\u003Ch3>Le mécanisme côté Google\u003C/h3>\n\u003Cp>Quand Google détecte un sitemap avec des \u003Ccode>lastmod\u003C/code> massivement mis à jour, il entre en mode redécouverte. Le scheduler de crawl priorise ces URLs. Elles sont recrawlées, retraitées, et leur position dans l'index est temporairement instable.\u003C/p>\n\u003Cp>Ce n'est pas une pénalité. C'est un recalcul. Google doit vérifier que le contenu n'a pas changé. En attendant, les pages perdent leur stabilité de ranking. Les URLs qui étaient solidement positionnées en page 1 oscillent entre page 1 et page 3 pendant que le recalcul s'opère.\u003C/p>\n\u003Cp>Le phénomène est amplifié sur les gros sites. Avec 8 400 URLs signalées comme modifiées, le budget de crawl est saturé. Les pages réellement mises à jour (nouveaux articles, corrections) passent en file d'attente basse. Le site perd en fraîcheur réelle.\u003C/p>\n\u003Cp>Un parallèle direct avec \u003Ca href=\"/blog/astro-site-config-build-local-le-sitemap-entier-pointe-vers-un-domaine-inexistant\">ce qui se passe quand un sitemap Astro pointe vers un mauvais domaine\u003C/a> : le sitemap est techniquement valide, mais les données qu'il transmet induisent Google en erreur.\u003C/p>\n\u003Ch2>Le fix — Restaurer les lastmod et stabiliser le format\u003C/h2>\n\u003Ch3>Étape 1 : Régénérer les lastmod corrects\u003C/h3>\n\u003Cp>Le correctif immédiat passe par un filtre Rank Math qui force le \u003Ccode>lastmod\u003C/code> à utiliser la vraie date de modification du post, sans troncature.\u003C/p>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">&#x3C;?\u003C/span>\u003Cspan style=\"color:#79B8FF\">php\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">/**\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"> * Plugin: Must-Use plugin (wp-content/mu-plugins/fix-sitemap-lastmod.php)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"> * Force le lastmod du sitemap Rank Math à utiliser\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"> * la date de modification réelle du post, au format ISO 8601 complet.\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"> */\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">add_filter\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'rank_math/sitemap/entry'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#F97583\">function\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> ($entry, $type, $post) {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    if\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> (\u003C/span>\u003Cspan style=\"color:#F97583\">!\u003C/span>\u003Cspan style=\"color:#79B8FF\">isset\u003C/span>\u003Cspan style=\"color:#E1E4E8\">($post\u003C/span>\u003Cspan style=\"color:#F97583\">->\u003C/span>\u003Cspan style=\"color:#E1E4E8\">ID)) {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">        return\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> $entry;\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:#E1E4E8\">    $modified \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#B392F0\"> get_post_modified_time\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'c'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#79B8FF\">true\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, $post\u003C/span>\u003Cspan style=\"color:#F97583\">->\u003C/span>\u003Cspan style=\"color:#E1E4E8\">ID);\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\"> ($modified) {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        $entry[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'lastmod'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">] \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> $modified;\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\">    return\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> $entry;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">}, \u003C/span>\u003Cspan style=\"color:#79B8FF\">10\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#79B8FF\">3\u003C/span>\u003Cspan style=\"color:#E1E4E8\">);\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">/**\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"> * Désactiver le cache interne du sitemap Rank Math\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"> * pour forcer la régénération avec les bonnes dates.\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"> */\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">add_filter\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'rank_math/sitemap/enable_caching'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'__return_false'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">);\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>Ce mu-plugin se déploie sans activer/désactiver Rank Math. Il est chargé avant les plugins classiques. La désactivation du cache sitemap est temporaire — elle sera retirée une fois les sitemaps régénérés correctement.\u003C/p>\n\u003Ch3>Étape 2 : Purger et régénérer\u003C/h3>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Purger le cache sitemap de Rank Math via WP-CLI\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">$\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> wp\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> transient\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> delete\u003C/span>\u003Cspan style=\"color:#79B8FF\"> --all\u003C/span>\u003Cspan style=\"color:#79B8FF\"> --url=https://example.fr\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Purger le cache objet si Redis/Memcached est actif\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">$\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> wp\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> cache\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> flush\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Purger le cache WP Rocket (qui cache aussi les XML)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">$\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> wp\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> rocket\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> clean\u003C/span>\u003Cspan style=\"color:#79B8FF\"> --confirm\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Vérifier la régénération\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">$\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> curl\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -s\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> https://example.fr/post-sitemap1.xml\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>Après purge, chaque URL affiche son vrai \u003Ccode>lastmod\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\">url\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\">loc\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>https://example.fr/guide-seo-technique/&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">loc\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\">lastmod\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>2026-05-18T09:14:22+00:00&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">lastmod\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\">url\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Ch3>Étape 3 : Resoumettre le sitemap\u003C/h3>\n\u003Cp>Dans Search Console, l'équipe supprime puis resoumet le sitemap index. Cela force Google à relire la version corrigée. Le ping direct est aussi envoyé :\u003C/p>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">$\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> curl\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -s\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"https://www.google.com/ping?sitemap=https://example.fr/sitemap_index.xml\"\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Ch3>Étape 4 : Surveiller la récupération\u003C/h3>\n\u003Cp>Les métriques de crawl reviennent à la normale en 48 heures. Le volume d'exploration redescend à 1 400 requêtes/jour (légèrement au-dessus de la baseline de 1 200, le temps que Google finisse ses vérifications).\u003C/p>\n\u003Cp>Le trafic organique met plus de temps. Chronologie observée :\u003C/p>\n\u003Cul>\n\u003Cli>\u003Cstrong>J+2\u003C/strong> : le crawl se calme.\u003C/li>\n\u003Cli>\u003Cstrong>J+5\u003C/strong> : les pages piliers (top 20 par trafic) retrouvent leurs positions.\u003C/li>\n\u003Cli>\u003Cstrong>J+9\u003C/strong> : 70 % du trafic perdu est récupéré.\u003C/li>\n\u003Cli>\u003Cstrong>J+18\u003C/strong> : retour à la baseline. Les 6 200 pages « Découverte, non indexée » repassent en « Indexée ».\u003C/li>\n\u003Cli>\u003Cstrong>J+21\u003C/strong> : les impressions dépassent légèrement le niveau pré-incident, probablement grâce au recrawl frais.\u003C/li>\n\u003C/ul>\n\u003Cp>Le même schéma de récupération lente — une régression SEO silencieuse causée par un changement technique sans impact visuel — s'observe régulièrement. L'incident rappelle \u003Ca href=\"/blog/yoast-seo-desactive-par-un-update-plugin-fallback-meta-vides-sur-80-du-blog\">la désactivation accidentelle de Yoast SEO après un update\u003C/a>, où un plugin SEO qui dysfonctionne silencieusement peut coûter des semaines de trafic.\u003C/p>\n\u003Ch3>Étape 5 : Prévention\u003C/h3>\n\u003Cp>L'équipe met en place trois garde-fous :\u003C/p>\n\u003Cp>\u003Cstrong>Un test automatisé post-deploy.\u003C/strong> Un script cron qui compare les lastmod du sitemap avec les \u003Ccode>post_modified_gmt\u003C/code> en base. Si plus de 10 % des URLs ont un écart supérieur à 24 heures, une alerte Slack part.\u003C/p>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">#!/bin/bash\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># check-sitemap-lastmod.sh — exécuté via cron toutes les 6h\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">SITEMAP_URL\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"https://example.fr/post-sitemap1.xml\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">THRESHOLD\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">50\u003C/span>\u003Cspan style=\"color:#6A737D\">  # nombre max d'URLs avec lastmod \"aujourd'hui\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">TODAY\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\">$(\u003C/span>\u003Cspan style=\"color:#B392F0\">date\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -u\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> +%Y-%m-%d\u003C/span>\u003Cspan style=\"color:#E1E4E8\">)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">COUNT\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\"> -s\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">$SITEMAP_URL\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"\u003C/span>\u003Cspan style=\"color:#F97583\"> |\u003C/span>\u003Cspan style=\"color:#B392F0\"> grep\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -c\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"&#x3C;lastmod>${\u003C/span>\u003Cspan style=\"color:#E1E4E8\">TODAY\u003C/span>\u003Cspan style=\"color:#9ECBFF\">}\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">)\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\">$COUNT\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"\u003C/span>\u003Cspan style=\"color:#F97583\"> -gt\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">$THRESHOLD\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:#B392F0\">  curl\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -X\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> POST\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -H\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> 'Content-type: application/json'\u003C/span>\u003Cspan style=\"color:#79B8FF\"> \\\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">    --data\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"{\u003C/span>\u003Cspan style=\"color:#79B8FF\">\\\"\u003C/span>\u003Cspan style=\"color:#9ECBFF\">text\u003C/span>\u003Cspan style=\"color:#79B8FF\">\\\"\u003C/span>\u003Cspan style=\"color:#9ECBFF\">:\u003C/span>\u003Cspan style=\"color:#79B8FF\">\\\"\u003C/span>\u003Cspan style=\"color:#9ECBFF\">⚠ Sitemap alert: ${\u003C/span>\u003Cspan style=\"color:#E1E4E8\">COUNT\u003C/span>\u003Cspan style=\"color:#9ECBFF\">} URLs avec lastmod du jour (seuil: ${\u003C/span>\u003Cspan style=\"color:#E1E4E8\">THRESHOLD\u003C/span>\u003Cspan style=\"color:#9ECBFF\">}). Vérifier Rank Math.\u003C/span>\u003Cspan style=\"color:#79B8FF\">\\\"\u003C/span>\u003Cspan style=\"color:#9ECBFF\">}\"\u003C/span>\u003Cspan style=\"color:#79B8FF\"> \\\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    \"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">$SLACK_WEBHOOK_URL\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">fi\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>\u003Cstrong>Un freeze des mises à jour auto pour les plugins SEO.\u003C/strong> Rank Math, comme Yoast, ne se met plus à jour automatiquement. Chaque update passe par un staging où le sitemap XML est diffé avec la production.\u003C/p>\n\u003Cp>\u003Cstrong>Un snapshot hebdomadaire du sitemap.\u003C/strong> Chaque dimanche, un cron télécharge les sitemaps XML et les commit dans un repo Git privé. Le diff est reviewable en cas d'incident.\u003C/p>\n\u003Cp>Ces mesures auraient aussi évité des situations similaires lors de \u003Ca href=\"/blog/migration-cloudflare-vers-bunny-cdn-regles-redirect-https-oubliees\">migrations CDN où les redirects sont oubliés\u003C/a> — le principe est le même : ce qui n'est pas monitoré finit par casser silencieusement.\u003C/p>\n\u003Ch2>Ce qu'on en retient\u003C/h2>\n\u003Cp>Un plugin SEO qui met à jour son format de sitemap n'est pas un bug. C'est une décision produit légitime. Le problème, c'est l'absence de signal. Pas de warning dans le dashboard. Pas de mention dans le changelog. Pas de migration progressive.\u003C/p>\n\u003Cp>Le \u003Ccode>lastmod\u003C/code> est le seul signal que Google prend au sérieux dans un sitemap. Le corrompre — même involontairement — revient à demander un recrawl complet. Sur 500 pages, ça passe. Sur 8 400, c'est trois semaines de turbulences.\u003C/p>\n\u003Cp>La leçon opérationnelle tient en une phrase : chaque composant qui génère du XML pour Google doit être monitoré comme une route de production. Un outil de monitoring continu type Seogard détecte ce type de dérive — un lastmod uniforme sur 100 % des URLs — en quelques minutes, pas en dix-huit jours.\u003C/p>\n\u003Cp>Les plugins SEO sont de l'infrastructure. Il est temps de les traiter comme telle.\u003C/p>\n\u003Cpre>\u003Ccode>\u003C/code>\u003C/pre>",null,12,[18,19,20,21],"rank math","sitemap","wordpress","reindexation","Rank Math sitemap : mise à jour qui force une réindexation","Sun Jun 14 2026 16:01:41 GMT+0000 (Coordinated Universal Time)",[25,38,53,68,82,97],{"_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":36,"updatedAt":37},"6a2d7ef3aa6b273b0c80d69d","yoast-seo-desactive-par-un-update-plugin-fallback-meta-vides-sur-80-du-blog","https://seogard.io/blog/yoast-seo-desactive-par-un-update-plugin-fallback-meta-vides-sur-80-du-blog","2026-06-13T16:01:55.662Z","2026-06-13","Un update WordPress désactive Yoast SEO sans alerte. 1 200 articles perdent leurs meta en silence. Récit, diagnostic technique et fix complet.",[20,33,34,35],"yoast","plugin","meta","Yoast SEO désactivé par un update : meta vides sur 80% du blog","Sat Jun 13 2026 16:01:55 GMT+0000 (Coordinated Universal Time)",{"_id":39,"slug":40,"__v":6,"author":7,"canonical":41,"category":42,"createdAt":43,"date":44,"description":45,"image":15,"imageAlt":15,"readingTime":16,"tags":46,"title":51,"updatedAt":52},"6a2f9542aa6b273b0c30f3ec","contentful-le-champ-seo-title-non-sync-vers-next-js-fallback-first-h1-genere","https://seogard.io/blog/contentful-le-champ-seo-title-non-sync-vers-next-js-fallback-first-h1-genere","Headless","2026-06-15T06:01:38.446Z","2026-06-15","Un champ SEO title Contentful non mappé dans Next.js génère un fallback H1 identique sur 1 200 variantes produit. Récit, diagnostic, fix.",[47,48,49,50],"contentful","headless","next.js","mapping","Contentful + Next.js : title manquant, fallback H1 sur 1 200 pages","Mon Jun 15 2026 06:01:38 GMT+0000 (Coordinated Universal Time)",{"_id":54,"slug":55,"__v":6,"author":7,"canonical":56,"category":57,"createdAt":58,"date":44,"description":59,"image":15,"imageAlt":15,"readingTime":16,"tags":60,"title":66,"updatedAt":67},"6a30222eaa6b273b0ca1e7dc","what-ai-overview-click-data-reveals-about-consumer-search-behavior-5-strategic-insights-for-cmos-via-sejournal-gregjarboe","https://seogard.io/blog/what-ai-overview-click-data-reveals-about-consumer-search-behavior-5-strategic-insights-for-cmos-via-sejournal-gregjarboe","Actualités SEO","2026-06-15T16:02:54.519Z","Les utilisateurs quotidiens d'AI Overview cliquent 3.5x plus sur les sources. Analyse technique des données et stratégies d'optimisation concrètes.",[61,62,63,64,65],"AI Overview","click data","search behavior","SGE","structured data","AI Overview Click Data : ce que les clics révèlent vraiment","Mon Jun 15 2026 16:02:54 GMT+0000 (Coordinated Universal Time)",{"_id":69,"slug":70,"__v":6,"author":7,"canonical":71,"category":57,"createdAt":72,"date":12,"description":73,"image":15,"imageAlt":15,"readingTime":16,"tags":74,"title":80,"updatedAt":81},"6a2e441caa6b273b0c22bc85","what-apple-s-gemini-powered-siri-means-for-search-visibility-via-sejournal-mattgsouthern","https://seogard.io/blog/what-apple-s-gemini-powered-siri-means-for-search-visibility-via-sejournal-mattgsouthern","2026-06-14T06:03:08.037Z","Apple intègre Gemini dans Siri. Analyse technique des conséquences pour le crawl, le rendering, le structured data et la visibilité organique de vos pages.",[75,76,77,78,79],"siri","gemini","apple-intelligence","llm-seo","search-visibility","Siri + Gemini : impact concret sur la visibilité SEO","Sun Jun 14 2026 06:03:08 GMT+0000 (Coordinated Universal Time)",{"_id":83,"slug":84,"__v":6,"author":7,"canonical":85,"category":86,"createdAt":87,"date":30,"description":88,"image":15,"imageAlt":15,"readingTime":16,"tags":89,"title":95,"updatedAt":96},"6a2cf253aa6b273b0c0c9a5f","tanstack-router-ssr-title-pris-du-layout-au-lieu-de-la-leaf-route","https://seogard.io/blog/tanstack-router-ssr-title-pris-du-layout-au-lieu-de-la-leaf-route","Framework","2026-06-13T06:01:55.020Z","Un e-commerce perd 40 % de clics organiques : TanStack Router applique le title du layout parent au lieu de la leaf route. Récit, diagnostic, fix.",[90,91,92,93,94],"tanstack router","react","ssr","title","meta tags","TanStack Router SSR : le title vient du layout, pas de la page","Sat Jun 13 2026 06:01:55 GMT+0000 (Coordinated Universal Time)",{"_id":98,"slug":99,"__v":6,"author":7,"canonical":100,"category":86,"createdAt":101,"date":102,"description":103,"image":15,"imageAlt":15,"readingTime":104,"tags":105,"title":110,"updatedAt":111},"6a2ba0d0aa6b273b0cf5b507","astro-view-transitions-changement-de-route-ne-re-trigge-pas-le-head-update","https://seogard.io/blog/astro-view-transitions-changement-de-route-ne-re-trigge-pas-le-head-update","2026-06-12T06:01:52.619Z","2026-06-12","Un site Astro perd 40% de clics : les View Transitions ne mettent pas à jour les meta SEO lors des changements de route. Récit, diagnostic et fix.",11,[106,107,108,109],"astro","view transitions","head","spa","Astro View Transitions : meta head figées après navigation","Fri Jun 12 2026 06:01:52 GMT+0000 (Coordinated Universal Time)",{"categories":113},[114,117,121,125,129,131,135,138,141,145,149,152,155,159,162,165,168,171,175],{"category":57,"slug":115,"count":116},"actualites-seo",168,{"category":118,"slug":119,"count":120},"Migration","migration",18,{"category":122,"slug":123,"count":124},"Rendering","rendering",9,{"category":126,"slug":127,"count":128},"Performance","performance",8,{"category":86,"slug":130,"count":128},"framework",{"category":132,"slug":133,"count":134},"Crawl","crawl",7,{"category":136,"slug":137,"count":134},"SEO Technique","seo-technique",{"category":139,"slug":140,"count":134},"Meta Tags","meta-tags",{"category":142,"slug":143,"count":144},"Architecture","architecture",6,{"category":146,"slug":147,"count":148},"Structured Data","structured-data",5,{"category":150,"slug":151,"count":148},"JavaScript SEO","javascript-seo",{"category":153,"slug":154,"count":148},"Monitoring","monitoring",{"category":156,"slug":157,"count":158},"E-commerce","e-commerce",4,{"category":160,"slug":161,"count":158},"Avancé","avance",{"category":163,"slug":164,"count":158},"Refonte","refonte",{"category":166,"slug":167,"count":158},"Redirections","redirections",{"category":169,"slug":170,"count":158},"Outils","outils",{"category":172,"slug":173,"count":174},"IA & SEO","ia-seo",3,{"category":176,"slug":177,"count":174},"Contenu","contenu"]