[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$f5CPbZwhhi17HCwHsXoWzrB8WQA_B4pWjmsw5Ny1AsEU":3,"$f7FVz3LenMbu_d-0NVQHK12d7e0GGSZPb5wvQVvV1i04":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},"69fc6352aa6b273b0ce86bdd","google-updates-links-within-ai-overviews-ai-mode",0,"Equipe Seogard","Un e-commerce mode de 22 000 pages produit perd 14% de son trafic organique en trois semaines. Pas de pénalité, pas de core update. Le coupable : Google a modifié la façon dont les liens apparaissent dans AI Overviews, et les pages qui récoltaient des clics via ces citations inline ne sont plus exposées de la même manière. Ce scénario n'est pas hypothétique — c'est le type de régression silencieuse que cette mise à jour provoque.\n\n## Ce que Google a réellement changé dans AI Overviews\n\nGoogle annonce vouloir rendre plus facile la connexion avec des \"authentic voices\" et l'exploration d'\"useful information across the web\". Derrière cette communication corporate, les changements techniques sont précis et mesurables.\n\n### Liens inline vs liens latéraux : le shift structurel\n\nJusqu'à cette mise à jour, AI Overviews affichait les liens sources de deux manières principales : des liens inline intégrés au texte généré (similaires à des citations académiques), et un panneau latéral regroupant les sources. Google restructure ce système en trois axes :\n\n1. **Les liens inline deviennent plus sélectifs.** Le nombre moyen de sources citées dans le corps du texte passe d'environ 6-8 à 3-5 par réponse, d'après les observations terrain post-déploiement.\n2. **Un nouveau format \"Explore\" apparaît sous la réponse.** Il agrège des liens vers des contenus complémentaires, avec des thumbnails et des extraits plus riches.\n3. **AI Mode adopte un système de citation en notes de bas de page numérotées**, plus proche de ce que fait Perplexity, avec un panneau déroulant pour accéder aux sources.\n\n### Impact sur le modèle de clics\n\nLa conséquence directe : la surface de clic change. Les liens inline, positionnés dans le flux de lecture, généraient un CTR estimé entre 1,5% et 4% selon la position dans le texte. Les liens dans un panneau \"Explore\" en bas de réponse se comportent davantage comme des résultats organiques classiques sous le fold — avec un CTR attendu nettement inférieur sur les positions basses.\n\nPour comprendre comment le CTR des AI Overviews évoluait déjà avant cette mise à jour, [l'analyse des premiers signes de recovery du CTR](/blog/google-ai-overviews-ctr-shows-early-signs-of-recovery-study) donne un baseline utile.\n\n## Anatomie technique d'une citation AI Overview post-update\n\nPour adapter votre stratégie, vous devez comprendre comment Google sélectionne et formate les sources dans le nouveau système. Analysons le markup que Google génère côté client.\n\n### Structure HTML des citations\n\nEn inspectant le DOM d'une AI Overview via Chrome DevTools (onglet Elements, cherchez le conteneur `div[data-sgrd]`), la structure des citations post-update ressemble à ceci :\n\n```html\n\u003C!-- Citation inline dans le corps de la réponse AI -->\n\u003Cdiv class=\"ai-overview-body\">\n  \u003Cp>\n    Les frameworks JavaScript modernes nécessitent un rendu côté serveur\n    pour garantir l'indexabilité.\n    \u003Ca class=\"citation-link\" \n       href=\"https://votresite.fr/guide-ssr-nextjs\" \n       data-cite-index=\"1\"\n       data-ved=\"2ahUKEwj...\"\n       ping=\"/url?sa=t&source=ai-overview&url=...\">\n      \u003Csup>[1]\u003C/sup>\n    \u003C/a>\n  \u003C/p>\n\u003C/div>\n\n\u003C!-- Nouveau bloc \"Explore\" sous la réponse -->\n\u003Cdiv class=\"explore-sources-container\">\n  \u003Ch3>Explore\u003C/h3>\n  \u003Cdiv class=\"source-card\">\n    \u003Cimg src=\"favicon-or-thumbnail.webp\" alt=\"\" loading=\"lazy\" />\n    \u003Ca href=\"https://votresite.fr/guide-ssr-nextjs\"\n       data-ved=\"2ahUKEwj...\"\n       class=\"explore-link\">\n      \u003Cspan class=\"source-title\">Guide SSR Next.js : configuration complète\u003C/span>\n      \u003Cspan class=\"source-domain\">votresite.fr\u003C/span>\n    \u003C/a>\n    \u003Cp class=\"source-snippet\">Comment configurer le rendu serveur avec Next.js \n    pour optimiser le crawl et l'indexation...\u003C/p>\n  \u003C/div>\n\u003C/div>\n```\n\nDeux éléments notables. Le paramètre `ping` dans les liens inline permet à Google de tracker les clics séparément des clics organiques classiques — ce qui signifie que Search Console pourrait, à terme, segmenter ces données (ce n'est pas encore le cas au moment de la publication). Et le bloc \"Explore\" utilise un `loading=\"lazy\"` sur les images, confirmant qu'il est traité comme du contenu secondaire par le navigateur.\n\n### Ce que ça implique pour le structured data\n\nLe système de citation AI Overview ne repose pas sur vos balises `schema.org` pour construire les cards du bloc Explore. Il extrait le titre depuis la balise `\u003Ctitle>`, le snippet depuis le contenu indexé, et le favicon depuis le manifest ou le `\u003Clink rel=\"icon\">`. Mais un structured data bien implémenté influence le *choix* de la page comme source.\n\n```html\n\u003C!-- Structured data qui augmente les chances d'être sélectionné comme source -->\n\u003Cscript type=\"application/ld+json\">\n{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"TechArticle\",\n  \"headline\": \"Guide SSR Next.js : configuration et optimisation crawl\",\n  \"author\": {\n    \"@type\": \"Person\",\n    \"name\": \"Marie Dupont\",\n    \"url\": \"https://votresite.fr/equipe/marie-dupont\",\n    \"jobTitle\": \"Lead Developer\",\n    \"sameAs\": [\n      \"https://github.com/mariedupont\",\n      \"https://linkedin.com/in/mariedupont\"\n    ]\n  },\n  \"publisher\": {\n    \"@type\": \"Organization\",\n    \"name\": \"VotreSite\",\n    \"url\": \"https://votresite.fr\"\n  },\n  \"datePublished\": \"2026-03-15\",\n  \"dateModified\": \"2026-05-01\",\n  \"about\": {\n    \"@type\": \"Thing\",\n    \"name\": \"Server-Side Rendering\"\n  }\n}\n\u003C/script>\n```\n\nL'attribut `sameAs` sur l'auteur n'est pas anodin. Quand Google parle de connecter les utilisateurs avec des \"authentic voices\", le signal d'autorité de l'auteur entre en jeu. Le système de citation AI Overview semble favoriser les pages dont l'auteur a une empreinte vérifiable sur le web — profils GitHub, LinkedIn, contributions Stack Overflow. C'est [un signal déjà identifié dans les analyses de visibilité AI](/blog/4-signals-that-now-define-visibility-in-ai-search).\n\n## Impact concret : scénario d'un site e-commerce de 15 000 pages\n\nPrenons MaisonDeco.fr, un e-commerce fictif mais réaliste : 15 200 pages produit, 340 pages catégorie, 180 articles de blog, secteur ameublement/décoration. Avant la mise à jour, le site captait environ 2 800 visites/mois via des citations AI Overview, principalement sur des requêtes informationnelles liées à la décoration (\"comment choisir un canapé convertible\", \"quelle couleur de peinture pour un salon nord\").\n\n### Avant la mise à jour\n\n- 45 pages du blog citées régulièrement dans AI Overviews\n- Position moyenne des liens inline : 2,3 sur ~7 liens affichés\n- CTR estimé depuis AI Overview : 2,8%\n- Volume mensuel de clics AI Overview : ~2 800\n\n### Après la mise à jour\n\n- 28 pages du blog restent citées (réduction de 38%)\n- Les 17 pages perdues basculent dans le bloc \"Explore\" ou disparaissent\n- CTR des liens inline restants : 3,1% (légère hausse — moins de liens = plus de clics par lien)\n- CTR du bloc \"Explore\" : ~0,9%\n- Volume mensuel estimé post-update : ~1 950\n\nPerte nette : environ 850 visites/mois, soit -30%. Pas catastrophique en absolu, mais sur un site où ces visites alimentaient le haut de funnel (articles de blog → pages catégorie → conversion), l'impact sur le chiffre d'affaires est réel.\n\n### Le piège de la non-détection\n\nLe problème majeur : cette perte ne se voit pas dans Search Console. Les clics AI Overview sont agrégés avec les clics organiques classiques dans les rapports actuels. Vous voyez une baisse globale sans pouvoir l'attribuer. La seule façon de la détecter est de croiser vos données Analytics avec les pages connues pour apparaître dans AI Overviews — un travail de monitoring que des outils comme Seogard automatisent en trackant les apparitions et disparitions de vos pages dans les réponses génératives.\n\nPour approfondir la méthode de benchmarking, [cet article sur le benchmarking de performance en AI search](/blog/ai-search-success-how-to-benchmark-website-performance-in-your-industry-via-sejournal-debugbear) détaille les métriques à suivre.\n\n## Adapter votre stratégie technique de citation\n\nLa question n'est plus \"comment apparaître dans AI Overviews\" mais \"comment rester dans les liens inline plutôt que d'être relégué dans le bloc Explore\".\n\n### Critères de sélection inline vs Explore\n\nD'après l'analyse des patterns post-update, les liens inline semblent privilégier :\n\n- **La spécificité de la réponse.** Les pages qui répondent directement et de manière exhaustive à une sous-question spécifique du query sont favorisées en inline. Les pages généralistes basculent vers Explore.\n- **La fraîcheur.** Les pages mises à jour dans les 90 derniers jours ont un taux de citation inline plus élevé.\n- **L'autorité topique.** Les sites avec un cluster de contenu cohérent sur un sujet donné sont favorisés par rapport aux sites qui couvrent le sujet de manière isolée.\n\nCe dernier point rejoint directement [l'analyse de pourquoi le contenu seul ne suffit plus dans l'AI search](/blog/why-great-content-is-no-longer-enough-what-beats-it-in-ai-search-via-sejournal-taylordanrw) — la structure sémantique du site compte autant que le contenu individuel.\n\n### Optimisation technique pour les citations inline\n\nVoici une configuration serveur pour maximiser les signaux de fraîcheur et d'accessibilité qui influencent la sélection :\n\n```nginx\n# Configuration Nginx pour optimiser les signaux de citation AI\nserver {\n    listen 443 ssl http2;\n    server_name maisondeco.fr;\n\n    # Headers de fraîcheur - signaux pour le crawl AI\n    location /blog/ {\n        # Cache court pour que Googlebot voie les mises à jour rapidement\n        add_header Cache-Control \"public, max-age=3600, s-maxage=86400\";\n        \n        # Last-Modified dynamique basé sur la date de modif réelle du contenu\n        # (ne pas laisser le serveur mettre la date du build)\n        add_header Last-Modified $upstream_http_last_modified;\n        \n        # Permettre le crawl sans restriction de rate\n        # pour les bots AI identifiés\n        limit_req_zone $binary_remote_addr zone=general:10m rate=10r/s;\n        limit_req_zone $binary_remote_addr zone=bots:10m rate=50r/s;\n        \n        set $limit_zone \"general\";\n        if ($http_user_agent ~* \"(Googlebot|Google-Extended|Applebot)\") {\n            set $limit_zone \"bots\";\n        }\n    }\n\n    # S'assurer que les pages catégorie sont accessibles\n    # pour le contexte topique\n    location /categorie/ {\n        add_header Cache-Control \"public, max-age=1800\";\n        \n        # Liens canoniques propres - pas de paramètres de tracking\n        # dans les URLs servies aux bots\n        if ($args ~* \"utm_|fbclid|gclid\") {\n            rewrite ^(.*)$ $1? permanent;\n        }\n    }\n}\n```\n\nLa gestion propre des paramètres de tracking dans les URLs est critique dans ce contexte. Si vos liens internes contiennent des UTM, vous fragmentez votre autorité de page et vous compliquez le travail de Google pour identifier votre contenu canonical — ce qui peut vous coûter une citation inline. [L'article sur l'impact des paramètres de tracking dans les liens internes](/blog/why-tracking-parameters-in-internal-links-hurt-your-seo-and-how-to-fix-them) détaille ce problème en profondeur.\n\n## Auditer votre exposition actuelle dans AI Overviews\n\nAvant d'optimiser, vous devez savoir où vous en êtes. Voici une méthodologie d'audit en trois étapes.\n\n### Étape 1 : identifier vos pages citées\n\nIl n'existe pas d'API Google officielle pour extraire les citations AI Overview. La méthode la plus fiable reste le scraping contrôlé combiné à la vérification manuelle. Avec Screaming Frog en mode liste, vous pouvez vérifier le statut de vos pages candidates :\n\n```bash\n# Extraire les URLs de votre blog depuis le sitemap\ncurl -s https://maisondeco.fr/sitemap-blog.xml | \\\n  grep -oP '\u003Cloc>\\K[^\u003C]+' > blog_urls.txt\n\n# Vérifier les réponses serveur en masse (détecter les 404, redirects)\ncat blog_urls.txt | xargs -I {} -P 10 \\\n  curl -s -o /dev/null -w \"%{http_code} %{url_effective} %{redirect_url}\\n\" \\\n  -H \"User-Agent: Mozilla/5.0 (compatible; Googlebot/2.1)\" {}\n\n# Identifier les pages avec des problèmes de canonical\ncat blog_urls.txt | xargs -I {} -P 5 \\\n  curl -s {} | grep -oP '\u003Clink rel=\"canonical\" href=\"\\K[^\"]+' | \\\n  paste - blog_urls.txt | awk '$1 != $2 {print \"MISMATCH: \" $2 \" -> \" $1}'\n```\n\n### Étape 2 : vérifier la cohérence des signaux auteur\n\nPour chaque page que vous ciblez comme source AI Overview, validez que le structured data auteur est complet et cohérent :\n\n```javascript\n// Script Node.js pour auditer les signaux auteur sur vos pages\nconst cheerio = require('cheerio');\n\nasync function auditAuthorSignals(url) {\n  const response = await fetch(url);\n  const html = await response.text();\n  const $ = cheerio.load(html);\n  \n  const issues = [];\n  \n  // Vérifier la présence du structured data\n  const jsonLd = $('script[type=\"application/ld+json\"]');\n  if (jsonLd.length === 0) {\n    issues.push('CRITICAL: Aucun structured data JSON-LD trouvé');\n    return { url, issues };\n  }\n  \n  let schemas;\n  try {\n    schemas = jsonLd.map((_, el) => JSON.parse($(el).html())).get();\n  } catch (e) {\n    issues.push('CRITICAL: JSON-LD invalide — parsing échoué');\n    return { url, issues };\n  }\n  \n  // Chercher l'auteur dans tous les schemas\n  const articleSchema = schemas.find(s => \n    ['Article', 'TechArticle', 'BlogPosting', 'NewsArticle']\n      .includes(s['@type'])\n  );\n  \n  if (!articleSchema) {\n    issues.push('WARNING: Pas de schema Article/BlogPosting trouvé');\n  } else {\n    if (!articleSchema.author) {\n      issues.push('CRITICAL: Pas d\\'auteur dans le schema Article');\n    } else {\n      const author = articleSchema.author;\n      if (!author.name) issues.push('CRITICAL: Auteur sans nom');\n      if (!author.url) issues.push('WARNING: Auteur sans URL de profil');\n      if (!author.sameAs || author.sameAs.length === 0) {\n        issues.push('WARNING: Auteur sans sameAs — signal d\\'authenticité faible');\n      }\n    }\n    \n    if (!articleSchema.dateModified) {\n      issues.push('WARNING: Pas de dateModified — signal de fraîcheur absent');\n    } else {\n      const modified = new Date(articleSchema.dateModified);\n      const daysSinceModified = (Date.now() - modified) / (1000 * 60 * 60 * 24);\n      if (daysSinceModified > 90) {\n        issues.push(`INFO: Dernière modification il y a ${Math.round(daysSinceModified)} jours — risque de relégation vers Explore`);\n      }\n    }\n  }\n  \n  // Vérifier la cohérence titre / H1\n  const title = $('title').text().trim();\n  const h1 = $('h1').first().text().trim();\n  if (title && h1 && !title.includes(h1.substring(0, 30))) {\n    issues.push('WARNING: Title et H1 divergent significativement — peut fragmenter le signal topique');\n  }\n  \n  return { url, issues, score: issues.filter(i => i.startsWith('CRITICAL')).length === 0 ? 'PASS' : 'FAIL' };\n}\n\n// Usage\nconst urls = require('fs').readFileSync('blog_urls.txt', 'utf8').split('\\n').filter(Boolean);\nPromise.all(urls.map(auditAuthorSignals)).then(results => {\n  results.filter(r => r.issues.length > 0).forEach(r => {\n    console.log(`\\n${r.score} ${r.url}`);\n    r.issues.forEach(i => console.log(`  ${i}`));\n  });\n});\n```\n\n### Étape 3 : monitoring continu des régressions\n\nLe vrai risque n'est pas la perte initiale — c'est la dégradation progressive que personne ne surveille. Une page qui perd son structured data lors d'un déploiement, un auteur dont le profil LinkedIn change d'URL, une date `dateModified` qui ne se met plus à jour après un refactoring du CMS. Ces micro-régressions s'accumulent et érodent votre éligibilité aux citations inline sans jamais déclencher d'alerte dans vos outils classiques. Un outil de monitoring comme Seogard détecte ces régressions techniques dès qu'elles se produisent — meta disparues, structured data cassé, canonical incohérent — avant qu'elles n'impactent votre visibilité dans les réponses génératives.\n\n## AI Mode : un écosystème de liens séparé\n\nAI Mode (accessible via labs.google.com/search ou directement dans Chrome) fonctionne différemment d'AI Overviews. Il ne remplace pas un résultat de recherche — il *est* l'interface de recherche. Les implications pour les liens sont structurellement différentes.\n\n### Différences techniques clés\n\nDans AI Mode, la conversation est multi-turn. L'utilisateur peut poser des questions de suivi, et les sources citées évoluent à chaque tour de conversation. Cela signifie que votre page peut apparaître comme source au tour 3 d'une conversation sans jamais apparaître au tour 1 — un scénario impossible à tracker avec les outils de rank tracking traditionnels.\n\nLe format de citation dans AI Mode utilise des notes de bas de page numérotées plutôt que des liens inline contextuels. Ce choix n'est pas anodin : il réduit la friction visuelle dans le texte (meilleure expérience de lecture) mais diminue aussi la saillance du lien. L'utilisateur doit activement cliquer sur le numéro pour voir la source, puis décider de visiter le site.\n\n### Implications pour le crawl budget\n\nAI Mode et AI Overviews augmentent la fréquence de crawl des pages sources. Si Google cite régulièrement votre guide SSR dans des réponses AI, il va le recrawler plus souvent pour vérifier que le contenu est toujours pertinent et à jour. Sur un site de 15 000 pages avec un crawl budget limité, ces re-crawls répétés des pages \"AI-cited\" peuvent cannibaliser le crawl de vos pages produit.\n\nSurveillez vos logs serveur pour détecter ce pattern :\n\n```bash\n# Analyser la fréquence de crawl par section du site\n# sur les 7 derniers jours\nzcat /var/log/nginx/access.log.*.gz | \\\n  cat - /var/log/nginx/access.log | \\\n  grep \"Googlebot\" | \\\n  grep -oP 'GET /\\K[^/ ?]+' | \\\n  sort | uniq -c | sort -rn | head -20\n\n# Comparer le ratio crawl blog vs crawl produit\nzcat /var/log/nginx/access.log.*.gz | \\\n  cat - /var/log/nginx/access.log | \\\n  grep \"Googlebot\" | \\\n  awk '{\n    if ($7 ~ /^\\/blog\\//) blog++;\n    else if ($7 ~ /^\\/produit\\//) produit++;\n    total++\n  }\n  END {\n    printf \"Blog: %d (%.1f%%)\\n\", blog, blog/total*100;\n    printf \"Produit: %d (%.1f%%)\\n\", produit, produit/total*100;\n    printf \"Total Googlebot hits: %d\\n\", total\n  }'\n```\n\nSi le ratio de crawl de votre blog dépasse 40% alors que vos pages produit représentent 95% de votre catalogue, vous avez un déséquilibre à corriger. La gestion du robots.txt et des directives de crawl [évolue parallèlement côté Google](/blog/google-s-robots-txt-docs-expand-deep-links-get-rules-eu-steps-in-seo-pulse-via-sejournal-mattgsouthern), et la coordination entre les deux devient importante.\n\n## Ce que cette mise à jour révèle sur la direction de Google\n\nGoogle ne réorganise pas ses liens AI Overview par souci esthétique. Cette mise à jour traduit trois orientations stratégiques :\n\n**Première orientation : la concentration des sources.** Moins de liens inline signifie que Google assume davantage la responsabilité de la réponse. Les sources deviennent des \"preuves\" plutôt que des \"alternatives\". Pour être sélectionné, votre contenu doit être la meilleure preuve disponible — pas simplement un résultat pertinent parmi d'autres.\n\n**Deuxième orientation : la séparation information/exploration.** Le bloc \"Explore\" crée une distinction nette entre \"voici la réponse\" (liens inline) et \"voici d'autres perspectives\" (Explore). C'est le même pattern que les \"People Also Ask\" — un espace de découverte à faible CTR mais à forte surface d'impression. [L'analyse de comment votre site est perçu comme source plutôt que mégaphone](/blog/your-website-is-a-source-not-a-megaphone-via-sejournal-slobodanmanic) prend ici tout son sens.\n\n**Troisième orientation : l'alignement avec l'écosystème AI.** En adoptant un format de citation en notes de bas de page dans AI Mode, Google s'aligne sur les conventions émergentes de Perplexity, Claude, et les autres interfaces conversationnelles. Cela suggère une convergence des formats — et donc une possibilité de stratégie d'optimisation cross-plateforme. [Les données sur l'activité de crawl d'OpenAI](/blog/openai-crawl-activity-tripled-since-gpt-5-data-shows-via-sejournal-mattgsouthern) confirment que les bots AI sont de plus en plus actifs, et que l'enjeu est désormais multi-moteur.\n\n## Actions à prioriser cette semaine\n\nNe traitez pas cette mise à jour comme une news à lire et oublier. Voici les actions concrètes, par ordre de priorité :\n\n**Auditer vos top 50 pages en trafic organique** pour la complétude du structured data auteur, la fraîcheur de la date `dateModified`, et la cohérence des canonicals. Le script Node.js ci-dessus est un point de départ.\n\n**Analyser vos logs serveur** pour détecter un changement de pattern de crawl Googlebot post-update. Si vos pages blog sont sur-crawlées au détriment de vos pages transactionnelles, ajustez via le `crawl-delay` ou en optimisant le maillage interne.\n\n**Mettre à jour vos contenus les plus cités** avec des données fraîches. La fenêtre des 90 jours de `dateModified` est un signal exploitable immédiatement.\n\n**Implémenter un monitoring des disparitions de structured data** sur chaque déploiement. Une régression de schema auteur passée inaperçue pendant deux semaines peut vous coûter une position inline dans AI Overviews — une perte silencieuse que seul un monitoring continu peut prévenir.\n\nLe modèle de citation AI évolue vite, et les sites qui ne monitorent pas ces changements en temps réel découvriront leur impact avec trois mois de retard — dans leurs courbes de trafic.","https://seogard.io/blog/google-updates-links-within-ai-overviews-ai-mode","Actualités SEO","2026-05-07T10:02:58.785Z","2026-05-07","Google restructure les liens dans AI Overviews et AI Mode. Analyse technique des impacts sur le trafic, le crawl et les stratégies de citation SEO.","\u003Cp>Un e-commerce mode de 22 000 pages produit perd 14% de son trafic organique en trois semaines. Pas de pénalité, pas de core update. Le coupable : Google a modifié la façon dont les liens apparaissent dans AI Overviews, et les pages qui récoltaient des clics via ces citations inline ne sont plus exposées de la même manière. Ce scénario n'est pas hypothétique — c'est le type de régression silencieuse que cette mise à jour provoque.\u003C/p>\n\u003Ch2>Ce que Google a réellement changé dans AI Overviews\u003C/h2>\n\u003Cp>Google annonce vouloir rendre plus facile la connexion avec des \"authentic voices\" et l'exploration d'\"useful information across the web\". Derrière cette communication corporate, les changements techniques sont précis et mesurables.\u003C/p>\n\u003Ch3>Liens inline vs liens latéraux : le shift structurel\u003C/h3>\n\u003Cp>Jusqu'à cette mise à jour, AI Overviews affichait les liens sources de deux manières principales : des liens inline intégrés au texte généré (similaires à des citations académiques), et un panneau latéral regroupant les sources. Google restructure ce système en trois axes :\u003C/p>\n\u003Col>\n\u003Cli>\u003Cstrong>Les liens inline deviennent plus sélectifs.\u003C/strong> Le nombre moyen de sources citées dans le corps du texte passe d'environ 6-8 à 3-5 par réponse, d'après les observations terrain post-déploiement.\u003C/li>\n\u003Cli>\u003Cstrong>Un nouveau format \"Explore\" apparaît sous la réponse.\u003C/strong> Il agrège des liens vers des contenus complémentaires, avec des thumbnails et des extraits plus riches.\u003C/li>\n\u003Cli>\u003Cstrong>AI Mode adopte un système de citation en notes de bas de page numérotées\u003C/strong>, plus proche de ce que fait Perplexity, avec un panneau déroulant pour accéder aux sources.\u003C/li>\n\u003C/ol>\n\u003Ch3>Impact sur le modèle de clics\u003C/h3>\n\u003Cp>La conséquence directe : la surface de clic change. Les liens inline, positionnés dans le flux de lecture, généraient un CTR estimé entre 1,5% et 4% selon la position dans le texte. Les liens dans un panneau \"Explore\" en bas de réponse se comportent davantage comme des résultats organiques classiques sous le fold — avec un CTR attendu nettement inférieur sur les positions basses.\u003C/p>\n\u003Cp>Pour comprendre comment le CTR des AI Overviews évoluait déjà avant cette mise à jour, \u003Ca href=\"/blog/google-ai-overviews-ctr-shows-early-signs-of-recovery-study\">l'analyse des premiers signes de recovery du CTR\u003C/a> donne un baseline utile.\u003C/p>\n\u003Ch2>Anatomie technique d'une citation AI Overview post-update\u003C/h2>\n\u003Cp>Pour adapter votre stratégie, vous devez comprendre comment Google sélectionne et formate les sources dans le nouveau système. Analysons le markup que Google génère côté client.\u003C/p>\n\u003Ch3>Structure HTML des citations\u003C/h3>\n\u003Cp>En inspectant le DOM d'une AI Overview via Chrome DevTools (onglet Elements, cherchez le conteneur \u003Ccode>div[data-sgrd]\u003C/code>), la structure des citations post-update ressemble à ceci :\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;!-- Citation inline dans le corps de la réponse AI -->\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\">\"ai-overview-body\"\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\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    Les frameworks JavaScript modernes nécessitent un rendu côté serveur\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    pour garantir l'indexabilité.\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">a\u003C/span>\u003Cspan style=\"color:#B392F0\"> class\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"citation-link\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> \u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">       href\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"https://votresite.fr/guide-ssr-nextjs\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> \u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">       data-cite-index\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"1\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">       data-ved\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"2ahUKEwj...\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">       ping\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"/url?sa=t&#x26;source=ai-overview&#x26;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\">sup\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>[1]&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">sup\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\">a\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\">>\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\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">&#x3C;!-- Nouveau bloc \"Explore\" sous la réponse -->\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\">\"explore-sources-container\"\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\">h3\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>Explore&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">h3\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\">\"source-card\"\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\">img\u003C/span>\u003Cspan style=\"color:#B392F0\"> src\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"favicon-or-thumbnail.webp\"\u003C/span>\u003Cspan style=\"color:#B392F0\"> alt\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"\"\u003C/span>\u003Cspan style=\"color:#B392F0\"> loading\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"lazy\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> />\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">a\u003C/span>\u003Cspan style=\"color:#B392F0\"> href\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"https://votresite.fr/guide-ssr-nextjs\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">       data-ved\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"2ahUKEwj...\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">       class\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"explore-link\"\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\">span\u003C/span>\u003Cspan style=\"color:#B392F0\"> class\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"source-title\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>Guide SSR Next.js : configuration complète&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">span\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\">span\u003C/span>\u003Cspan style=\"color:#B392F0\"> class\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"source-domain\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>votresite.fr&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">span\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\">a\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:#B392F0\"> class\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"source-snippet\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>Comment configurer le rendu serveur avec Next.js \u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    pour optimiser le crawl et l'indexation...&#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:#E1E4E8\">>\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>Deux éléments notables. Le paramètre \u003Ccode>ping\u003C/code> dans les liens inline permet à Google de tracker les clics séparément des clics organiques classiques — ce qui signifie que Search Console pourrait, à terme, segmenter ces données (ce n'est pas encore le cas au moment de la publication). Et le bloc \"Explore\" utilise un \u003Ccode>loading=\"lazy\"\u003C/code> sur les images, confirmant qu'il est traité comme du contenu secondaire par le navigateur.\u003C/p>\n\u003Ch3>Ce que ça implique pour le structured data\u003C/h3>\n\u003Cp>Le système de citation AI Overview ne repose pas sur vos balises \u003Ccode>schema.org\u003C/code> pour construire les cards du bloc Explore. Il extrait le titre depuis la balise \u003Ccode>&#x3C;title>\u003C/code>, le snippet depuis le contenu indexé, et le favicon depuis le manifest ou le \u003Ccode>&#x3C;link rel=\"icon\">\u003C/code>. Mais un structured data bien implémenté influence le \u003Cem>choix\u003C/em> de la page comme source.\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;!-- Structured data qui augmente les chances d'être sélectionné comme source -->\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">&#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">script\u003C/span>\u003Cspan style=\"color:#B392F0\"> type\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"application/ld+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:#E1E4E8\">  \"@context\": \"https://schema.org\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  \"@type\": \"TechArticle\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  \"headline\": \"Guide SSR Next.js : configuration et optimisation crawl\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  \"author\": {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    \"@type\": \"Person\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    \"name\": \"Marie Dupont\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    \"url\": \"https://votresite.fr/equipe/marie-dupont\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    \"jobTitle\": \"Lead Developer\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    \"sameAs\": [\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      \"https://github.com/mariedupont\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      \"https://linkedin.com/in/mariedupont\"\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\">  \"publisher\": {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    \"@type\": \"Organization\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    \"name\": \"VotreSite\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    \"url\": \"https://votresite.fr\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  },\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  \"datePublished\": \"2026-03-15\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  \"dateModified\": \"2026-05-01\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  \"about\": {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    \"@type\": \"Thing\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    \"name\": \"Server-Side Rendering\"\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\">&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">script\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>L'attribut \u003Ccode>sameAs\u003C/code> sur l'auteur n'est pas anodin. Quand Google parle de connecter les utilisateurs avec des \"authentic voices\", le signal d'autorité de l'auteur entre en jeu. Le système de citation AI Overview semble favoriser les pages dont l'auteur a une empreinte vérifiable sur le web — profils GitHub, LinkedIn, contributions Stack Overflow. C'est \u003Ca href=\"/blog/4-signals-that-now-define-visibility-in-ai-search\">un signal déjà identifié dans les analyses de visibilité AI\u003C/a>.\u003C/p>\n\u003Ch2>Impact concret : scénario d'un site e-commerce de 15 000 pages\u003C/h2>\n\u003Cp>Prenons MaisonDeco.fr, un e-commerce fictif mais réaliste : 15 200 pages produit, 340 pages catégorie, 180 articles de blog, secteur ameublement/décoration. Avant la mise à jour, le site captait environ 2 800 visites/mois via des citations AI Overview, principalement sur des requêtes informationnelles liées à la décoration (\"comment choisir un canapé convertible\", \"quelle couleur de peinture pour un salon nord\").\u003C/p>\n\u003Ch3>Avant la mise à jour\u003C/h3>\n\u003Cul>\n\u003Cli>45 pages du blog citées régulièrement dans AI Overviews\u003C/li>\n\u003Cli>Position moyenne des liens inline : 2,3 sur ~7 liens affichés\u003C/li>\n\u003Cli>CTR estimé depuis AI Overview : 2,8%\u003C/li>\n\u003Cli>Volume mensuel de clics AI Overview : ~2 800\u003C/li>\n\u003C/ul>\n\u003Ch3>Après la mise à jour\u003C/h3>\n\u003Cul>\n\u003Cli>28 pages du blog restent citées (réduction de 38%)\u003C/li>\n\u003Cli>Les 17 pages perdues basculent dans le bloc \"Explore\" ou disparaissent\u003C/li>\n\u003Cli>CTR des liens inline restants : 3,1% (légère hausse — moins de liens = plus de clics par lien)\u003C/li>\n\u003Cli>CTR du bloc \"Explore\" : ~0,9%\u003C/li>\n\u003Cli>Volume mensuel estimé post-update : ~1 950\u003C/li>\n\u003C/ul>\n\u003Cp>Perte nette : environ 850 visites/mois, soit -30%. Pas catastrophique en absolu, mais sur un site où ces visites alimentaient le haut de funnel (articles de blog → pages catégorie → conversion), l'impact sur le chiffre d'affaires est réel.\u003C/p>\n\u003Ch3>Le piège de la non-détection\u003C/h3>\n\u003Cp>Le problème majeur : cette perte ne se voit pas dans Search Console. Les clics AI Overview sont agrégés avec les clics organiques classiques dans les rapports actuels. Vous voyez une baisse globale sans pouvoir l'attribuer. La seule façon de la détecter est de croiser vos données Analytics avec les pages connues pour apparaître dans AI Overviews — un travail de monitoring que des outils comme Seogard automatisent en trackant les apparitions et disparitions de vos pages dans les réponses génératives.\u003C/p>\n\u003Cp>Pour approfondir la méthode de benchmarking, \u003Ca href=\"/blog/ai-search-success-how-to-benchmark-website-performance-in-your-industry-via-sejournal-debugbear\">cet article sur le benchmarking de performance en AI search\u003C/a> détaille les métriques à suivre.\u003C/p>\n\u003Ch2>Adapter votre stratégie technique de citation\u003C/h2>\n\u003Cp>La question n'est plus \"comment apparaître dans AI Overviews\" mais \"comment rester dans les liens inline plutôt que d'être relégué dans le bloc Explore\".\u003C/p>\n\u003Ch3>Critères de sélection inline vs Explore\u003C/h3>\n\u003Cp>D'après l'analyse des patterns post-update, les liens inline semblent privilégier :\u003C/p>\n\u003Cul>\n\u003Cli>\u003Cstrong>La spécificité de la réponse.\u003C/strong> Les pages qui répondent directement et de manière exhaustive à une sous-question spécifique du query sont favorisées en inline. Les pages généralistes basculent vers Explore.\u003C/li>\n\u003Cli>\u003Cstrong>La fraîcheur.\u003C/strong> Les pages mises à jour dans les 90 derniers jours ont un taux de citation inline plus élevé.\u003C/li>\n\u003Cli>\u003Cstrong>L'autorité topique.\u003C/strong> Les sites avec un cluster de contenu cohérent sur un sujet donné sont favorisés par rapport aux sites qui couvrent le sujet de manière isolée.\u003C/li>\n\u003C/ul>\n\u003Cp>Ce dernier point rejoint directement \u003Ca href=\"/blog/why-great-content-is-no-longer-enough-what-beats-it-in-ai-search-via-sejournal-taylordanrw\">l'analyse de pourquoi le contenu seul ne suffit plus dans l'AI search\u003C/a> — la structure sémantique du site compte autant que le contenu individuel.\u003C/p>\n\u003Ch3>Optimisation technique pour les citations inline\u003C/h3>\n\u003Cp>Voici une configuration serveur pour maximiser les signaux de fraîcheur et d'accessibilité qui influencent la sélection :\u003C/p>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Configuration Nginx pour optimiser les signaux de citation AI\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">server\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    listen \u003C/span>\u003Cspan style=\"color:#79B8FF\">443\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> ssl http2;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    server_name \u003C/span>\u003Cspan style=\"color:#E1E4E8\">maisondeco.fr;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">    # Headers de fraîcheur - signaux pour le crawl AI\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    location\u003C/span>\u003Cspan style=\"color:#B392F0\"> /blog/ \u003C/span>\u003Cspan style=\"color:#E1E4E8\">{\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">        # Cache court pour que Googlebot voie les mises à jour rapidement\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">        add_header \u003C/span>\u003Cspan style=\"color:#E1E4E8\">Cache-Control \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"public, max-age=3600, s-maxage=86400\"\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\">        # Last-Modified dynamique basé sur la date de modif réelle du contenu\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">        # (ne pas laisser le serveur mettre la date du build)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">        add_header \u003C/span>\u003Cspan style=\"color:#E1E4E8\">Last-Modified $upstream_http_last_modified;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        \u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">        # Permettre le crawl sans restriction de rate\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">        # pour les bots AI identifiés\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">        limit_req_zone \u003C/span>\u003Cspan style=\"color:#E1E4E8\">$binary_remote_addr zone=general:10m rate=10r/s;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">        limit_req_zone \u003C/span>\u003Cspan style=\"color:#E1E4E8\">$binary_remote_addr zone=bots:10m rate=50r/s;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        \u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">        set \u003C/span>\u003Cspan style=\"color:#E1E4E8\">$limit_zone \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"general\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">        if\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> ($http_user_agent \u003C/span>\u003Cspan style=\"color:#F97583\">~* \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"(Googlebot|Google-Extended|Applebot)\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">) {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">            set \u003C/span>\u003Cspan style=\"color:#E1E4E8\">$limit_zone \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"bots\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        }\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    }\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">    # S'assurer que les pages catégorie sont accessibles\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">    # pour le contexte topique\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    location\u003C/span>\u003Cspan style=\"color:#B392F0\"> /categorie/ \u003C/span>\u003Cspan style=\"color:#E1E4E8\">{\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">        add_header \u003C/span>\u003Cspan style=\"color:#E1E4E8\">Cache-Control \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"public, max-age=1800\"\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\">        # Liens canoniques propres - pas de paramètres de tracking\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">        # dans les URLs servies aux bots\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">        if\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> ($args \u003C/span>\u003Cspan style=\"color:#F97583\">~* \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"utm_|fbclid|gclid\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">) {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">            rewrite\u003C/span>\u003Cspan style=\"color:#DBEDFF\"> ^(.*)$\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> $1? \u003C/span>\u003Cspan style=\"color:#F97583\">permanent\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        }\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    }\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">}\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>La gestion propre des paramètres de tracking dans les URLs est critique dans ce contexte. Si vos liens internes contiennent des UTM, vous fragmentez votre autorité de page et vous compliquez le travail de Google pour identifier votre contenu canonical — ce qui peut vous coûter une citation inline. \u003Ca href=\"/blog/why-tracking-parameters-in-internal-links-hurt-your-seo-and-how-to-fix-them\">L'article sur l'impact des paramètres de tracking dans les liens internes\u003C/a> détaille ce problème en profondeur.\u003C/p>\n\u003Ch2>Auditer votre exposition actuelle dans AI Overviews\u003C/h2>\n\u003Cp>Avant d'optimiser, vous devez savoir où vous en êtes. Voici une méthodologie d'audit en trois étapes.\u003C/p>\n\u003Ch3>Étape 1 : identifier vos pages citées\u003C/h3>\n\u003Cp>Il n'existe pas d'API Google officielle pour extraire les citations AI Overview. La méthode la plus fiable reste le scraping contrôlé combiné à la vérification manuelle. Avec Screaming Frog en mode liste, vous pouvez vérifier le statut de vos pages candidates :\u003C/p>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Extraire les URLs de votre blog depuis le sitemap\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:#9ECBFF\"> https://maisondeco.fr/sitemap-blog.xml\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\"> -oP\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> '&#x3C;loc>\\K[^&#x3C;]+'\u003C/span>\u003Cspan style=\"color:#F97583\"> >\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> blog_urls.txt\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Vérifier les réponses serveur en masse (détecter les 404, redirects)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">cat\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> blog_urls.txt\u003C/span>\u003Cspan style=\"color:#F97583\"> |\u003C/span>\u003Cspan style=\"color:#B392F0\"> xargs\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -I\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> {}\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -P\u003C/span>\u003Cspan style=\"color:#79B8FF\"> 10\u003C/span>\u003Cspan style=\"color:#79B8FF\"> \\\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  curl\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -s\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -o\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> /dev/null\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -w\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"%{http_code} %{url_effective} %{redirect_url}\\n\"\u003C/span>\u003Cspan style=\"color:#79B8FF\"> \\\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">  -H\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"User-Agent: Mozilla/5.0 (compatible; Googlebot/2.1)\"\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> {}\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Identifier les pages avec des problèmes de canonical\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">cat\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> blog_urls.txt\u003C/span>\u003Cspan style=\"color:#F97583\"> |\u003C/span>\u003Cspan style=\"color:#B392F0\"> xargs\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -I\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> {}\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -P\u003C/span>\u003Cspan style=\"color:#79B8FF\"> 5\u003C/span>\u003Cspan style=\"color:#79B8FF\"> \\\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  curl\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -s\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\"> -oP\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> '&#x3C;link rel=\"canonical\" href=\"\\K[^\"]+'\u003C/span>\u003Cspan style=\"color:#F97583\"> |\u003C/span>\u003Cspan style=\"color:#79B8FF\"> \\\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">  paste\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> -\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> blog_urls.txt\u003C/span>\u003Cspan style=\"color:#F97583\"> |\u003C/span>\u003Cspan style=\"color:#B392F0\"> awk\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> '$1 != $2 {print \"MISMATCH: \" $2 \" -> \" $1}'\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Ch3>Étape 2 : vérifier la cohérence des signaux auteur\u003C/h3>\n\u003Cp>Pour chaque page que vous ciblez comme source AI Overview, validez que le structured data auteur est complet et cohérent :\u003C/p>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">// Script Node.js pour auditer les signaux auteur sur vos pages\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">const\u003C/span>\u003Cspan style=\"color:#79B8FF\"> cheerio\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#B392F0\"> require\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'cheerio'\u003C/span>\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\"> auditAuthorSignals\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\">(url);\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">  const\u003C/span>\u003Cspan style=\"color:#79B8FF\"> html\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\">text\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\"> $\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> cheerio.\u003C/span>\u003Cspan style=\"color:#B392F0\">load\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(html);\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\"> issues\u003C/span>\u003Cspan style=\"color:#F97583\"> =\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\">  // Vérifier la présence du structured data\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">  const\u003C/span>\u003Cspan style=\"color:#79B8FF\"> jsonLd\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#B392F0\"> $\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'script[type=\"application/ld+json\"]'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">);\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">  if\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> (jsonLd.\u003C/span>\u003Cspan style=\"color:#79B8FF\">length\u003C/span>\u003Cspan style=\"color:#F97583\"> ===\u003C/span>\u003Cspan style=\"color:#79B8FF\"> 0\u003C/span>\u003Cspan style=\"color:#E1E4E8\">) {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    issues.\u003C/span>\u003Cspan style=\"color:#B392F0\">push\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'CRITICAL: Aucun structured data JSON-LD trouvé'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">);\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    return\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> { url, issues };\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\">  let\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> schemas;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">  try\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    schemas \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> jsonLd.\u003C/span>\u003Cspan style=\"color:#B392F0\">map\u003C/span>\u003Cspan style=\"color:#E1E4E8\">((\u003C/span>\u003Cspan style=\"color:#FFAB70\">_\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#FFAB70\">el\u003C/span>\u003Cspan style=\"color:#E1E4E8\">) \u003C/span>\u003Cspan style=\"color:#F97583\">=>\u003C/span>\u003Cspan style=\"color:#79B8FF\"> JSON\u003C/span>\u003Cspan style=\"color:#E1E4E8\">.\u003C/span>\u003Cspan style=\"color:#B392F0\">parse\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#B392F0\">$\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(el).\u003C/span>\u003Cspan style=\"color:#B392F0\">html\u003C/span>\u003Cspan style=\"color:#E1E4E8\">())).\u003C/span>\u003Cspan style=\"color:#B392F0\">get\u003C/span>\u003Cspan style=\"color:#E1E4E8\">();\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  } \u003C/span>\u003Cspan style=\"color:#F97583\">catch\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> (e) {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    issues.\u003C/span>\u003Cspan style=\"color:#B392F0\">push\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'CRITICAL: JSON-LD invalide — parsing échoué'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">);\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    return\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> { url, issues };\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:#6A737D\">  // Chercher l'auteur dans tous les schemas\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">  const\u003C/span>\u003Cspan style=\"color:#79B8FF\"> articleSchema\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> schemas.\u003C/span>\u003Cspan style=\"color:#B392F0\">find\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#FFAB70\">s\u003C/span>\u003Cspan style=\"color:#F97583\"> =>\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> \u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    [\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'Article'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'TechArticle'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'BlogPosting'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'NewsArticle'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">]\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      .\u003C/span>\u003Cspan style=\"color:#B392F0\">includes\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(s[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'@type'\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:#F97583\">  if\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> (\u003C/span>\u003Cspan style=\"color:#F97583\">!\u003C/span>\u003Cspan style=\"color:#E1E4E8\">articleSchema) {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    issues.\u003C/span>\u003Cspan style=\"color:#B392F0\">push\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'WARNING: Pas de schema Article/BlogPosting trouvé'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">);\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  } \u003C/span>\u003Cspan style=\"color:#F97583\">else\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> {\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:#E1E4E8\">articleSchema.author) {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      issues.\u003C/span>\u003Cspan style=\"color:#B392F0\">push\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'CRITICAL: Pas d\u003C/span>\u003Cspan style=\"color:#79B8FF\">\\'\u003C/span>\u003Cspan style=\"color:#9ECBFF\">auteur dans le schema Article'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">);\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    } \u003C/span>\u003Cspan style=\"color:#F97583\">else\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\"> author\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> articleSchema.author;\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:#E1E4E8\">author.name) issues.\u003C/span>\u003Cspan style=\"color:#B392F0\">push\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'CRITICAL: Auteur sans nom'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">);\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:#E1E4E8\">author.url) issues.\u003C/span>\u003Cspan style=\"color:#B392F0\">push\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'WARNING: Auteur sans URL de profil'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">);\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:#E1E4E8\">author.sameAs \u003C/span>\u003Cspan style=\"color:#F97583\">||\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> author.sameAs.\u003C/span>\u003Cspan style=\"color:#79B8FF\">length\u003C/span>\u003Cspan style=\"color:#F97583\"> ===\u003C/span>\u003Cspan style=\"color:#79B8FF\"> 0\u003C/span>\u003Cspan style=\"color:#E1E4E8\">) {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        issues.\u003C/span>\u003Cspan style=\"color:#B392F0\">push\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'WARNING: Auteur sans sameAs — signal d\u003C/span>\u003Cspan style=\"color:#79B8FF\">\\'\u003C/span>\u003Cspan style=\"color:#9ECBFF\">authenticité faible'\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\">\u003Cspan style=\"color:#F97583\">    if\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> (\u003C/span>\u003Cspan style=\"color:#F97583\">!\u003C/span>\u003Cspan style=\"color:#E1E4E8\">articleSchema.dateModified) {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      issues.\u003C/span>\u003Cspan style=\"color:#B392F0\">push\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'WARNING: Pas de dateModified — signal de fraîcheur absent'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">);\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    } \u003C/span>\u003Cspan style=\"color:#F97583\">else\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\"> modified\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#F97583\"> new\u003C/span>\u003Cspan style=\"color:#B392F0\"> Date\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(articleSchema.dateModified);\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">      const\u003C/span>\u003Cspan style=\"color:#79B8FF\"> daysSinceModified\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> (Date.\u003C/span>\u003Cspan style=\"color:#B392F0\">now\u003C/span>\u003Cspan style=\"color:#E1E4E8\">() \u003C/span>\u003Cspan style=\"color:#F97583\">-\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> modified) \u003C/span>\u003Cspan style=\"color:#F97583\">/\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> (\u003C/span>\u003Cspan style=\"color:#79B8FF\">1000\u003C/span>\u003Cspan style=\"color:#F97583\"> *\u003C/span>\u003Cspan style=\"color:#79B8FF\"> 60\u003C/span>\u003Cspan style=\"color:#F97583\"> *\u003C/span>\u003Cspan style=\"color:#79B8FF\"> 60\u003C/span>\u003Cspan style=\"color:#F97583\"> *\u003C/span>\u003Cspan style=\"color:#79B8FF\"> 24\u003C/span>\u003Cspan style=\"color:#E1E4E8\">);\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">      if\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> (daysSinceModified \u003C/span>\u003Cspan style=\"color:#F97583\">>\u003C/span>\u003Cspan style=\"color:#79B8FF\"> 90\u003C/span>\u003Cspan style=\"color:#E1E4E8\">) {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        issues.\u003C/span>\u003Cspan style=\"color:#B392F0\">push\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">`INFO: Dernière modification il y a ${\u003C/span>\u003Cspan style=\"color:#E1E4E8\">Math\u003C/span>\u003Cspan style=\"color:#9ECBFF\">.\u003C/span>\u003Cspan style=\"color:#B392F0\">round\u003C/span>\u003Cspan style=\"color:#9ECBFF\">(\u003C/span>\u003Cspan style=\"color:#E1E4E8\">daysSinceModified\u003C/span>\u003Cspan style=\"color:#9ECBFF\">)\u003C/span>\u003Cspan style=\"color:#9ECBFF\">} jours — risque de relégation vers Explore`\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\">\u003Cspan style=\"color:#E1E4E8\">  \u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">  // Vérifier la cohérence titre / H1\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">  const\u003C/span>\u003Cspan style=\"color:#79B8FF\"> title\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#B392F0\"> $\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'title'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">).\u003C/span>\u003Cspan style=\"color:#B392F0\">text\u003C/span>\u003Cspan style=\"color:#E1E4E8\">().\u003C/span>\u003Cspan style=\"color:#B392F0\">trim\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\"> h1\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#B392F0\"> $\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'h1'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">).\u003C/span>\u003Cspan style=\"color:#B392F0\">first\u003C/span>\u003Cspan style=\"color:#E1E4E8\">().\u003C/span>\u003Cspan style=\"color:#B392F0\">text\u003C/span>\u003Cspan style=\"color:#E1E4E8\">().\u003C/span>\u003Cspan style=\"color:#B392F0\">trim\u003C/span>\u003Cspan style=\"color:#E1E4E8\">();\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">  if\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> (title \u003C/span>\u003Cspan style=\"color:#F97583\">&#x26;&#x26;\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> h1 \u003C/span>\u003Cspan style=\"color:#F97583\">&#x26;&#x26;\u003C/span>\u003Cspan style=\"color:#F97583\"> !\u003C/span>\u003Cspan style=\"color:#E1E4E8\">title.\u003C/span>\u003Cspan style=\"color:#B392F0\">includes\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(h1.\u003C/span>\u003Cspan style=\"color:#B392F0\">substring\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#79B8FF\">0\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#79B8FF\">30\u003C/span>\u003Cspan style=\"color:#E1E4E8\">))) {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    issues.\u003C/span>\u003Cspan style=\"color:#B392F0\">push\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'WARNING: Title et H1 divergent significativement — peut fragmenter le signal topique'\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:#F97583\">  return\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> { url, issues, score: issues.\u003C/span>\u003Cspan style=\"color:#B392F0\">filter\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#FFAB70\">i\u003C/span>\u003Cspan style=\"color:#F97583\"> =>\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> i.\u003C/span>\u003Cspan style=\"color:#B392F0\">startsWith\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'CRITICAL'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">)).\u003C/span>\u003Cspan style=\"color:#79B8FF\">length\u003C/span>\u003Cspan style=\"color:#F97583\"> ===\u003C/span>\u003Cspan style=\"color:#79B8FF\"> 0\u003C/span>\u003Cspan style=\"color:#F97583\"> ?\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> 'PASS'\u003C/span>\u003Cspan style=\"color:#F97583\"> :\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> 'FAIL'\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> };\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">}\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">// Usage\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">const\u003C/span>\u003Cspan style=\"color:#79B8FF\"> urls\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#B392F0\"> require\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'fs'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">).\u003C/span>\u003Cspan style=\"color:#B392F0\">readFileSync\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'blog_urls.txt'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'utf8'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">).\u003C/span>\u003Cspan style=\"color:#B392F0\">split\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\">).\u003C/span>\u003Cspan style=\"color:#B392F0\">filter\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(Boolean);\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">Promise\u003C/span>\u003Cspan style=\"color:#E1E4E8\">.\u003C/span>\u003Cspan style=\"color:#B392F0\">all\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(urls.\u003C/span>\u003Cspan style=\"color:#B392F0\">map\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(auditAuthorSignals)).\u003C/span>\u003Cspan style=\"color:#B392F0\">then\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#FFAB70\">results\u003C/span>\u003Cspan style=\"color:#F97583\"> =>\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  results.\u003C/span>\u003Cspan style=\"color:#B392F0\">filter\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#FFAB70\">r\u003C/span>\u003Cspan style=\"color:#F97583\"> =>\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> r.issues.\u003C/span>\u003Cspan style=\"color:#79B8FF\">length\u003C/span>\u003Cspan style=\"color:#F97583\"> >\u003C/span>\u003Cspan style=\"color:#79B8FF\"> 0\u003C/span>\u003Cspan style=\"color:#E1E4E8\">).\u003C/span>\u003Cspan style=\"color:#B392F0\">forEach\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#FFAB70\">r\u003C/span>\u003Cspan style=\"color:#F97583\"> =>\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\">`\u003C/span>\u003Cspan style=\"color:#79B8FF\">\\n\u003C/span>\u003Cspan style=\"color:#9ECBFF\">${\u003C/span>\u003Cspan style=\"color:#E1E4E8\">r\u003C/span>\u003Cspan style=\"color:#9ECBFF\">.\u003C/span>\u003Cspan style=\"color:#E1E4E8\">score\u003C/span>\u003Cspan style=\"color:#9ECBFF\">} ${\u003C/span>\u003Cspan style=\"color:#E1E4E8\">r\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\">    r.issues.\u003C/span>\u003Cspan style=\"color:#B392F0\">forEach\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#FFAB70\">i\u003C/span>\u003Cspan style=\"color:#F97583\"> =>\u003C/span>\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:#E1E4E8\">i\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>\u003C/code>\u003C/pre>\n\u003Ch3>Étape 3 : monitoring continu des régressions\u003C/h3>\n\u003Cp>Le vrai risque n'est pas la perte initiale — c'est la dégradation progressive que personne ne surveille. Une page qui perd son structured data lors d'un déploiement, un auteur dont le profil LinkedIn change d'URL, une date \u003Ccode>dateModified\u003C/code> qui ne se met plus à jour après un refactoring du CMS. Ces micro-régressions s'accumulent et érodent votre éligibilité aux citations inline sans jamais déclencher d'alerte dans vos outils classiques. Un outil de monitoring comme Seogard détecte ces régressions techniques dès qu'elles se produisent — meta disparues, structured data cassé, canonical incohérent — avant qu'elles n'impactent votre visibilité dans les réponses génératives.\u003C/p>\n\u003Ch2>AI Mode : un écosystème de liens séparé\u003C/h2>\n\u003Cp>AI Mode (accessible via labs.google.com/search ou directement dans Chrome) fonctionne différemment d'AI Overviews. Il ne remplace pas un résultat de recherche — il \u003Cem>est\u003C/em> l'interface de recherche. Les implications pour les liens sont structurellement différentes.\u003C/p>\n\u003Ch3>Différences techniques clés\u003C/h3>\n\u003Cp>Dans AI Mode, la conversation est multi-turn. L'utilisateur peut poser des questions de suivi, et les sources citées évoluent à chaque tour de conversation. Cela signifie que votre page peut apparaître comme source au tour 3 d'une conversation sans jamais apparaître au tour 1 — un scénario impossible à tracker avec les outils de rank tracking traditionnels.\u003C/p>\n\u003Cp>Le format de citation dans AI Mode utilise des notes de bas de page numérotées plutôt que des liens inline contextuels. Ce choix n'est pas anodin : il réduit la friction visuelle dans le texte (meilleure expérience de lecture) mais diminue aussi la saillance du lien. L'utilisateur doit activement cliquer sur le numéro pour voir la source, puis décider de visiter le site.\u003C/p>\n\u003Ch3>Implications pour le crawl budget\u003C/h3>\n\u003Cp>AI Mode et AI Overviews augmentent la fréquence de crawl des pages sources. Si Google cite régulièrement votre guide SSR dans des réponses AI, il va le recrawler plus souvent pour vérifier que le contenu est toujours pertinent et à jour. Sur un site de 15 000 pages avec un crawl budget limité, ces re-crawls répétés des pages \"AI-cited\" peuvent cannibaliser le crawl de vos pages produit.\u003C/p>\n\u003Cp>Surveillez vos logs serveur pour détecter ce pattern :\u003C/p>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Analyser la fréquence de crawl par section du site\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># sur les 7 derniers jours\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">zcat\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> /var/log/nginx/access.log.\u003C/span>\u003Cspan style=\"color:#79B8FF\">*\u003C/span>\u003Cspan style=\"color:#9ECBFF\">.gz\u003C/span>\u003Cspan style=\"color:#F97583\"> |\u003C/span>\u003Cspan style=\"color:#79B8FF\"> \\\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">  cat\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> -\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> /var/log/nginx/access.log\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:#9ECBFF\"> \"Googlebot\"\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\"> -oP\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> 'GET /\\K[^/ ?]+'\u003C/span>\u003Cspan style=\"color:#F97583\"> |\u003C/span>\u003Cspan style=\"color:#79B8FF\"> \\\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">  sort\u003C/span>\u003Cspan style=\"color:#F97583\"> |\u003C/span>\u003Cspan style=\"color:#B392F0\"> uniq\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -c\u003C/span>\u003Cspan style=\"color:#F97583\"> |\u003C/span>\u003Cspan style=\"color:#B392F0\"> sort\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -rn\u003C/span>\u003Cspan style=\"color:#F97583\"> |\u003C/span>\u003Cspan style=\"color:#B392F0\"> head\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -20\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Comparer le ratio crawl blog vs crawl produit\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">zcat\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> /var/log/nginx/access.log.\u003C/span>\u003Cspan style=\"color:#79B8FF\">*\u003C/span>\u003Cspan style=\"color:#9ECBFF\">.gz\u003C/span>\u003Cspan style=\"color:#F97583\"> |\u003C/span>\u003Cspan style=\"color:#79B8FF\"> \\\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">  cat\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> -\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> /var/log/nginx/access.log\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:#9ECBFF\"> \"Googlebot\"\u003C/span>\u003Cspan style=\"color:#F97583\"> |\u003C/span>\u003Cspan style=\"color:#79B8FF\"> \\\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">  awk\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> '{\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    if ($7 ~ /^\\/blog\\//) blog++;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    else if ($7 ~ /^\\/produit\\//) produit++;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    total++\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  }\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  END {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    printf \"Blog: %d (%.1f%%)\\n\", blog, blog/total*100;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    printf \"Produit: %d (%.1f%%)\\n\", produit, produit/total*100;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    printf \"Total Googlebot hits: %d\\n\", total\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  }'\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>Si le ratio de crawl de votre blog dépasse 40% alors que vos pages produit représentent 95% de votre catalogue, vous avez un déséquilibre à corriger. La gestion du robots.txt et des directives de crawl \u003Ca href=\"/blog/google-s-robots-txt-docs-expand-deep-links-get-rules-eu-steps-in-seo-pulse-via-sejournal-mattgsouthern\">évolue parallèlement côté Google\u003C/a>, et la coordination entre les deux devient importante.\u003C/p>\n\u003Ch2>Ce que cette mise à jour révèle sur la direction de Google\u003C/h2>\n\u003Cp>Google ne réorganise pas ses liens AI Overview par souci esthétique. Cette mise à jour traduit trois orientations stratégiques :\u003C/p>\n\u003Cp>\u003Cstrong>Première orientation : la concentration des sources.\u003C/strong> Moins de liens inline signifie que Google assume davantage la responsabilité de la réponse. Les sources deviennent des \"preuves\" plutôt que des \"alternatives\". Pour être sélectionné, votre contenu doit être la meilleure preuve disponible — pas simplement un résultat pertinent parmi d'autres.\u003C/p>\n\u003Cp>\u003Cstrong>Deuxième orientation : la séparation information/exploration.\u003C/strong> Le bloc \"Explore\" crée une distinction nette entre \"voici la réponse\" (liens inline) et \"voici d'autres perspectives\" (Explore). C'est le même pattern que les \"People Also Ask\" — un espace de découverte à faible CTR mais à forte surface d'impression. \u003Ca href=\"/blog/your-website-is-a-source-not-a-megaphone-via-sejournal-slobodanmanic\">L'analyse de comment votre site est perçu comme source plutôt que mégaphone\u003C/a> prend ici tout son sens.\u003C/p>\n\u003Cp>\u003Cstrong>Troisième orientation : l'alignement avec l'écosystème AI.\u003C/strong> En adoptant un format de citation en notes de bas de page dans AI Mode, Google s'aligne sur les conventions émergentes de Perplexity, Claude, et les autres interfaces conversationnelles. Cela suggère une convergence des formats — et donc une possibilité de stratégie d'optimisation cross-plateforme. \u003Ca href=\"/blog/openai-crawl-activity-tripled-since-gpt-5-data-shows-via-sejournal-mattgsouthern\">Les données sur l'activité de crawl d'OpenAI\u003C/a> confirment que les bots AI sont de plus en plus actifs, et que l'enjeu est désormais multi-moteur.\u003C/p>\n\u003Ch2>Actions à prioriser cette semaine\u003C/h2>\n\u003Cp>Ne traitez pas cette mise à jour comme une news à lire et oublier. Voici les actions concrètes, par ordre de priorité :\u003C/p>\n\u003Cp>\u003Cstrong>Auditer vos top 50 pages en trafic organique\u003C/strong> pour la complétude du structured data auteur, la fraîcheur de la date \u003Ccode>dateModified\u003C/code>, et la cohérence des canonicals. Le script Node.js ci-dessus est un point de départ.\u003C/p>\n\u003Cp>\u003Cstrong>Analyser vos logs serveur\u003C/strong> pour détecter un changement de pattern de crawl Googlebot post-update. Si vos pages blog sont sur-crawlées au détriment de vos pages transactionnelles, ajustez via le \u003Ccode>crawl-delay\u003C/code> ou en optimisant le maillage interne.\u003C/p>\n\u003Cp>\u003Cstrong>Mettre à jour vos contenus les plus cités\u003C/strong> avec des données fraîches. La fenêtre des 90 jours de \u003Ccode>dateModified\u003C/code> est un signal exploitable immédiatement.\u003C/p>\n\u003Cp>\u003Cstrong>Implémenter un monitoring des disparitions de structured data\u003C/strong> sur chaque déploiement. Une régression de schema auteur passée inaperçue pendant deux semaines peut vous coûter une position inline dans AI Overviews — une perte silencieuse que seul un monitoring continu peut prévenir.\u003C/p>\n\u003Cp>Le modèle de citation AI évolue vite, et les sites qui ne monitorent pas ces changements en temps réel découvriront leur impact avec trois mois de retard — dans leurs courbes de trafic.\u003C/p>",null,12,[18,19,20,21,22],"google","ai overviews","ai mode","liens","seo technique","AI Overviews : ce que changent les nouveaux liens Google","Thu May 07 2026 10:02:58 GMT+0000 (Coordinated Universal Time)",[26,41,57],{"_id":27,"slug":28,"__v":6,"author":7,"canonical":29,"category":10,"createdAt":30,"date":31,"description":32,"image":15,"imageAlt":15,"readingTime":16,"tags":33,"title":39,"updatedAt":40},"6a041412aa6b273b0c40f181","how-to-build-local-pages-that-win-in-ai-powered-search-via-sejournal-lorenbaker","https://seogard.io/blog/how-to-build-local-pages-that-win-in-ai-powered-search-via-sejournal-lorenbaker","2026-05-13T06:02:58.743Z","2026-05-13","Guide technique pour construire des pages locales qui performent dans les AI Overviews et AI Mode. Schema, SSR, contenu structuré.",[34,35,36,37,38],"local SEO","AI search","pages locales","schema markup","SSR","Pages locales pour l'AI Search : architecture technique","Wed May 13 2026 06:02:58 GMT+0000 (Coordinated Universal Time)",{"_id":42,"slug":43,"__v":6,"author":7,"canonical":44,"category":10,"createdAt":45,"date":46,"description":47,"image":15,"imageAlt":15,"readingTime":48,"tags":49,"title":55,"updatedAt":56},"6a02c291aa6b273b0c2a74f9","the-tech-seo-audit-for-the-ai-search-era-how-to-maximize-your-ai-visibility-via-sejournal-jetoctopus","https://seogard.io/blog/the-tech-seo-audit-for-the-ai-search-era-how-to-maximize-your-ai-visibility-via-sejournal-jetoctopus","2026-05-12T06:02:57.339Z","2026-05-12","Comment adapter votre audit technique SEO aux exigences des AI Overviews, du crawl par les LLMs et du grounding. Méthodes, code et scénarios concrets.",14,[50,51,52,53,54],"tech seo audit","ai search","ai visibility","crawl budget","structured data","Audit SEO technique pour l'ère AI Search : guide avancé","Tue May 12 2026 06:02:57 GMT+0000 (Coordinated Universal Time)",{"_id":58,"slug":59,"__v":6,"author":7,"canonical":60,"category":10,"createdAt":61,"date":46,"description":62,"image":15,"imageAlt":15,"readingTime":16,"tags":63,"title":68,"updatedAt":69},"6a02fac0aa6b273b0c58d096","the-consensus-gap-via-sejournal-kevin-indig","https://seogard.io/blog/the-consensus-gap-via-sejournal-kevin-indig","2026-05-12T10:02:40.519Z","Une marque peut dominer dans un dashboard AI agrégé et être absente de deux moteurs sur trois. Analyse technique du Consensus Gap et méthodes pour le détecter.",[64,35,65,66,67],"consensus gap","LLM visibility","GEO","multi-engine","The Consensus Gap : votre marque visible sur un LLM, invisible sur deux autres","Tue May 12 2026 10:02:40 GMT+0000 (Coordinated Universal Time)"]