Rank Math sitemap : mise à jour qui force une réindexation

Rank Math : quand un update de sitemap déclenche une réindexation de 8 400 pages

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 %.

Lundi 9h02 — Le mail de Search Console

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.

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.

Deuxiè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.

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.

L'équipe vérifie l'onglet Performance. Sur les sept derniers jours :

  • Clics : 196 000 (vs 288 000 la semaine d'avant)
  • Impressions : −41 %
  • CTR moyen : stable à 3.2 %
  • Position moyenne : passée de 14.8 à 22.3

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.

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 — post-sitemap1.xml, post-sitemap2.xml, etc. — a été re-crawlé intégralement.

À 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.

À 10h30, quelqu'un pose la question : « C'est quoi ce update Rank Math de mercredi ? ».

Le bug : un changement de format que Google interprète comme un nouveau sitemap

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.

Avant la mise à jour (Rank Math 1.0.232)

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
        xmlns:image="http://www.google.com/schemas/sitemap-image/1.1">
  <url>
    <loc>https://example.fr/guide-seo-technique/</loc>
    <lastmod>2026-05-18T09:14:22+00:00</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://example.fr/wp-content/uploads/guide-seo.jpg</image:loc>
    </image:image>
  </url>
</urlset>

Après la mise à jour (Rank Math 1.0.233)

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
        xmlns:xhtml="http://www.w3.org/1999/xhtml">
  <url>
    <loc>https://example.fr/guide-seo-technique/</loc>
    <lastmod>2026-06-11T00:00:00+00:00</lastmod>
  </url>
</urlset>

Trois changements majeurs, tous silencieux.

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 <image:image>. Le namespace XML change. Pour Google, la structure du document est différente.

2. Les balises <changefreq> et <priority> ont été retirées. Google les ignore depuis des années, mais leur suppression modifie le hash du document. Tout outil de diffing côté crawler voit un fichier modifié.

3. La valeur <lastmod> 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.

Pour Googlebot, chaque <lastmod> 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.

Pourquoi personne n'a rien vu

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.

Screaming Frog, lancé en post-mortem, confirme le diagnostic :

# Crawl du sitemap avec Screaming Frog CLI
$ screamingfrog --crawl-sitemap https://example.fr/sitemap_index.xml \
    --export-tabs "Sitemaps:All" \
    --output-folder ./sf-export/

# Résultat : 8 412 URLs dans le sitemap
# 8 412 avec lastmod = 2026-06-11T00:00:00+00:00
# 0 URL avec un lastmod antérieur

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.

La vérification via curl montre le problème brut :

$ curl -s https://example.fr/post-sitemap1.xml | grep -c "<lastmod>2026-06-11"
500

$ curl -s https://example.fr/post-sitemap2.xml | grep -c "<lastmod>2026-06-11"
500

Tous les sitemaps enfants. Chaque page. Même date.

Le mécanisme côté Google

Quand 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.

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.

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.

Un parallèle direct avec ce qui se passe quand un sitemap Astro pointe vers un mauvais domaine : le sitemap est techniquement valide, mais les données qu'il transmet induisent Google en erreur.

Le fix — Restaurer les lastmod et stabiliser le format

Étape 1 : Régénérer les lastmod corrects

Le correctif immédiat passe par un filtre Rank Math qui force le lastmod à utiliser la vraie date de modification du post, sans troncature.

<?php
/**
 * Plugin: Must-Use plugin (wp-content/mu-plugins/fix-sitemap-lastmod.php)
 * Force le lastmod du sitemap Rank Math à utiliser
 * la date de modification réelle du post, au format ISO 8601 complet.
 */
add_filter('rank_math/sitemap/entry', function ($entry, $type, $post) {
    if (!isset($post->ID)) {
        return $entry;
    }

    $modified = get_post_modified_time('c', true, $post->ID);

    if ($modified) {
        $entry['lastmod'] = $modified;
    }

    return $entry;
}, 10, 3);

/**
 * Désactiver le cache interne du sitemap Rank Math
 * pour forcer la régénération avec les bonnes dates.
 */
add_filter('rank_math/sitemap/enable_caching', '__return_false');

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.

Étape 2 : Purger et régénérer

# Purger le cache sitemap de Rank Math via WP-CLI
$ wp transient delete --all --url=https://example.fr

# Purger le cache objet si Redis/Memcached est actif
$ wp cache flush

# Purger le cache WP Rocket (qui cache aussi les XML)
$ wp rocket clean --confirm

# Vérifier la régénération
$ curl -s https://example.fr/post-sitemap1.xml | head -20

Après purge, chaque URL affiche son vrai lastmod :

<url>
  <loc>https://example.fr/guide-seo-technique/</loc>
  <lastmod>2026-05-18T09:14:22+00:00</lastmod>
</url>

Étape 3 : Resoumettre le sitemap

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é :

$ curl -s "https://www.google.com/ping?sitemap=https://example.fr/sitemap_index.xml"

Étape 4 : Surveiller la récupération

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).

Le trafic organique met plus de temps. Chronologie observée :

  • J+2 : le crawl se calme.
  • J+5 : les pages piliers (top 20 par trafic) retrouvent leurs positions.
  • J+9 : 70 % du trafic perdu est récupéré.
  • J+18 : retour à la baseline. Les 6 200 pages « Découverte, non indexée » repassent en « Indexée ».
  • J+21 : les impressions dépassent légèrement le niveau pré-incident, probablement grâce au recrawl frais.

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 la désactivation accidentelle de Yoast SEO après un update, où un plugin SEO qui dysfonctionne silencieusement peut coûter des semaines de trafic.

Étape 5 : Prévention

L'équipe met en place trois garde-fous :

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.

#!/bin/bash
# check-sitemap-lastmod.sh — exécuté via cron toutes les 6h

SITEMAP_URL="https://example.fr/post-sitemap1.xml"
THRESHOLD=50  # nombre max d'URLs avec lastmod "aujourd'hui"
TODAY=$(date -u +%Y-%m-%d)

COUNT=$(curl -s "$SITEMAP_URL" | grep -c "<lastmod>${TODAY}")

if [ "$COUNT" -gt "$THRESHOLD" ]; then
  curl -X POST -H 'Content-type: application/json' \
    --data "{\"text\":\"⚠ Sitemap alert: ${COUNT} URLs avec lastmod du jour (seuil: ${THRESHOLD}). Vérifier Rank Math.\"}" \
    "$SLACK_WEBHOOK_URL"
fi

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.

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.

Ces mesures auraient aussi évité des situations similaires lors de migrations CDN où les redirects sont oubliés — le principe est le même : ce qui n'est pas monitoré finit par casser silencieusement.

Ce qu'on en retient

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.

Le 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.

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.

Les plugins SEO sont de l'infrastructure. Il est temps de les traiter comme telle.

Articles connexes

CMS13 juin 2026

Yoast SEO désactivé par un update : meta vides sur 80% du blog

Un update WordPress désactive Yoast SEO sans alerte. 1 200 articles perdent leurs meta en silence. Récit, diagnostic technique et fix complet.

Headless15 juin 2026

Contentful + Next.js : title manquant, fallback H1 sur 1 200 pages

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.

Actualités SEO14 juin 2026

Siri + Gemini : impact concret sur la visibilité SEO

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.

Framework13 juin 2026

TanStack Router SSR : le title vient du layout, pas de la page

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.

Framework12 juin 2026

Astro View Transitions : meta head figées après navigation

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.

Actualités SEO12 juin 2026

AI Overviews : les données de clics révèlent un comportement inattendu

Les utilisateurs quotidiens d'AI Overviews cliquent 3,5x plus sur les sources. Analyse technique des opportunités d'optimisation pour les sites à fort volume.