[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fpiPEOjqfh5DDmYgNWWEylfMkwlRFgeRTA82ScPvuQcM":3,"$fq-p8LVpb80WxWh9Pu8BF2-beuzG3abwaNeWXtDxDatQ":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},"69d80609aa6b273b0cac64e3","inside-google-discover-20-pipelines-42-million-cards-and-what-they-mean-for-publishers",0,"Equipe Seogard","Une analyse de trois mois de feeds Google Discover, documentée par Search Engine Land, révèle une architecture que peu de publishers soupçonnent : 20 pipelines distincts, 42 millions de cards observées, et des mécanismes de distribution qui n'ont rien à voir avec le ranking organique classique. Ce n'est pas un algorithme monolithique — c'est un système de broadcasting multi-canal où chaque pipeline obéit à ses propres règles de sélection et de promotion.\n\n## L'architecture pipeline : ce que révèlent les données\n\nGoogle Discover n'est pas un flux unique. L'étude met en lumière une architecture modulaire où au moins 20 pipelines alimentent le feed utilisateur en parallèle. Chaque pipeline est spécialisé : actualités chaudes, tendances émergentes, vidéo, contenu evergreen, publicités natives, sports, météo, et des catégories plus granulaires encore.\n\nLe point critique pour les publishers : votre contenu ne \"rentre\" pas dans Discover de manière uniforme. Il est candidat à un ou plusieurs pipelines, et chaque pipeline a son propre seuil de qualification, sa propre fréquence de rafraîchissement, et sa propre logique de scoring.\n\n### Les pipelines identifiés et leur comportement\n\nSur les 20 pipelines documentés, cinq concentrent l'essentiel du volume :\n\n- **News/Breaking** : rafraîchissement toutes les 2-5 minutes, durée de vie courte (\u003C 24h), favorise les sources avec un historique E-E-A-T fort en actualité.\n- **Trending Topics** : alimenté par les signaux de Google Trends et les requêtes Search en spike, fenêtre de 6-48h.\n- **Video** : pipeline dédié au contenu vidéo (YouTube, mais aussi Web Stories et vidéos intégrées), scoring qui intègre le watch time estimé.\n- **Evergreen/Interest** : contenu non-daté, distribué sur des semaines ou mois, corrélé aux centres d'intérêt long-terme de l'utilisateur.\n- **Ads** : cartes sponsorisées, mêlées au contenu organique, environ 8-12% du volume total observé.\n\nLes 15 autres pipelines couvrent des niches (recettes, shopping, sports scores, podcasts, etc.) et représentent individuellement un volume plus faible mais un CTR souvent supérieur, car le ciblage d'intérêt est plus précis.\n\n### Volume et distribution des 42 millions de cards\n\nLe chiffre de 42 millions de cards sur trois mois de collecte est cohérent avec l'échelle de Discover. Google ne publie pas de chiffres officiels sur le nombre d'utilisateurs Discover, mais le [rapport d'usage de Google Search Console](https://support.google.com/webmasters/answer/9216516) confirme que Discover génère des volumes de trafic comparables — parfois supérieurs — au Search organique pour les sites éditoriaux.\n\nLa distribution n'est pas gaussienne. Une minorité de cards (~3%) capte plus de 60% des impressions totales. C'est un système winner-takes-most, similaire au PageRank mais appliqué au feed personnel. Un article qui performe dans le pipeline Trending Topics peut accumuler 500K impressions en 12h, puis disparaître complètement.\n\n## Pourquoi certains contenus obtiennent une visibilité broadcast\n\nLe terme \"broadcast-level visibility\" est approprié. Contrairement au Search où l'utilisateur exprime une intention, Discover pousse le contenu vers l'utilisateur. Le mécanisme de sélection combine trois couches que les publishers peuvent influencer.\n\n### Couche 1 : Éligibilité technique\n\nAvant tout scoring éditorial, Google vérifie des prérequis techniques stricts. Un contenu qui échoue à cette étape ne sera jamais candidat, quel que soit son intérêt éditorial.\n\nLes critères documentés dans la [documentation Google sur Discover](https://developers.google.com/search/docs/appearance/google-discover) incluent :\n\n- Page indexée dans Google Search (prérequis non négociable)\n- Conforme aux [Content policies](https://support.google.com/publisherpolicies/answer/10400657)\n- Image de haute qualité : au minimum 1200px de large, activée via `max-image-preview:large`\n\nCe dernier point est un killer silencieux. Si vos meta robots ne l'autorisent pas explicitement, votre contenu est exclu de Discover :\n\n```html\n\u003C!-- Configuration minimale pour l'éligibilité Discover -->\n\u003Chead>\n  \u003Cmeta name=\"robots\" content=\"index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1\">\n  \n  \u003C!-- Open Graph — utilisé par Discover pour la card preview -->\n  \u003Cmeta property=\"og:title\" content=\"Titre optimisé pour le feed (60 chars max)\">\n  \u003Cmeta property=\"og:description\" content=\"Description engageante, 120-150 chars\">\n  \u003Cmeta property=\"og:image\" content=\"https://media.votresite.fr/articles/hero-image-1200x675.jpg\">\n  \u003Cmeta property=\"og:image:width\" content=\"1200\">\n  \u003Cmeta property=\"og:image:height\" content=\"675\">\n  \u003Cmeta property=\"og:type\" content=\"article\">\n  \n  \u003C!-- Article structured data -->\n  \u003Cmeta property=\"article:published_time\" content=\"2026-04-09T08:00:00+02:00\">\n  \u003Cmeta property=\"article:modified_time\" content=\"2026-04-09T08:00:00+02:00\">\n  \u003Cmeta property=\"article:author\" content=\"https://votresite.fr/auteurs/marie-dupont\">\n\u003C/head>\n```\n\nUn point que beaucoup ignorent : l'image OG doit être crawlable et accessible rapidement. Si votre CDN retourne un 302 temporaire ou un temps de réponse > 2s sur l'image, Discover peut sélectionner un fallback de moindre qualité — ou ignorer la card.\n\n### Couche 2 : Scoring d'engagement prédictif\n\nUne fois éligible, le contenu est évalué par un modèle de scoring qui prédit l'engagement utilisateur. Ce scoring n'est pas le même que le ranking Search. Il intègre :\n\n- **CTR prédictif** basé sur le titre, l'image, et le topic match avec l'utilisateur\n- **Engagement historique** du domaine dans le pipeline concerné\n- **Fraîcheur** pondérée selon le pipeline (critique pour News, marginale pour Evergreen)\n- **Entity matching** entre le contenu et le profil d'intérêt de l'utilisateur (basé sur le Knowledge Graph)\n\nCe dernier point est fondamental et sous-exploité. Discover ne fonctionne pas par mots-clés. Il fonctionne par entités. Un article sur \"la nouvelle politique de prix d'Apple\" sera distribué aux utilisateurs dont le profil contient l'entité `/m/0k8z` (Apple Inc.) — pas aux utilisateurs qui ont cherché \"prix iPhone\" la veille.\n\nVous pouvez vérifier les entités associées à votre contenu via le [Natural Language API de Google Cloud](https://cloud.google.com/natural-language/docs/analyzing-entities) :\n\n```bash\n# Analyse d'entités sur le contenu d'un article\ncurl -X POST \\\n  -H \"Authorization: Bearer $(gcloud auth print-access-token)\" \\\n  -H \"Content-Type: application/json\" \\\n  \"https://language.googleapis.com/v2/documents:analyzeEntities\" \\\n  -d '{\n    \"document\": {\n      \"type\": \"HTML\",\n      \"content\": \"\u003Chtml>\u003Cbody>'\"$(curl -s https://votresite.fr/article-cible | python3 -c 'import sys,html; print(html.escape(sys.stdin.read()))')\"'\u003C/body>\u003C/html>\",\n      \"languageCode\": \"fr\"\n    },\n    \"encodingType\": \"UTF8\"\n  }' | jq '.entities[] | select(.salience > 0.05) | {name, type, salience, metadata}'\n```\n\nSi les entités retournées ne correspondent pas aux entités que vous visez, votre contenu sera distribué au mauvais segment — ou pas distribué du tout. C'est l'équivalent Discover d'un keyword mismatch en Search, mais beaucoup plus difficile à diagnostiquer.\n\n### Couche 3 : Le boost pipeline\n\nC'est l'insight le plus actionable de l'étude. Certains pipelines ont un effet multiplicateur sur la distribution. Le pipeline Trending Topics, par exemple, peut exposer un article à 10-50x plus d'utilisateurs que le pipeline Evergreen, parce qu'il cible un pool plus large (tous les utilisateurs intéressés par le topic en spike, pas seulement ceux avec un intérêt long-terme).\n\nPour les publishers, ça signifie qu'un article qui \"attrape\" le pipeline Trending au bon moment bénéficie d'une visibilité broadcast — comparable à une position Featured Snippet sur une requête à 500K recherches/jour, mais sans que l'utilisateur ait eu besoin de chercher quoi que ce soit.\n\n## Structured data et signaux techniques que Discover exploite\n\nLa documentation officielle reste volontairement vague sur les signaux exploités par Discover. Mais le croisement des données de l'étude avec les tests terrain révèle des patterns clairs.\n\n### Schema.org Article et NewsArticle\n\nLe balisage `NewsArticle` est fortement corrélé à la sélection dans le pipeline News/Breaking. Ce n'est pas officiellement un facteur de ranking Discover, mais c'est un signal de classification de pipeline. Un article balisé `NewsArticle` avec une `datePublished` récente sera évalué prioritairement par le pipeline News.\n\n```html\n\u003Cscript type=\"application/ld+json\">\n{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"NewsArticle\",\n  \"headline\": \"Les 20 pipelines Google Discover révélés par 3 mois de données\",\n  \"description\": \"Analyse technique des mécanismes de distribution de Google Discover.\",\n  \"image\": [\n    {\n      \"@type\": \"ImageObject\",\n      \"url\": \"https://media.votresite.fr/articles/discover-pipelines-hero.jpg\",\n      \"width\": 1200,\n      \"height\": 675\n    },\n    {\n      \"@type\": \"ImageObject\",\n      \"url\": \"https://media.votresite.fr/articles/discover-pipelines-square.jpg\",\n      \"width\": 1200,\n      \"height\": 1200\n    }\n  ],\n  \"datePublished\": \"2026-04-09T08:00:00+02:00\",\n  \"dateModified\": \"2026-04-09T08:00:00+02:00\",\n  \"author\": {\n    \"@type\": \"Person\",\n    \"name\": \"Marie Dupont\",\n    \"url\": \"https://votresite.fr/auteurs/marie-dupont\",\n    \"sameAs\": [\n      \"https://twitter.com/mariedupont\",\n      \"https://www.linkedin.com/in/mariedupont\"\n    ]\n  },\n  \"publisher\": {\n    \"@type\": \"Organization\",\n    \"name\": \"VotreSite\",\n    \"logo\": {\n      \"@type\": \"ImageObject\",\n      \"url\": \"https://votresite.fr/logo.png\",\n      \"width\": 600,\n      \"height\": 60\n    }\n  },\n  \"mainEntityOfPage\": {\n    \"@type\": \"WebPage\",\n    \"@id\": \"https://votresite.fr/articles/google-discover-pipelines\"\n  },\n  \"isAccessibleForFree\": true\n}\n\u003C/script>\n```\n\nTrois détails qui comptent :\n\n1. **Plusieurs formats d'image** : Discover utilise des formats de card différents selon le pipeline et le device. Fournir un format 16:9 ET un format 1:1 maximise les chances d'obtenir la large card (qui génère un CTR 2-3x supérieur).\n\n2. **`isAccessibleForFree: true`** : pour les sites avec paywall, ce signal détermine si Discover affiche la card avec l'indicateur \"free\" ou \"paywall\". Les cards free ont un CTR significativement supérieur.\n\n3. **Author `sameAs`** : les liens vers les profils sociaux de l'auteur alimentent le Knowledge Graph author entity. Un auteur reconnu comme entité par Google bénéficie d'un boost E-E-A-T mesurable dans Discover.\n\n### Headers HTTP pour le contrôle du cache Discover\n\nUn aspect rarement documenté : Discover respecte — partiellement — les directives de cache HTTP pour déterminer la fraîcheur d'un contenu. Un article avec un `Cache-Control: max-age=86400` sera réévalué moins fréquemment qu'un article avec `max-age=3600`.\n\nPour du contenu actualité que vous voulez voir distribué rapidement dans le pipeline News :\n\n```nginx\n# Nginx — Configuration pour les articles actualité\nlocation ~ ^/articles/actu/ {\n    add_header Cache-Control \"public, max-age=1800, s-maxage=300\";\n    add_header X-Robots-Tag \"max-image-preview:large, max-snippet:-1\";\n    \n    # Priorité au crawl rapide via IndexNow\n    # Notification Bing + Yandex en webhook post-publication\n}\n\n# Articles evergreen — cache plus long, Discover réévalue moins souvent\nlocation ~ ^/articles/guides/ {\n    add_header Cache-Control \"public, max-age=604800, s-maxage=86400\";\n    add_header X-Robots-Tag \"max-image-preview:large, max-snippet:-1\";\n}\n```\n\nCe n'est pas un levier direct de ranking, mais ça influence la fréquence de réévaluation du contenu par les pipelines Discover, et donc la réactivité de la distribution.\n\n## Scénario concret : un média en ligne de 8 000 pages\n\nPrenons le cas d'un média tech francophone — 8 000 articles publiés, 40-60 nouveaux articles/semaine, équipe de 6 rédacteurs. Trafic mensuel : 2,5M sessions dont 35% via Discover (875K sessions/mois).\n\n### Le problème\n\nAprès une refonte frontend (migration de WordPress vers un [headless CMS](/blog/headless-cms-et-seo-avantages-et-risques-techniques) basé sur Next.js), le trafic Discover chute de 35% en 10 jours. Les impressions Search Console Discover passent de 12M/mois à 7,8M. Le CTR reste stable (~7,2%), donc le problème est côté distribution, pas côté engagement.\n\n### Le diagnostic\n\nL'équipe technique vérifie les points suivants :\n\n**1. Meta robots** — L'audit Screaming Frog révèle que le nouveau template article n'inclut plus `max-image-preview:large`. La directive par défaut est `nosnippet` (hérité d'un composant SEO copié d'un autre projet).\n\n**2. Images OG** — Le nouveau composant `next/image` sert les images en WebP avec lazy loading. Problème : le crawler Discover accède à l'URL OG image et reçoit un placeholder blur de 32px. L'image pleine résolution n'est servie qu'après exécution JavaScript côté client.\n\n**3. Structured data** — Le schéma `NewsArticle` a été remplacé par `Article` lors de la migration. Le pipeline News ne classe plus le contenu correctement.\n\n**4. Temps de réponse** — Le passage au headless CMS a introduit une API call côté serveur qui ajoute 800ms au TTFB. Discover favorise les pages qui répondent vite — le seuil observé empiriquement est \u003C 1.2s TTFB.\n\n### La correction\n\n```typescript\n// next.config.ts — Correction des headers pour Discover\nconst nextConfig = {\n  async headers() {\n    return [\n      {\n        source: '/articles/:slug*',\n        headers: [\n          {\n            key: 'X-Robots-Tag',\n            value: 'index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1'\n          },\n          {\n            key: 'Cache-Control',\n            value: 'public, max-age=1800, s-maxage=300, stale-while-revalidate=3600'\n          }\n        ]\n      }\n    ];\n  },\n  images: {\n    // Forcer le serving d'images OG en format accessible sans JS\n    unoptimized: false,\n    domains: ['media.votremedia.fr'],\n  }\n};\n\nexport default nextConfig;\n```\n\n```typescript\n// components/ArticleSEO.tsx — Correction du schema et de l'image OG\nimport Head from 'next/head';\n\ninterface ArticleSEOProps {\n  article: {\n    title: string;\n    excerpt: string;\n    heroImage: string; // URL directe, pas optimized\n    publishedAt: string;\n    modifiedAt: string;\n    author: { name: string; url: string; socials: string[] };\n    isNews: boolean;\n  };\n}\n\nexport function ArticleSEO({ article }: ArticleSEOProps) {\n  // Distinction Article vs NewsArticle selon la catégorie\n  const schemaType = article.isNews ? 'NewsArticle' : 'Article';\n  \n  // Image OG : URL directe vers le CDN, pas via next/image\n  // Discover doit pouvoir accéder à l'image sans exécuter JS\n  const ogImageUrl = `${article.heroImage}?w=1200&h=675&fit=crop&auto=format`;\n  const ogImageSquare = `${article.heroImage}?w=1200&h=1200&fit=crop&auto=format`;\n\n  const schema = {\n    '@context': 'https://schema.org',\n    '@type': schemaType,\n    headline: article.title,\n    description: article.excerpt,\n    image: [\n      { '@type': 'ImageObject', url: ogImageUrl, width: 1200, height: 675 },\n      { '@type': 'ImageObject', url: ogImageSquare, width: 1200, height: 1200 }\n    ],\n    datePublished: article.publishedAt,\n    dateModified: article.modifiedAt,\n    author: {\n      '@type': 'Person',\n      name: article.author.name,\n      url: article.author.url,\n      sameAs: article.author.socials\n    },\n    isAccessibleForFree: true\n  };\n\n  return (\n    \u003CHead>\n      \u003Cmeta name=\"robots\" content=\"index, follow, max-image-preview:large, max-snippet:-1\" />\n      \u003Cmeta property=\"og:image\" content={ogImageUrl} />\n      \u003Cmeta property=\"og:image:width\" content=\"1200\" />\n      \u003Cmeta property=\"og:image:height\" content=\"675\" />\n      \u003Cscript\n        type=\"application/ld+json\"\n        dangerouslySetInnerHTML={{ __html: JSON.stringify(schema) }}\n      />\n    \u003C/Head>\n  );\n}\n```\n\n### Le résultat\n\nAprès déploiement des corrections :\n- **J+3** : les impressions Discover remontent de 7,8M à 9,5M (le pipeline News recommence à distribuer)\n- **J+7** : retour à 11,2M d'impressions (95% du niveau pré-migration)\n- **J+14** : stabilisation à 12,6M — supérieur au niveau initial, grâce à la double image (16:9 + 1:1) qui a augmenté le taux de sélection en large card\n\nLe trafic Discover perdu représentait ~300K sessions/mois pendant 10 jours, soit un manque à gagner estimé à 45K€ en revenus publicitaires pour ce média. Une régression de ce type, silencieuse dans les métriques Search classiques, n'est détectable que par un monitoring dédié du rapport Discover dans Search Console — ou par un outil de monitoring comme Seogard qui alerte automatiquement quand les meta robots ou les structured data changent sur un template critique.\n\n## Stratégie pipeline-aware : optimiser pour le bon canal\n\nComprendre l'existence des pipelines change la stratégie éditoriale. Vous ne publiez plus \"pour Discover\" en général — vous ciblez un pipeline spécifique.\n\n### Pipeline News/Breaking : la course au timing\n\nCe pipeline valorise la vélocité. Le premier publisher à couvrir un sujet en spike a un avantage disproportionné. L'étude montre que les 2-3 premières sources indexées sur un topic en trending captent 70%+ des impressions du pipeline.\n\nImplications pratiques :\n- Configurez des alertes [Google Trends](https://trends.google.com/trending) en temps réel sur vos verticales\n- Réduisez le time-to-index : utilisez l'[API d'indexation Google](https://developers.google.com/search/apis/indexing-api/v3/quickstart) pour les contenus éligibles (pages avec schema `NewsArticle` ou `JobPosting`)\n- Pré-produisez des templates pour les événements prévisibles (keynotes Apple, résultats trimestriels, élections)\n\nLe rapport Discover de Search Console, combiné à l'[API Search Console](/blog/search-console-api-automatiser-le-reporting-seo), vous permet de mesurer précisément quels articles ont capté du trafic pipeline News vs Evergreen, en corrélant `datePublished` et la courbe d'impressions.\n\n### Pipeline Evergreen/Interest : le jeu long\n\nCe pipeline est plus intéressant pour le ROI long-terme. Un article evergreen qui entre dans ce pipeline peut générer du trafic Discover pendant des mois, avec des résurgences périodiques.\n\nLes signaux clés pour ce pipeline :\n- Contenu approfondi (> 2000 mots) avec des entités clairement définies\n- Mise à jour régulière de `dateModified` (pas du [thin content](/blog/thin-content-quand-vos-pages-nuisent-au-seo-global) statique)\n- Engagement signal fort : les articles qui génèrent du temps de lecture élevé et peu de pogo-sticking sont redistribués\n\nUn piège courant : la tentation de republier un article avec une nouvelle `datePublished` pour le rendre \"frais\". Google a spécifiquement adressé ce problème — les articles dont le contenu n'a pas substantiellement changé mais dont la date a été mise à jour sont pénalisés dans Discover. Le [contenu dupliqué déguisé en mise à jour](/blog/contenu-duplique-causes-techniques-et-solutions) est un anti-pattern dangereux.\n\n### Pipeline Video : le levier sous-exploité\n\nLe pipeline vidéo est le moins saturé et offre le meilleur ratio effort/visibilité pour les publishers qui ne sont pas des pure players vidéo. L'étude montre que les articles contenant une vidéo intégrée (pas seulement un lien YouTube) ont 2,4x plus de chances d'être sélectionnés par ce pipeline.\n\nLe balisage `VideoObject` dans le structured data est le signal technique déclencheur :\n\n```html\n\u003Cscript type=\"application/ld+json\">\n{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"VideoObject\",\n  \"name\": \"Comment fonctionnent les pipelines Google Discover\",\n  \"description\": \"Explication technique des 20 pipelines de distribution Discover\",\n  \"thumbnailUrl\": \"https://media.votresite.fr/videos/discover-thumb.jpg\",\n  \"uploadDate\": \"2026-04-09T08:00:00+02:00\",\n  \"duration\": \"PT4M30S\",\n  \"contentUrl\": \"https://media.votresite.fr/videos/discover-pipelines.mp4\",\n  \"embedUrl\": \"https://www.youtube.com/embed/XXXXX\"\n}\n\u003C/script>\n```\n\n## Monitoring et détection des régressions Discover\n\nLe rapport Discover de Search Console est votre première ligne de défense, mais il a des limites : données disponibles avec 48-72h de retard, pas de segmentation par pipeline, pas d'alerte automatique.\n\n### Automatiser la surveillance\n\nLes [rapports Search Console que la plupart des équipes ignorent](/blog/google-search-console-les-rapports-que-vous-ignorez) incluent justement les données Discover. Mais pour un monitoring proactif, vous devez aller plus loin.\n\nUn script de surveillance basique via l'API Search Console :\n\n```python\n# discover_monitor.py — Alerte si les impressions Discover chutent de > 20%\nfrom google.oauth2.credentials import Credentials\nfrom googleapiclient.discovery import build\nfrom datetime import datetime, timedelta\nimport statistics\n\ncreds = Credentials.from_authorized_user_file('credentials.json')\nservice = build('searchconsole', 'v1', credentials=creds)\n\nsite_url = 'sc-domain:votresite.fr'\n\ndef get_discover_data(start_date, end_date):\n    response = service.searchanalytics().query(\n        siteUrl=site_url,\n        body={\n            'startDate': start_date,\n            'endDate': end_date,\n            'dimensions': ['date'],\n            'type': 'discover',  # Clé : filtrer sur le type Discover\n            'rowLimit': 1000\n        }\n    ).execute()\n    return response.get('rows', [])\n\n# Comparer les 7 derniers jours vs les 7 jours précédents\ntoday = datetime.now()\nrecent = get_discover_data(\n    (today - timedelta(days=9)).strftime('%Y-%m-%d'),\n    (today - timedelta(days=3)).strftime('%Y-%m-%d')  # 48h de délai\n)\nprevious = get_discover_data(\n    (today - timedelta(days=16)).strftime('%Y-%m-%d'),\n    (today - timedelta(days=10)).strftime('%Y-%m-%d')\n)\n\nrecent_impressions = sum(r['impressions'] for r in recent)\nprevious_impressions = sum(r['impressions'] for r in previous)\n\nif previous_impressions > 0:\n    change_pct = ((recent_impressions - previous_impressions) / previous_impressions) * 100\n    if change_pct \u003C -20:\n        print(f\"⚠️ ALERTE: Impressions Discover en baisse de {change_pct:.1f}%\")\n        print(f\"   Période récente: {recent_impressions:,} impressions\")\n        print(f\"   Période précédente: {previous_impressions:,} impressions\")\n        # Déclencher notification Slack/email ici\n    else:\n        print(f\"✓ Discover stable: {change_pct:+.1f}% ({recent_impressions:,} impressions)\")\n```\n\nCe script détecte les chutes globales, mais pas les causes. Pour identifier si la régression vient d'un changement technique (meta robots, structured data, image OG), vous avez besoin d'un monitoring qui audite en continu les templates critiques et corrèle les changements techniques avec les variations de trafic Discover.\n\n### Les signaux d'alerte à surveiller\n\nEn s'appuyant sur les [KPIs techniques pertinents pour le SEO](/blog/mesurer-l-impact-seo-technique-quels-kpis-suivre), voici les métriques spécifiques Discover à monitorer :\n\n- **Impressions/jour** par top 50 URLs Discover (chute > 30% = investigation immédiate)\n- **CTR moyen** par type de contenu (si le CTR chute mais les impressions sont stables, c'est un problème de card preview, pas de distribution)\n- **Ratio large card / standard card** : non disponible directement dans l'API, mais déductible des variations de CTR par article\n- **Temps de réponse des images OG** : un CDN lent tue la qualité de la card\n\nLes équipes qui [automatisent leurs checks SEO dans le CI/CD](/blog/automatiser-les-checks-seo-dans-le-ci-cd) ont un avantage structurel : chaque déploiement vérifie que les meta robots, structured data, et images OG sont conformes aux exigences Discover avant la mise en production.\n\n## L'impact des product feeds et du contenu AI sur Discover\n\nL'étude révèle un pipeline Discover dédié au contenu shopping/product, ce qui confirme que [les product feeds nécessitent une stratégie organique](/blog/why-product-feeds-need-an-organic-strategy-for-ai-search) — Discover est un canal de distribution directe pour les fiches produit, pas seulement pour le contenu éditorial.\n\nPour les e-commerce, le pipeline shopping Discover sélectionne des produits basés sur l'historique d'intérêt de l'utilisateur, mais aussi sur les signaux de prix (promotions, baisses de prix détectées via le Merchant Center). C'est un levier de trafic gratuit que la plupart des e-commerce ignorent complètement.\n\nQuant au [contenu généré automatiquement](/blog/contenu-genere-automatiquement-et-seo-ce-que-google-accepte), l'étude ne montre pas de pénalité spécifique Discover pour le contenu AI — mais le scoring d'engagement prédictif défavorise naturellement le contenu générique. Un article AI qui n'apporte pas d'angle original sera scoré faiblement par le modèle de CTR prédictif et ne passera jamais le seuil de distribution des pipelines à fort volume.\n\n## Ce que ça change pour votre stratégie\n\nCes données confirment que Discover n'est pas un bonus aléatoire — c'est un canal de distribution structuré, avec des règles techniques précises et des leviers d'optimisation mesurables. Les publishers qui traitent Discover comme un canal à part entière (avec ses propres KPIs, ses propres templates optimisés, et son propre monitoring) captent une part disproportionnée du trafic.\n\nL'insight le plus actionable de cette analyse : arrêtez de penser \"mon article est-il bon pour Discover ?\" et commencez à penser \"quel pipeline vais-je cibler, et ai-je les prérequis techniques pour y être éligible ?\". La différence entre un article à 5K impressions et un article à 500K impressions, c'est souvent une directive meta robots manquante, une image OG mal servie, ou un schéma `Article` au lieu de `NewsArticle`. Des régressions techniques silencieuses que seul un monitoring continu — via Seogard ou un équivalent — peut détecter avant qu'elles ne coûtent des dizaines de milliers d'euros de trafic perdu.","https://seogard.io/blog/inside-google-discover-20-pipelines-42-million-cards-and-what-they-mean-for-publishers","Actualités SEO","2026-04-09T20:03:21.033Z","2026-04-09","Analyse technique des 20 pipelines Google Discover, leurs 42 millions de cards, et les leviers concrets pour maximiser la visibilité éditoriale.","\u003Cp>Une analyse de trois mois de feeds Google Discover, documentée par Search Engine Land, révèle une architecture que peu de publishers soupçonnent : 20 pipelines distincts, 42 millions de cards observées, et des mécanismes de distribution qui n'ont rien à voir avec le ranking organique classique. Ce n'est pas un algorithme monolithique — c'est un système de broadcasting multi-canal où chaque pipeline obéit à ses propres règles de sélection et de promotion.\u003C/p>\n\u003Ch2>L'architecture pipeline : ce que révèlent les données\u003C/h2>\n\u003Cp>Google Discover n'est pas un flux unique. L'étude met en lumière une architecture modulaire où au moins 20 pipelines alimentent le feed utilisateur en parallèle. Chaque pipeline est spécialisé : actualités chaudes, tendances émergentes, vidéo, contenu evergreen, publicités natives, sports, météo, et des catégories plus granulaires encore.\u003C/p>\n\u003Cp>Le point critique pour les publishers : votre contenu ne \"rentre\" pas dans Discover de manière uniforme. Il est candidat à un ou plusieurs pipelines, et chaque pipeline a son propre seuil de qualification, sa propre fréquence de rafraîchissement, et sa propre logique de scoring.\u003C/p>\n\u003Ch3>Les pipelines identifiés et leur comportement\u003C/h3>\n\u003Cp>Sur les 20 pipelines documentés, cinq concentrent l'essentiel du volume :\u003C/p>\n\u003Cul>\n\u003Cli>\u003Cstrong>News/Breaking\u003C/strong> : rafraîchissement toutes les 2-5 minutes, durée de vie courte (&#x3C; 24h), favorise les sources avec un historique E-E-A-T fort en actualité.\u003C/li>\n\u003Cli>\u003Cstrong>Trending Topics\u003C/strong> : alimenté par les signaux de Google Trends et les requêtes Search en spike, fenêtre de 6-48h.\u003C/li>\n\u003Cli>\u003Cstrong>Video\u003C/strong> : pipeline dédié au contenu vidéo (YouTube, mais aussi Web Stories et vidéos intégrées), scoring qui intègre le watch time estimé.\u003C/li>\n\u003Cli>\u003Cstrong>Evergreen/Interest\u003C/strong> : contenu non-daté, distribué sur des semaines ou mois, corrélé aux centres d'intérêt long-terme de l'utilisateur.\u003C/li>\n\u003Cli>\u003Cstrong>Ads\u003C/strong> : cartes sponsorisées, mêlées au contenu organique, environ 8-12% du volume total observé.\u003C/li>\n\u003C/ul>\n\u003Cp>Les 15 autres pipelines couvrent des niches (recettes, shopping, sports scores, podcasts, etc.) et représentent individuellement un volume plus faible mais un CTR souvent supérieur, car le ciblage d'intérêt est plus précis.\u003C/p>\n\u003Ch3>Volume et distribution des 42 millions de cards\u003C/h3>\n\u003Cp>Le chiffre de 42 millions de cards sur trois mois de collecte est cohérent avec l'échelle de Discover. Google ne publie pas de chiffres officiels sur le nombre d'utilisateurs Discover, mais le \u003Ca href=\"https://support.google.com/webmasters/answer/9216516\">rapport d'usage de Google Search Console\u003C/a> confirme que Discover génère des volumes de trafic comparables — parfois supérieurs — au Search organique pour les sites éditoriaux.\u003C/p>\n\u003Cp>La distribution n'est pas gaussienne. Une minorité de cards (~3%) capte plus de 60% des impressions totales. C'est un système winner-takes-most, similaire au PageRank mais appliqué au feed personnel. Un article qui performe dans le pipeline Trending Topics peut accumuler 500K impressions en 12h, puis disparaître complètement.\u003C/p>\n\u003Ch2>Pourquoi certains contenus obtiennent une visibilité broadcast\u003C/h2>\n\u003Cp>Le terme \"broadcast-level visibility\" est approprié. Contrairement au Search où l'utilisateur exprime une intention, Discover pousse le contenu vers l'utilisateur. Le mécanisme de sélection combine trois couches que les publishers peuvent influencer.\u003C/p>\n\u003Ch3>Couche 1 : Éligibilité technique\u003C/h3>\n\u003Cp>Avant tout scoring éditorial, Google vérifie des prérequis techniques stricts. Un contenu qui échoue à cette étape ne sera jamais candidat, quel que soit son intérêt éditorial.\u003C/p>\n\u003Cp>Les critères documentés dans la \u003Ca href=\"https://developers.google.com/search/docs/appearance/google-discover\">documentation Google sur Discover\u003C/a> incluent :\u003C/p>\n\u003Cul>\n\u003Cli>Page indexée dans Google Search (prérequis non négociable)\u003C/li>\n\u003Cli>Conforme aux \u003Ca href=\"https://support.google.com/publisherpolicies/answer/10400657\">Content policies\u003C/a>\u003C/li>\n\u003Cli>Image de haute qualité : au minimum 1200px de large, activée via \u003Ccode>max-image-preview:large\u003C/code>\u003C/li>\n\u003C/ul>\n\u003Cp>Ce dernier point est un killer silencieux. Si vos meta robots ne l'autorisent pas explicitement, votre contenu est exclu de Discover :\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;!-- Configuration minimale pour l'éligibilité Discover -->\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">&#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">head\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">meta\u003C/span>\u003Cspan style=\"color:#B392F0\"> name\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"robots\"\u003C/span>\u003Cspan style=\"color:#B392F0\"> content\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  \u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">  &#x3C;!-- Open Graph — utilisé par Discover pour la card preview -->\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">meta\u003C/span>\u003Cspan style=\"color:#B392F0\"> property\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"og:title\"\u003C/span>\u003Cspan style=\"color:#B392F0\"> content\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"Titre optimisé pour le feed (60 chars max)\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">meta\u003C/span>\u003Cspan style=\"color:#B392F0\"> property\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"og:description\"\u003C/span>\u003Cspan style=\"color:#B392F0\"> content\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"Description engageante, 120-150 chars\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">meta\u003C/span>\u003Cspan style=\"color:#B392F0\"> property\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"og:image\"\u003C/span>\u003Cspan style=\"color:#B392F0\"> content\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"https://media.votresite.fr/articles/hero-image-1200x675.jpg\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">meta\u003C/span>\u003Cspan style=\"color:#B392F0\"> property\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"og:image:width\"\u003C/span>\u003Cspan style=\"color:#B392F0\"> content\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"1200\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">meta\u003C/span>\u003Cspan style=\"color:#B392F0\"> property\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"og:image:height\"\u003C/span>\u003Cspan style=\"color:#B392F0\"> content\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"675\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">meta\u003C/span>\u003Cspan style=\"color:#B392F0\"> property\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"og:type\"\u003C/span>\u003Cspan style=\"color:#B392F0\"> content\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"article\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  \u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">  &#x3C;!-- Article structured data -->\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">meta\u003C/span>\u003Cspan style=\"color:#B392F0\"> property\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"article:published_time\"\u003C/span>\u003Cspan style=\"color:#B392F0\"> content\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"2026-04-09T08:00:00+02:00\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">meta\u003C/span>\u003Cspan style=\"color:#B392F0\"> property\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"article:modified_time\"\u003C/span>\u003Cspan style=\"color:#B392F0\"> content\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"2026-04-09T08:00:00+02:00\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">meta\u003C/span>\u003Cspan style=\"color:#B392F0\"> property\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"article:author\"\u003C/span>\u003Cspan style=\"color:#B392F0\"> content\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"https://votresite.fr/auteurs/marie-dupont\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">head\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>Un point que beaucoup ignorent : l'image OG doit être crawlable et accessible rapidement. Si votre CDN retourne un 302 temporaire ou un temps de réponse > 2s sur l'image, Discover peut sélectionner un fallback de moindre qualité — ou ignorer la card.\u003C/p>\n\u003Ch3>Couche 2 : Scoring d'engagement prédictif\u003C/h3>\n\u003Cp>Une fois éligible, le contenu est évalué par un modèle de scoring qui prédit l'engagement utilisateur. Ce scoring n'est pas le même que le ranking Search. Il intègre :\u003C/p>\n\u003Cul>\n\u003Cli>\u003Cstrong>CTR prédictif\u003C/strong> basé sur le titre, l'image, et le topic match avec l'utilisateur\u003C/li>\n\u003Cli>\u003Cstrong>Engagement historique\u003C/strong> du domaine dans le pipeline concerné\u003C/li>\n\u003Cli>\u003Cstrong>Fraîcheur\u003C/strong> pondérée selon le pipeline (critique pour News, marginale pour Evergreen)\u003C/li>\n\u003Cli>\u003Cstrong>Entity matching\u003C/strong> entre le contenu et le profil d'intérêt de l'utilisateur (basé sur le Knowledge Graph)\u003C/li>\n\u003C/ul>\n\u003Cp>Ce dernier point est fondamental et sous-exploité. Discover ne fonctionne pas par mots-clés. Il fonctionne par entités. Un article sur \"la nouvelle politique de prix d'Apple\" sera distribué aux utilisateurs dont le profil contient l'entité \u003Ccode>/m/0k8z\u003C/code> (Apple Inc.) — pas aux utilisateurs qui ont cherché \"prix iPhone\" la veille.\u003C/p>\n\u003Cp>Vous pouvez vérifier les entités associées à votre contenu via le \u003Ca href=\"https://cloud.google.com/natural-language/docs/analyzing-entities\">Natural Language API de Google Cloud\u003C/a> :\u003C/p>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Analyse d'entités sur le contenu d'un article\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">curl\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -X\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> POST\u003C/span>\u003Cspan style=\"color:#79B8FF\"> \\\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">  -H\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"Authorization: Bearer $(\u003C/span>\u003Cspan style=\"color:#B392F0\">gcloud\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> auth print-access-token)\"\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\"> \"Content-Type: application/json\"\u003C/span>\u003Cspan style=\"color:#79B8FF\"> \\\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  \"https://language.googleapis.com/v2/documents:analyzeEntities\"\u003C/span>\u003Cspan style=\"color:#79B8FF\"> \\\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">  -d\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> '{\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    \"document\": {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">      \"type\": \"HTML\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">      \"content\": \"&#x3C;html>&#x3C;body>'\"$(\u003C/span>\u003Cspan style=\"color:#B392F0\">curl\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -s\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> https://votresite.fr/article-cible \u003C/span>\u003Cspan style=\"color:#F97583\">|\u003C/span>\u003Cspan style=\"color:#B392F0\"> python3\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -c\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> 'import sys,html; print(html.escape(sys.stdin.read()))')\"'&#x3C;/body>&#x3C;/html>\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">      \"languageCode\": \"fr\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    },\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    \"encodingType\": \"UTF8\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  }'\u003C/span>\u003Cspan style=\"color:#F97583\"> |\u003C/span>\u003Cspan style=\"color:#B392F0\"> jq\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> '.entities[] | select(.salience > 0.05) | {name, type, salience, metadata}'\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>Si les entités retournées ne correspondent pas aux entités que vous visez, votre contenu sera distribué au mauvais segment — ou pas distribué du tout. C'est l'équivalent Discover d'un keyword mismatch en Search, mais beaucoup plus difficile à diagnostiquer.\u003C/p>\n\u003Ch3>Couche 3 : Le boost pipeline\u003C/h3>\n\u003Cp>C'est l'insight le plus actionable de l'étude. Certains pipelines ont un effet multiplicateur sur la distribution. Le pipeline Trending Topics, par exemple, peut exposer un article à 10-50x plus d'utilisateurs que le pipeline Evergreen, parce qu'il cible un pool plus large (tous les utilisateurs intéressés par le topic en spike, pas seulement ceux avec un intérêt long-terme).\u003C/p>\n\u003Cp>Pour les publishers, ça signifie qu'un article qui \"attrape\" le pipeline Trending au bon moment bénéficie d'une visibilité broadcast — comparable à une position Featured Snippet sur une requête à 500K recherches/jour, mais sans que l'utilisateur ait eu besoin de chercher quoi que ce soit.\u003C/p>\n\u003Ch2>Structured data et signaux techniques que Discover exploite\u003C/h2>\n\u003Cp>La documentation officielle reste volontairement vague sur les signaux exploités par Discover. Mais le croisement des données de l'étude avec les tests terrain révèle des patterns clairs.\u003C/p>\n\u003Ch3>Schema.org Article et NewsArticle\u003C/h3>\n\u003Cp>Le balisage \u003Ccode>NewsArticle\u003C/code> est fortement corrélé à la sélection dans le pipeline News/Breaking. Ce n'est pas officiellement un facteur de ranking Discover, mais c'est un signal de classification de pipeline. Un article balisé \u003Ccode>NewsArticle\u003C/code> avec une \u003Ccode>datePublished\u003C/code> récente sera évalué prioritairement par le pipeline News.\u003C/p>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">&#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">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\": \"NewsArticle\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  \"headline\": \"Les 20 pipelines Google Discover révélés par 3 mois de données\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  \"description\": \"Analyse technique des mécanismes de distribution de Google Discover.\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  \"image\": [\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      \"@type\": \"ImageObject\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      \"url\": \"https://media.votresite.fr/articles/discover-pipelines-hero.jpg\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      \"width\": 1200,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      \"height\": 675\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\">      \"@type\": \"ImageObject\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      \"url\": \"https://media.votresite.fr/articles/discover-pipelines-square.jpg\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      \"width\": 1200,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      \"height\": 1200\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\">  \"datePublished\": \"2026-04-09T08:00:00+02:00\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  \"dateModified\": \"2026-04-09T08:00:00+02:00\",\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/auteurs/marie-dupont\",\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://twitter.com/mariedupont\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      \"https://www.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\">    \"logo\": {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      \"@type\": \"ImageObject\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      \"url\": \"https://votresite.fr/logo.png\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      \"width\": 600,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      \"height\": 60\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\">  \"mainEntityOfPage\": {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    \"@type\": \"WebPage\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    \"@id\": \"https://votresite.fr/articles/google-discover-pipelines\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  },\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  \"isAccessibleForFree\": true\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>Trois détails qui comptent :\u003C/p>\n\u003Col>\n\u003Cli>\n\u003Cp>\u003Cstrong>Plusieurs formats d'image\u003C/strong> : Discover utilise des formats de card différents selon le pipeline et le device. Fournir un format 16:9 ET un format 1:1 maximise les chances d'obtenir la large card (qui génère un CTR 2-3x supérieur).\u003C/p>\n\u003C/li>\n\u003Cli>\n\u003Cp>\u003Cstrong>\u003Ccode>isAccessibleForFree: true\u003C/code>\u003C/strong> : pour les sites avec paywall, ce signal détermine si Discover affiche la card avec l'indicateur \"free\" ou \"paywall\". Les cards free ont un CTR significativement supérieur.\u003C/p>\n\u003C/li>\n\u003Cli>\n\u003Cp>\u003Cstrong>Author \u003Ccode>sameAs\u003C/code>\u003C/strong> : les liens vers les profils sociaux de l'auteur alimentent le Knowledge Graph author entity. Un auteur reconnu comme entité par Google bénéficie d'un boost E-E-A-T mesurable dans Discover.\u003C/p>\n\u003C/li>\n\u003C/ol>\n\u003Ch3>Headers HTTP pour le contrôle du cache Discover\u003C/h3>\n\u003Cp>Un aspect rarement documenté : Discover respecte — partiellement — les directives de cache HTTP pour déterminer la fraîcheur d'un contenu. Un article avec un \u003Ccode>Cache-Control: max-age=86400\u003C/code> sera réévalué moins fréquemment qu'un article avec \u003Ccode>max-age=3600\u003C/code>.\u003C/p>\n\u003Cp>Pour du contenu actualité que vous voulez voir distribué rapidement dans le pipeline News :\u003C/p>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Nginx — Configuration pour les articles actualité\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">location\u003C/span>\u003Cspan style=\"color:#F97583\"> ~\u003C/span>\u003Cspan style=\"color:#DBEDFF\"> ^/articles/actu/ \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, s-maxage=300\"\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\">X-Robots-Tag \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"max-image-preview:large, max-snippet:-1\"\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\">    # Priorité au crawl rapide via IndexNow\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">    # Notification Bing + Yandex en webhook post-publication\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\"># Articles evergreen — cache plus long, Discover réévalue moins souvent\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">location\u003C/span>\u003Cspan style=\"color:#F97583\"> ~\u003C/span>\u003Cspan style=\"color:#DBEDFF\"> ^/articles/guides/ \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=604800, s-maxage=86400\"\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\">X-Robots-Tag \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"max-image-preview:large, max-snippet:-1\"\u003C/span>\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>Ce n'est pas un levier direct de ranking, mais ça influence la fréquence de réévaluation du contenu par les pipelines Discover, et donc la réactivité de la distribution.\u003C/p>\n\u003Ch2>Scénario concret : un média en ligne de 8 000 pages\u003C/h2>\n\u003Cp>Prenons le cas d'un média tech francophone — 8 000 articles publiés, 40-60 nouveaux articles/semaine, équipe de 6 rédacteurs. Trafic mensuel : 2,5M sessions dont 35% via Discover (875K sessions/mois).\u003C/p>\n\u003Ch3>Le problème\u003C/h3>\n\u003Cp>Après une refonte frontend (migration de WordPress vers un \u003Ca href=\"/blog/headless-cms-et-seo-avantages-et-risques-techniques\">headless CMS\u003C/a> basé sur Next.js), le trafic Discover chute de 35% en 10 jours. Les impressions Search Console Discover passent de 12M/mois à 7,8M. Le CTR reste stable (~7,2%), donc le problème est côté distribution, pas côté engagement.\u003C/p>\n\u003Ch3>Le diagnostic\u003C/h3>\n\u003Cp>L'équipe technique vérifie les points suivants :\u003C/p>\n\u003Cp>\u003Cstrong>1. Meta robots\u003C/strong> — L'audit Screaming Frog révèle que le nouveau template article n'inclut plus \u003Ccode>max-image-preview:large\u003C/code>. La directive par défaut est \u003Ccode>nosnippet\u003C/code> (hérité d'un composant SEO copié d'un autre projet).\u003C/p>\n\u003Cp>\u003Cstrong>2. Images OG\u003C/strong> — Le nouveau composant \u003Ccode>next/image\u003C/code> sert les images en WebP avec lazy loading. Problème : le crawler Discover accède à l'URL OG image et reçoit un placeholder blur de 32px. L'image pleine résolution n'est servie qu'après exécution JavaScript côté client.\u003C/p>\n\u003Cp>\u003Cstrong>3. Structured data\u003C/strong> — Le schéma \u003Ccode>NewsArticle\u003C/code> a été remplacé par \u003Ccode>Article\u003C/code> lors de la migration. Le pipeline News ne classe plus le contenu correctement.\u003C/p>\n\u003Cp>\u003Cstrong>4. Temps de réponse\u003C/strong> — Le passage au headless CMS a introduit une API call côté serveur qui ajoute 800ms au TTFB. Discover favorise les pages qui répondent vite — le seuil observé empiriquement est &#x3C; 1.2s TTFB.\u003C/p>\n\u003Ch3>La correction\u003C/h3>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">// next.config.ts — Correction des headers pour Discover\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">const\u003C/span>\u003Cspan style=\"color:#79B8FF\"> nextConfig\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">  async\u003C/span>\u003Cspan style=\"color:#B392F0\"> headers\u003C/span>\u003Cspan style=\"color:#E1E4E8\">() {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    return\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> [\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        source: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'/articles/:slug*'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        headers: [\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">          {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">            key: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'X-Robots-Tag'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">            value: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1'\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\">            key: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'Cache-Control'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">            value: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'public, max-age=1800, s-maxage=300, stale-while-revalidate=3600'\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:#E1E4E8\">  },\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  images: {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">    // Forcer le serving d'images OG en format accessible sans JS\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    unoptimized: \u003C/span>\u003Cspan style=\"color:#79B8FF\">false\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    domains: [\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'media.votremedia.fr'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">],\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  }\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">};\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">export\u003C/span>\u003Cspan style=\"color:#F97583\"> default\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> nextConfig;\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">// components/ArticleSEO.tsx — Correction du schema et de l'image OG\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">import\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> Head \u003C/span>\u003Cspan style=\"color:#F97583\">from\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> 'next/head'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">interface\u003C/span>\u003Cspan style=\"color:#B392F0\"> ArticleSEOProps\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FFAB70\">  article\u003C/span>\u003Cspan style=\"color:#F97583\">:\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FFAB70\">    title\u003C/span>\u003Cspan style=\"color:#F97583\">:\u003C/span>\u003Cspan style=\"color:#79B8FF\"> string\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FFAB70\">    excerpt\u003C/span>\u003Cspan style=\"color:#F97583\">:\u003C/span>\u003Cspan style=\"color:#79B8FF\"> string\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FFAB70\">    heroImage\u003C/span>\u003Cspan style=\"color:#F97583\">:\u003C/span>\u003Cspan style=\"color:#79B8FF\"> string\u003C/span>\u003Cspan style=\"color:#E1E4E8\">; \u003C/span>\u003Cspan style=\"color:#6A737D\">// URL directe, pas optimized\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FFAB70\">    publishedAt\u003C/span>\u003Cspan style=\"color:#F97583\">:\u003C/span>\u003Cspan style=\"color:#79B8FF\"> string\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FFAB70\">    modifiedAt\u003C/span>\u003Cspan style=\"color:#F97583\">:\u003C/span>\u003Cspan style=\"color:#79B8FF\"> string\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FFAB70\">    author\u003C/span>\u003Cspan style=\"color:#F97583\">:\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> { \u003C/span>\u003Cspan style=\"color:#FFAB70\">name\u003C/span>\u003Cspan style=\"color:#F97583\">:\u003C/span>\u003Cspan style=\"color:#79B8FF\"> string\u003C/span>\u003Cspan style=\"color:#E1E4E8\">; \u003C/span>\u003Cspan style=\"color:#FFAB70\">url\u003C/span>\u003Cspan style=\"color:#F97583\">:\u003C/span>\u003Cspan style=\"color:#79B8FF\"> string\u003C/span>\u003Cspan style=\"color:#E1E4E8\">; \u003C/span>\u003Cspan style=\"color:#FFAB70\">socials\u003C/span>\u003Cspan style=\"color:#F97583\">:\u003C/span>\u003Cspan style=\"color:#79B8FF\"> string\u003C/span>\u003Cspan style=\"color:#E1E4E8\">[] };\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FFAB70\">    isNews\u003C/span>\u003Cspan style=\"color:#F97583\">:\u003C/span>\u003Cspan style=\"color:#79B8FF\"> boolean\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  };\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">}\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">export\u003C/span>\u003Cspan style=\"color:#F97583\"> function\u003C/span>\u003Cspan style=\"color:#B392F0\"> ArticleSEO\u003C/span>\u003Cspan style=\"color:#E1E4E8\">({ \u003C/span>\u003Cspan style=\"color:#FFAB70\">article\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> }\u003C/span>\u003Cspan style=\"color:#F97583\">:\u003C/span>\u003Cspan style=\"color:#B392F0\"> ArticleSEOProps\u003C/span>\u003Cspan style=\"color:#E1E4E8\">) {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">  // Distinction Article vs NewsArticle selon la catégorie\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">  const\u003C/span>\u003Cspan style=\"color:#79B8FF\"> schemaType\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> article.isNews \u003C/span>\u003Cspan style=\"color:#F97583\">?\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> 'NewsArticle'\u003C/span>\u003Cspan style=\"color:#F97583\"> :\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> 'Article'\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\">  // Image OG : URL directe vers le CDN, pas via next/image\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">  // Discover doit pouvoir accéder à l'image sans exécuter JS\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">  const\u003C/span>\u003Cspan style=\"color:#79B8FF\"> ogImageUrl\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> `${\u003C/span>\u003Cspan style=\"color:#E1E4E8\">article\u003C/span>\u003Cspan style=\"color:#9ECBFF\">.\u003C/span>\u003Cspan style=\"color:#E1E4E8\">heroImage\u003C/span>\u003Cspan style=\"color:#9ECBFF\">}?w=1200&#x26;h=675&#x26;fit=crop&#x26;auto=format`\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\"> ogImageSquare\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> `${\u003C/span>\u003Cspan style=\"color:#E1E4E8\">article\u003C/span>\u003Cspan style=\"color:#9ECBFF\">.\u003C/span>\u003Cspan style=\"color:#E1E4E8\">heroImage\u003C/span>\u003Cspan style=\"color:#9ECBFF\">}?w=1200&#x26;h=1200&#x26;fit=crop&#x26;auto=format`\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">  const\u003C/span>\u003Cspan style=\"color:#79B8FF\"> schema\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    '@context'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'https://schema.org'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    '@type'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: schemaType,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    headline: article.title,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    description: article.excerpt,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    image: [\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      { \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'@type'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'ImageObject'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, url: ogImageUrl, width: \u003C/span>\u003Cspan style=\"color:#79B8FF\">1200\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, height: \u003C/span>\u003Cspan style=\"color:#79B8FF\">675\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> },\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      { \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'@type'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'ImageObject'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, url: ogImageSquare, width: \u003C/span>\u003Cspan style=\"color:#79B8FF\">1200\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, height: \u003C/span>\u003Cspan style=\"color:#79B8FF\">1200\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\">    datePublished: article.publishedAt,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    dateModified: article.modifiedAt,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    author: {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">      '@type'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'Person'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      name: article.author.name,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      url: article.author.url,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      sameAs: article.author.socials\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    },\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    isAccessibleForFree: \u003C/span>\u003Cspan style=\"color:#79B8FF\">true\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  };\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">  return\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> (\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    &#x3C;\u003C/span>\u003Cspan style=\"color:#B392F0\">Head\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">      &#x3C;\u003C/span>\u003Cspan style=\"color:#E1E4E8\">meta name\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"robots\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> content\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"index, follow, max-image-preview:large, max-snippet:-1\"\u003C/span>\u003Cspan style=\"color:#F97583\"> />\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">      &#x3C;\u003C/span>\u003Cspan style=\"color:#E1E4E8\">meta property\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"og:image\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> content\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\">{ogImageUrl} \u003C/span>\u003Cspan style=\"color:#F97583\">/>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">      &#x3C;\u003C/span>\u003Cspan style=\"color:#E1E4E8\">meta property\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"og:image:width\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> content\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"1200\"\u003C/span>\u003Cspan style=\"color:#F97583\"> />\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">      &#x3C;\u003C/span>\u003Cspan style=\"color:#E1E4E8\">meta property\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"og:image:height\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> content\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"675\"\u003C/span>\u003Cspan style=\"color:#F97583\"> />\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">      &#x3C;\u003C/span>\u003Cspan style=\"color:#FFAB70\">script\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        type\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"application/ld+json\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        dangerouslySetInnerHTML\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\">{{ \u003C/span>\u003Cspan style=\"color:#B392F0\">__html\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#79B8FF\">JSON\u003C/span>\u003Cspan style=\"color:#E1E4E8\">.\u003C/span>\u003Cspan style=\"color:#B392F0\">stringify\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(schema) }}\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">      />\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    &#x3C;/\u003C/span>\u003Cspan style=\"color:#E1E4E8\">Head\u003C/span>\u003Cspan style=\"color:#F97583\">>\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>Le résultat\u003C/h3>\n\u003Cp>Après déploiement des corrections :\u003C/p>\n\u003Cul>\n\u003Cli>\u003Cstrong>J+3\u003C/strong> : les impressions Discover remontent de 7,8M à 9,5M (le pipeline News recommence à distribuer)\u003C/li>\n\u003Cli>\u003Cstrong>J+7\u003C/strong> : retour à 11,2M d'impressions (95% du niveau pré-migration)\u003C/li>\n\u003Cli>\u003Cstrong>J+14\u003C/strong> : stabilisation à 12,6M — supérieur au niveau initial, grâce à la double image (16:9 + 1:1) qui a augmenté le taux de sélection en large card\u003C/li>\n\u003C/ul>\n\u003Cp>Le trafic Discover perdu représentait ~300K sessions/mois pendant 10 jours, soit un manque à gagner estimé à 45K€ en revenus publicitaires pour ce média. Une régression de ce type, silencieuse dans les métriques Search classiques, n'est détectable que par un monitoring dédié du rapport Discover dans Search Console — ou par un outil de monitoring comme Seogard qui alerte automatiquement quand les meta robots ou les structured data changent sur un template critique.\u003C/p>\n\u003Ch2>Stratégie pipeline-aware : optimiser pour le bon canal\u003C/h2>\n\u003Cp>Comprendre l'existence des pipelines change la stratégie éditoriale. Vous ne publiez plus \"pour Discover\" en général — vous ciblez un pipeline spécifique.\u003C/p>\n\u003Ch3>Pipeline News/Breaking : la course au timing\u003C/h3>\n\u003Cp>Ce pipeline valorise la vélocité. Le premier publisher à couvrir un sujet en spike a un avantage disproportionné. L'étude montre que les 2-3 premières sources indexées sur un topic en trending captent 70%+ des impressions du pipeline.\u003C/p>\n\u003Cp>Implications pratiques :\u003C/p>\n\u003Cul>\n\u003Cli>Configurez des alertes \u003Ca href=\"https://trends.google.com/trending\">Google Trends\u003C/a> en temps réel sur vos verticales\u003C/li>\n\u003Cli>Réduisez le time-to-index : utilisez l'\u003Ca href=\"https://developers.google.com/search/apis/indexing-api/v3/quickstart\">API d'indexation Google\u003C/a> pour les contenus éligibles (pages avec schema \u003Ccode>NewsArticle\u003C/code> ou \u003Ccode>JobPosting\u003C/code>)\u003C/li>\n\u003Cli>Pré-produisez des templates pour les événements prévisibles (keynotes Apple, résultats trimestriels, élections)\u003C/li>\n\u003C/ul>\n\u003Cp>Le rapport Discover de Search Console, combiné à l'\u003Ca href=\"/blog/search-console-api-automatiser-le-reporting-seo\">API Search Console\u003C/a>, vous permet de mesurer précisément quels articles ont capté du trafic pipeline News vs Evergreen, en corrélant \u003Ccode>datePublished\u003C/code> et la courbe d'impressions.\u003C/p>\n\u003Ch3>Pipeline Evergreen/Interest : le jeu long\u003C/h3>\n\u003Cp>Ce pipeline est plus intéressant pour le ROI long-terme. Un article evergreen qui entre dans ce pipeline peut générer du trafic Discover pendant des mois, avec des résurgences périodiques.\u003C/p>\n\u003Cp>Les signaux clés pour ce pipeline :\u003C/p>\n\u003Cul>\n\u003Cli>Contenu approfondi (> 2000 mots) avec des entités clairement définies\u003C/li>\n\u003Cli>Mise à jour régulière de \u003Ccode>dateModified\u003C/code> (pas du \u003Ca href=\"/blog/thin-content-quand-vos-pages-nuisent-au-seo-global\">thin content\u003C/a> statique)\u003C/li>\n\u003Cli>Engagement signal fort : les articles qui génèrent du temps de lecture élevé et peu de pogo-sticking sont redistribués\u003C/li>\n\u003C/ul>\n\u003Cp>Un piège courant : la tentation de republier un article avec une nouvelle \u003Ccode>datePublished\u003C/code> pour le rendre \"frais\". Google a spécifiquement adressé ce problème — les articles dont le contenu n'a pas substantiellement changé mais dont la date a été mise à jour sont pénalisés dans Discover. Le \u003Ca href=\"/blog/contenu-duplique-causes-techniques-et-solutions\">contenu dupliqué déguisé en mise à jour\u003C/a> est un anti-pattern dangereux.\u003C/p>\n\u003Ch3>Pipeline Video : le levier sous-exploité\u003C/h3>\n\u003Cp>Le pipeline vidéo est le moins saturé et offre le meilleur ratio effort/visibilité pour les publishers qui ne sont pas des pure players vidéo. L'étude montre que les articles contenant une vidéo intégrée (pas seulement un lien YouTube) ont 2,4x plus de chances d'être sélectionnés par ce pipeline.\u003C/p>\n\u003Cp>Le balisage \u003Ccode>VideoObject\u003C/code> dans le structured data est le signal technique déclencheur :\u003C/p>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">&#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">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\": \"VideoObject\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  \"name\": \"Comment fonctionnent les pipelines Google Discover\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  \"description\": \"Explication technique des 20 pipelines de distribution Discover\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  \"thumbnailUrl\": \"https://media.votresite.fr/videos/discover-thumb.jpg\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  \"uploadDate\": \"2026-04-09T08:00:00+02:00\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  \"duration\": \"PT4M30S\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  \"contentUrl\": \"https://media.votresite.fr/videos/discover-pipelines.mp4\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  \"embedUrl\": \"https://www.youtube.com/embed/XXXXX\"\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\u003Ch2>Monitoring et détection des régressions Discover\u003C/h2>\n\u003Cp>Le rapport Discover de Search Console est votre première ligne de défense, mais il a des limites : données disponibles avec 48-72h de retard, pas de segmentation par pipeline, pas d'alerte automatique.\u003C/p>\n\u003Ch3>Automatiser la surveillance\u003C/h3>\n\u003Cp>Les \u003Ca href=\"/blog/google-search-console-les-rapports-que-vous-ignorez\">rapports Search Console que la plupart des équipes ignorent\u003C/a> incluent justement les données Discover. Mais pour un monitoring proactif, vous devez aller plus loin.\u003C/p>\n\u003Cp>Un script de surveillance basique via l'API Search Console :\u003C/p>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># discover_monitor.py — Alerte si les impressions Discover chutent de > 20%\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">from\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> google.oauth2.credentials \u003C/span>\u003Cspan style=\"color:#F97583\">import\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> Credentials\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">from\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> googleapiclient.discovery \u003C/span>\u003Cspan style=\"color:#F97583\">import\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> build\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">from\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> datetime \u003C/span>\u003Cspan style=\"color:#F97583\">import\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> datetime, timedelta\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">import\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> statistics\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">creds \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> Credentials.from_authorized_user_file(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'credentials.json'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">service \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> build(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'searchconsole'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'v1'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#FFAB70\">credentials\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\">creds)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">site_url \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> 'sc-domain:votresite.fr'\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">def\u003C/span>\u003Cspan style=\"color:#B392F0\"> get_discover_data\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(start_date, end_date):\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    response \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> service.searchanalytics().query(\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FFAB70\">        siteUrl\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\">site_url,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FFAB70\">        body\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\">{\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">            'startDate'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: start_date,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">            'endDate'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: end_date,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">            'dimensions'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: [\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'date'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">],\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">            'type'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'discover'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,  \u003C/span>\u003Cspan style=\"color:#6A737D\"># Clé : filtrer sur le type Discover\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">            'rowLimit'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#79B8FF\">1000\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        }\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    ).execute()\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    return\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> response.get(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'rows'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, [])\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Comparer les 7 derniers jours vs les 7 jours précédents\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">today \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> datetime.now()\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">recent \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> get_discover_data(\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    (today \u003C/span>\u003Cspan style=\"color:#F97583\">-\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> timedelta(\u003C/span>\u003Cspan style=\"color:#FFAB70\">days\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#79B8FF\">9\u003C/span>\u003Cspan style=\"color:#E1E4E8\">)).strftime(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'%Y-%m-\u003C/span>\u003Cspan style=\"color:#79B8FF\">%d\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">),\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    (today \u003C/span>\u003Cspan style=\"color:#F97583\">-\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> timedelta(\u003C/span>\u003Cspan style=\"color:#FFAB70\">days\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#79B8FF\">3\u003C/span>\u003Cspan style=\"color:#E1E4E8\">)).strftime(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'%Y-%m-\u003C/span>\u003Cspan style=\"color:#79B8FF\">%d\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">)  \u003C/span>\u003Cspan style=\"color:#6A737D\"># 48h de délai\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">previous \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> get_discover_data(\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    (today \u003C/span>\u003Cspan style=\"color:#F97583\">-\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> timedelta(\u003C/span>\u003Cspan style=\"color:#FFAB70\">days\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#79B8FF\">16\u003C/span>\u003Cspan style=\"color:#E1E4E8\">)).strftime(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'%Y-%m-\u003C/span>\u003Cspan style=\"color:#79B8FF\">%d\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">),\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    (today \u003C/span>\u003Cspan style=\"color:#F97583\">-\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> timedelta(\u003C/span>\u003Cspan style=\"color:#FFAB70\">days\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#79B8FF\">10\u003C/span>\u003Cspan style=\"color:#E1E4E8\">)).strftime(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'%Y-%m-\u003C/span>\u003Cspan style=\"color:#79B8FF\">%d\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\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">recent_impressions \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#79B8FF\"> sum\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(r[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'impressions'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">] \u003C/span>\u003Cspan style=\"color:#F97583\">for\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> r \u003C/span>\u003Cspan style=\"color:#F97583\">in\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> recent)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">previous_impressions \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#79B8FF\"> sum\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(r[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'impressions'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">] \u003C/span>\u003Cspan style=\"color:#F97583\">for\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> r \u003C/span>\u003Cspan style=\"color:#F97583\">in\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> previous)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">if\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> previous_impressions \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\">    change_pct \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> ((recent_impressions \u003C/span>\u003Cspan style=\"color:#F97583\">-\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> previous_impressions) \u003C/span>\u003Cspan style=\"color:#F97583\">/\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> previous_impressions) \u003C/span>\u003Cspan style=\"color:#F97583\">*\u003C/span>\u003Cspan style=\"color:#79B8FF\"> 100\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    if\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> change_pct \u003C/span>\u003Cspan style=\"color:#F97583\">&#x3C;\u003C/span>\u003Cspan style=\"color:#F97583\"> -\u003C/span>\u003Cspan style=\"color:#79B8FF\">20\u003C/span>\u003Cspan style=\"color:#E1E4E8\">:\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">        print\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#F97583\">f\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"⚠️ ALERTE: Impressions Discover en baisse de \u003C/span>\u003Cspan style=\"color:#79B8FF\">{\u003C/span>\u003Cspan style=\"color:#E1E4E8\">change_pct\u003C/span>\u003Cspan style=\"color:#F97583\">:.1f\u003C/span>\u003Cspan style=\"color:#79B8FF\">}\u003C/span>\u003Cspan style=\"color:#9ECBFF\">%\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">        print\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#F97583\">f\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"   Période récente: \u003C/span>\u003Cspan style=\"color:#79B8FF\">{\u003C/span>\u003Cspan style=\"color:#E1E4E8\">recent_impressions\u003C/span>\u003Cspan style=\"color:#F97583\">:,\u003C/span>\u003Cspan style=\"color:#79B8FF\">}\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> impressions\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">        print\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#F97583\">f\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"   Période précédente: \u003C/span>\u003Cspan style=\"color:#79B8FF\">{\u003C/span>\u003Cspan style=\"color:#E1E4E8\">previous_impressions\u003C/span>\u003Cspan style=\"color:#F97583\">:,\u003C/span>\u003Cspan style=\"color:#79B8FF\">}\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> impressions\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">        # Déclencher notification Slack/email ici\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    else\u003C/span>\u003Cspan style=\"color:#E1E4E8\">:\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">        print\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#F97583\">f\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"✓ Discover stable: \u003C/span>\u003Cspan style=\"color:#79B8FF\">{\u003C/span>\u003Cspan style=\"color:#E1E4E8\">change_pct\u003C/span>\u003Cspan style=\"color:#F97583\">:+.1f\u003C/span>\u003Cspan style=\"color:#79B8FF\">}\u003C/span>\u003Cspan style=\"color:#9ECBFF\">% (\u003C/span>\u003Cspan style=\"color:#79B8FF\">{\u003C/span>\u003Cspan style=\"color:#E1E4E8\">recent_impressions\u003C/span>\u003Cspan style=\"color:#F97583\">:,\u003C/span>\u003Cspan style=\"color:#79B8FF\">}\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> impressions)\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">)\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>Ce script détecte les chutes globales, mais pas les causes. Pour identifier si la régression vient d'un changement technique (meta robots, structured data, image OG), vous avez besoin d'un monitoring qui audite en continu les templates critiques et corrèle les changements techniques avec les variations de trafic Discover.\u003C/p>\n\u003Ch3>Les signaux d'alerte à surveiller\u003C/h3>\n\u003Cp>En s'appuyant sur les \u003Ca href=\"/blog/mesurer-l-impact-seo-technique-quels-kpis-suivre\">KPIs techniques pertinents pour le SEO\u003C/a>, voici les métriques spécifiques Discover à monitorer :\u003C/p>\n\u003Cul>\n\u003Cli>\u003Cstrong>Impressions/jour\u003C/strong> par top 50 URLs Discover (chute > 30% = investigation immédiate)\u003C/li>\n\u003Cli>\u003Cstrong>CTR moyen\u003C/strong> par type de contenu (si le CTR chute mais les impressions sont stables, c'est un problème de card preview, pas de distribution)\u003C/li>\n\u003Cli>\u003Cstrong>Ratio large card / standard card\u003C/strong> : non disponible directement dans l'API, mais déductible des variations de CTR par article\u003C/li>\n\u003Cli>\u003Cstrong>Temps de réponse des images OG\u003C/strong> : un CDN lent tue la qualité de la card\u003C/li>\n\u003C/ul>\n\u003Cp>Les équipes qui \u003Ca href=\"/blog/automatiser-les-checks-seo-dans-le-ci-cd\">automatisent leurs checks SEO dans le CI/CD\u003C/a> ont un avantage structurel : chaque déploiement vérifie que les meta robots, structured data, et images OG sont conformes aux exigences Discover avant la mise en production.\u003C/p>\n\u003Ch2>L'impact des product feeds et du contenu AI sur Discover\u003C/h2>\n\u003Cp>L'étude révèle un pipeline Discover dédié au contenu shopping/product, ce qui confirme que \u003Ca href=\"/blog/why-product-feeds-need-an-organic-strategy-for-ai-search\">les product feeds nécessitent une stratégie organique\u003C/a> — Discover est un canal de distribution directe pour les fiches produit, pas seulement pour le contenu éditorial.\u003C/p>\n\u003Cp>Pour les e-commerce, le pipeline shopping Discover sélectionne des produits basés sur l'historique d'intérêt de l'utilisateur, mais aussi sur les signaux de prix (promotions, baisses de prix détectées via le Merchant Center). C'est un levier de trafic gratuit que la plupart des e-commerce ignorent complètement.\u003C/p>\n\u003Cp>Quant au \u003Ca href=\"/blog/contenu-genere-automatiquement-et-seo-ce-que-google-accepte\">contenu généré automatiquement\u003C/a>, l'étude ne montre pas de pénalité spécifique Discover pour le contenu AI — mais le scoring d'engagement prédictif défavorise naturellement le contenu générique. Un article AI qui n'apporte pas d'angle original sera scoré faiblement par le modèle de CTR prédictif et ne passera jamais le seuil de distribution des pipelines à fort volume.\u003C/p>\n\u003Ch2>Ce que ça change pour votre stratégie\u003C/h2>\n\u003Cp>Ces données confirment que Discover n'est pas un bonus aléatoire — c'est un canal de distribution structuré, avec des règles techniques précises et des leviers d'optimisation mesurables. Les publishers qui traitent Discover comme un canal à part entière (avec ses propres KPIs, ses propres templates optimisés, et son propre monitoring) captent une part disproportionnée du trafic.\u003C/p>\n\u003Cp>L'insight le plus actionable de cette analyse : arrêtez de penser \"mon article est-il bon pour Discover ?\" et commencez à penser \"quel pipeline vais-je cibler, et ai-je les prérequis techniques pour y être éligible ?\". La différence entre un article à 5K impressions et un article à 500K impressions, c'est souvent une directive meta robots manquante, une image OG mal servie, ou un schéma \u003Ccode>Article\u003C/code> au lieu de \u003Ccode>NewsArticle\u003C/code>. Des régressions techniques silencieuses que seul un monitoring continu — via Seogard ou un équivalent — peut détecter avant qu'elles ne coûtent des dizaines de milliers d'euros de trafic perdu.\u003C/p>",null,14,[18,19,20,21,22],"google discover","pipelines","feed optimization","structured data","publisher SEO","Inside Google Discover : 20 pipelines, 42M cards décryptés","Thu Apr 09 2026 20:03:21 GMT+0000 (Coordinated Universal Time)",[26,41,55],{"_id":27,"slug":28,"__v":6,"author":7,"canonical":29,"category":10,"createdAt":30,"date":12,"description":31,"image":15,"imageAlt":15,"readingTime":32,"tags":33,"title":39,"updatedAt":40},"69d724dbaa6b273b0cf88f96","how-ai-search-defines-market-relevance-beyond-hreflang","https://seogard.io/blog/how-ai-search-defines-market-relevance-beyond-hreflang","2026-04-09T04:02:35.927Z","Hreflang ne suffit plus. Découvrez les signaux que l'IA utilise pour sélectionner vos pages locales dans les réponses générées par marché.",12,[34,35,36,37,38],"search","market relevance","hreflang","AI search","international SEO","AI Search : comment la pertinence locale se joue au-delà de hreflang","Thu Apr 09 2026 04:02:35 GMT+0000 (Coordinated Universal Time)",{"_id":42,"slug":43,"__v":6,"author":7,"canonical":44,"category":10,"createdAt":45,"date":12,"description":46,"image":15,"imageAlt":15,"readingTime":32,"tags":47,"title":53,"updatedAt":54},"69d75d2baa6b273b0c25874d","google-confirms-march-2026-core-update-is-complete-via-sejournal-mattgsouthern","https://seogard.io/blog/google-confirms-march-2026-core-update-is-complete-via-sejournal-mattgsouthern","2026-04-09T08:02:51.680Z","Le core update de mars 2026 est terminé. Méthodologie d'analyse, signaux à surveiller, requêtes GSC et scénarios concrets pour mesurer l'impact réel.",[48,49,50,51,52],"google","core update","march 2026","search console","analyse SEO","March 2026 Core Update : analyse technique post-rollout","Thu Apr 09 2026 08:02:51 GMT+0000 (Coordinated Universal Time)",{"_id":56,"slug":57,"__v":6,"author":7,"canonical":58,"category":10,"createdAt":59,"date":12,"description":60,"image":15,"imageAlt":15,"readingTime":32,"tags":61,"title":67,"updatedAt":68},"69d83b46aa6b273b0cd6f586","how-to-measure-intent-gaps-using-google-search-console-data","https://seogard.io/blog/how-to-measure-intent-gaps-using-google-search-console-data","2026-04-09T23:50:30.959Z","Méthode technique pour détecter les décalages entre l'intention de recherche réelle et le positionnement de vos pages via les données GSC.",[62,63,64,65,66],"intent gaps","Google Search Console","search intent","GSC API","SEO technique","Mesurer les intent gaps avec Google Search Console","Thu Apr 09 2026 23:50:30 GMT+0000 (Coordinated Universal Time)"]