[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fc-VJPanjGzPLmiGnp7-zIQ1UkUsCGdCb7NzxOns4YQ0":3,"$f_TadaxCfimf3De-h-cruuyBOsk7_lXUCVpEOR1W2wTs":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},"69fe254aaa6b273b0c5bb7e7","google-to-no-longer-support-faq-rich-results",0,"Equipe Seogard","## Le contexte : une suppression annoncée, un impact sous-estimé\n\nEn août 2023, Google a commencé à restreindre les FAQ rich results aux sites dits « à forte autorité » (sites gouvernementaux, santé). Depuis, le déploiement s'est élargi : **les FAQ rich results ne s'affichent plus pour la majorité des sites dans les résultats de recherche**, et les rapports associés dans Search Console sont en cours de suppression.\n\nCe n'est pas un ajustement mineur. Les FAQ rich results ont été, pendant quatre ans, l'un des leviers les plus exploités pour augmenter la surface SERP occupée par un résultat organique — parfois doublant ou triplant la hauteur d'un snippet. Pour certains sites, c'était la principale source de CTR différentiel entre eux et leurs concurrents directs.\n\nLa question n'est plus « est-ce que ça va arriver » mais « qu'est-ce que vous faites du balisage `FAQPage` qui traîne sur des milliers de pages, et comment vous récupérez le CTR perdu ».\n\n## Pourquoi Google a tué les FAQ rich results\n\n### Le problème de l'abus à l'échelle\n\nLe schéma `FAQPage` a été massivement détourné. L'intention initiale — permettre aux pages qui contiennent réellement une FAQ éditoriale de l'afficher enrichie — a été noyée sous les implémentations opportunistes. Des sites e-commerce collaient du balisage FAQ sur chaque page catégorie avec des questions générées automatiquement du type « Quel est le meilleur [produit] en 2024 ? ». Des blogs ajoutaient des FAQ de 10 questions pour des articles de 500 mots.\n\nGoogle a constaté que la qualité perçue des SERP se dégradait. Les FAQ rich results prenaient un espace disproportionné sans fournir de valeur informationnelle réelle. Le ratio signal/bruit était devenu intenable.\n\n### L'alignement avec la stratégie AI Overviews\n\nL'autre facteur, rarement discuté : les FAQ rich results entraient en conflit direct avec les AI Overviews. Quand Google génère une réponse synthétique en haut de SERP, afficher en dessous une FAQ dépliable avec des réponses fragmentées crée une redondance visuelle et informationnelle. La suppression des FAQ rich results libère de l'espace SERP pour les fonctionnalités IA que Google pousse activement.\n\nC'est un pattern récurrent : Google retire les features structured data qui concurrencent ses propres formats de réponse. Les [évolutions récentes des liens dans les AI Overviews](/blog/google-updates-links-within-ai-overviews-ai-mode) confirment cette direction — Google veut contrôler la couche de présentation, pas la déléguer au balisage des webmasters.\n\n## Audit technique : identifier et quantifier l'impact sur votre site\n\nAvant de toucher quoi que ce soit, vous devez mesurer l'étendue du problème.\n\n### Étape 1 : Lister toutes les pages avec balisage FAQPage\n\nAvec Screaming Frog, lancez un crawl avec l'extraction de données structurées activée :\n\n```bash\n# Configuration Screaming Frog CLI (si vous utilisez la version en ligne de commande)\nscreamingfrog --crawl https://www.votresite.fr \\\n  --headless \\\n  --save-crawl \\\n  --export-tabs \"Structured Data:All\" \\\n  --output-folder /tmp/audit-faq/\n\n# Filtrez ensuite les résultats pour le type FAQPage\ncat /tmp/audit-faq/structured_data_all.csv | \\\n  grep \"FAQPage\" | \\\n  awk -F',' '{print $1}' | \\\n  sort -u > /tmp/audit-faq/pages_with_faq.txt\n\nwc -l /tmp/audit-faq/pages_with_faq.txt\n```\n\nSi vous n'avez pas Screaming Frog CLI, l'interface graphique fait le même travail : Configuration > Spider > Extraction > cochez « Structured Data ». Après le crawl, allez dans l'onglet « Structured Data » et filtrez sur `FAQPage`.\n\n### Étape 2 : Croiser avec les données Search Console\n\nL'objectif est d'identifier les pages qui bénéficiaient réellement d'impressions FAQ rich results — pas juste celles qui avaient le balisage.\n\nDans Search Console, le rapport « Améliorations > FAQ » est en cours de suppression, mais tant qu'il est disponible, exportez-le. Sinon, utilisez l'API Search Console pour extraire les données historiques de performance par page :\n\n```python\n# Extraction via l'API Search Console (Python + google-api-python-client)\nfrom googleapiclient.discovery import build\nfrom google.oauth2.service_account import Credentials\nimport csv\nfrom datetime import datetime, timedelta\n\nSCOPES = ['https://www.googleapis.com/auth/webmasters.readonly']\nSERVICE_ACCOUNT_FILE = 'service-account.json'\n\ncredentials = Credentials.from_service_account_file(\n    SERVICE_ACCOUNT_FILE, scopes=SCOPES\n)\nservice = build('searchconsole', 'v1', credentials=credentials)\n\nSITE_URL = 'https://www.votresite.fr'\n\n# Période AVANT la suppression des FAQ rich results\n# Ajustez selon la date effective pour votre site\nstart_date = '2023-06-01'\nend_date = '2023-08-01'\n\n# Charger les URLs avec balisage FAQ\nwith open('/tmp/audit-faq/pages_with_faq.txt') as f:\n    faq_urls = [line.strip() for line in f.readlines()]\n\nresults = []\n# L'API limite à 25 000 lignes par requête\n# Pour un gros site, paginez avec startRow\nrequest_body = {\n    'startDate': start_date,\n    'endDate': end_date,\n    'dimensions': ['page'],\n    'rowLimit': 25000,\n    'dimensionFilterGroups': [{\n        'filters': [{\n            'dimension': 'searchAppearance',\n            'expression': 'FAQ_RICH_RESULT'\n        }]\n    }]\n}\n\nresponse = service.searchanalytics().query(\n    siteUrl=SITE_URL,\n    body=request_body\n).execute()\n\nwith open('/tmp/audit-faq/faq_performance.csv', 'w', newline='') as csvfile:\n    writer = csv.writer(csvfile)\n    writer.writerow(['url', 'clicks', 'impressions', 'ctr', 'position'])\n    for row in response.get('rows', []):\n        writer.writerow([\n            row['keys'][0],\n            row['clicks'],\n            row['impressions'],\n            round(row['ctr'], 4),\n            round(row['position'], 1)\n        ])\n\nprint(f\"Pages avec FAQ rich results actifs : {len(response.get('rows', []))}\")\n```\n\nLe filtre `searchAppearance: FAQ_RICH_RESULT` est la clé. Il vous donne uniquement les pages qui ont effectivement généré des impressions avec le rich result FAQ affiché — pas celles qui avaient le balisage mais sans affichage.\n\n### Étape 3 : Quantifier le delta CTR\n\nComparez le CTR des mêmes pages avant et après la suppression. Si la suppression est déjà effective pour votre site, prenez la période actuelle comme « après ». Le delta typique se situe entre 8% et 30% de CTR perdu, selon la proportion de l'espace SERP que la FAQ occupait et le niveau de concurrence.\n\n## Scénario concret : un site e-commerce de 12 000 pages\n\nPrenons un cas réaliste. Un e-commerce spécialisé en équipement outdoor, 12 000 pages indexées (800 pages catégories, 10 500 fiches produits, 700 articles de blog). L'équipe SEO avait déployé du balisage `FAQPage` sur :\n\n- **Les 800 pages catégories** : 3-5 questions générées par template (« Quelle est la meilleure tente 2 places ? », « Comment choisir ses chaussures de randonnée ? »)\n- **350 articles de blog** : FAQ reprenant les sous-titres de l'article sous forme de questions\n\nDonnées avant suppression (moyenne mensuelle, période janvier-juillet 2023) :\n- Pages catégories avec FAQ rich result affiché : **420 sur 800** (53%)\n- CTR moyen des pages catégories avec FAQ : **4.8%**\n- CTR moyen des pages catégories sans FAQ : **3.1%**\n- Trafic mensuel attribuable au différentiel CTR FAQ : **~2 800 visites**\n\nDonnées après suppression (octobre 2023 - mars 2024) :\n- CTR moyen des pages catégories (toutes) : **3.3%**\n- Perte de trafic mensuel estimée : **~2 200 visites**\n\nSoit une perte annuelle de **~26 000 visites qualifiées** sur les pages catégories seules. Pour un site avec un revenu par visite organique de 1,80€, c'est ~47 000€/an de manque à gagner.\n\nCe scénario n'a rien d'exceptionnel. Il illustre pourquoi la réaction « c'est juste un affichage en moins » est dangereusement naïve.\n\n## Faut-il supprimer le balisage FAQPage ?\n\nLa réponse courte : **oui, dans la majorité des cas**. Mais pas pour les raisons que vous croyez.\n\n### Le balisage orphelin n'est pas neutre\n\nUn balisage `FAQPage` qui ne génère plus de rich result n'est pas techniquement « nocif » au sens d'une pénalité. Google ne va pas déclasser votre page parce qu'elle contient un schéma valide mais non affiché. Cependant :\n\n1. **Il alourdit le DOM** — chaque bloc JSON-LD ajoute du poids au HTML initial. Sur des pages catégories déjà lourdes, avec des fiches produits lazy-loaded et du balisage `Product`, `BreadcrumbList`, `Organization`, le JSON-LD FAQ ajoute typiquement 2-5 Ko de données inutiles.\n\n2. **Il brouille le signal de données structurées** — Googlebot parse tous les blocs de données structurées. Un balisage FAQ de qualité médiocre (questions auto-générées, réponses vagues) envoie un signal de qualité négatif sur la page, même sans affichage rich result.\n\n3. **Il crée de la dette technique** — du code que personne ne maintient mais que tout le monde hérite. Quand un développeur modifie le template de page catégorie, il doit comprendre et maintenir un bloc JSON-LD qui ne sert plus à rien.\n\n### L'exception : les sites « à forte autorité »\n\nGoogle continue d'afficher les FAQ rich results pour les sites gouvernementaux et les sources de santé faisant autorité. Si vous êtes dans cette catégorie (sites `.gouv.fr`, établissements de santé référencés, organismes publics), conservez le balisage et assurez-vous qu'il reste valide.\n\nPour tous les autres, procédez au nettoyage.\n\n### Plan de suppression technique\n\nVoici un exemple de script qui nettoie les blocs `FAQPage` du JSON-LD sans toucher aux autres types de données structurées. Adapté pour un site Next.js qui génère le JSON-LD côté serveur :\n\n```typescript\n// utils/cleanStructuredData.ts\n// Supprime les blocs FAQPage du JSON-LD avant injection dans le \u003Chead>\n\ninterface StructuredDataBlock {\n  '@type': string | string[];\n  '@context'?: string;\n  [key: string]: unknown;\n}\n\ntype StructuredData = StructuredDataBlock | StructuredDataBlock[];\n\nexport function removeFaqSchema(jsonLd: StructuredData): StructuredData | null {\n  // Cas 1 : un seul objet\n  if (!Array.isArray(jsonLd)) {\n    const types = Array.isArray(jsonLd['@type'])\n      ? jsonLd['@type']\n      : [jsonLd['@type']];\n\n    if (types.includes('FAQPage')) {\n      return null; // Suppression complète\n    }\n\n    // Vérifier les sous-objets @graph\n    if (jsonLd['@graph'] && Array.isArray(jsonLd['@graph'])) {\n      const filtered = (jsonLd['@graph'] as StructuredDataBlock[]).filter(\n        (item) => {\n          const itemTypes = Array.isArray(item['@type'])\n            ? item['@type']\n            : [item['@type']];\n          return !itemTypes.includes('FAQPage');\n        }\n      );\n\n      if (filtered.length === 0) return null;\n\n      return { ...jsonLd, '@graph': filtered };\n    }\n\n    return jsonLd;\n  }\n\n  // Cas 2 : tableau de blocs\n  const filtered = jsonLd.filter((block) => {\n    const types = Array.isArray(block['@type'])\n      ? block['@type']\n      : [block['@type']];\n    return !types.includes('FAQPage');\n  });\n\n  if (filtered.length === 0) return null;\n  if (filtered.length === 1) return filtered[0];\n  return filtered;\n}\n\n// Utilisation dans un composant Next.js (App Router)\n// app/category/[slug]/page.tsx\n//\n// const cleanedJsonLd = removeFaqSchema(originalJsonLd);\n// if (cleanedJsonLd) {\n//   return (\n//     \u003Cscript\n//       type=\"application/ld+json\"\n//       dangerouslySetInnerHTML={{ __html: JSON.stringify(cleanedJsonLd) }}\n//     />\n//   );\n// }\n```\n\nCe script gère les trois cas courants : un bloc JSON-LD unique de type `FAQPage`, un `@graph` contenant un mélange de types, et un tableau de blocs autonomes. Testez-le sur votre staging avant déploiement — et validez avec le [test de résultats enrichis de Google](https://search.google.com/test/rich-results) que vos autres types de données structurées restent intacts.\n\n## Récupérer le CTR perdu : stratégies de remplacement\n\nSupprimer le balisage FAQ ne résout que la moitié du problème. L'autre moitié, c'est compenser la perte de surface SERP.\n\n### Miser sur les données structurées qui fonctionnent encore\n\nPlusieurs types de rich results restent pleinement supportés et offrent un gain de CTR mesurable :\n\n**`HowTo`** — pour les contenus éditoriaux qui décrivent un processus. Attention : Google a aussi restreint HowTo en août 2023, mais il reste affiché pour les requêtes informationnelles légitimes sur mobile. À tester au cas par cas.\n\n**`Product` et `Review`** — pour l'e-commerce, le balisage produit avec agrégation d'avis reste le levier rich result le plus stable. Si vos pages catégories n'ont pas d'`AggregateRating`, c'est la première chose à implémenter.\n\n**`Article` avec `speakable`** — pour les sites médias, le balisage `speakable` permet à Google Assistant de lire des extraits. Niche, mais différenciant.\n\n**`BreadcrumbList`** — souvent négligé, le fil d'Ariane structuré améliore l'affichage de l'URL dans les SERPs. C'est un petit gain, mais il est systématique et fiable.\n\n### Optimiser pour les « People Also Ask »\n\nLes FAQ rich results sont morts, mais les « People Also Ask » (PAA) sont bien vivants. La différence fondamentale : vous ne contrôlez pas l'affichage PAA via du balisage. Google sélectionne les contenus qui répondent aux questions connexes en se basant sur la pertinence sémantique de votre contenu.\n\nLa stratégie : conservez le **contenu** de vos FAQ (les questions-réponses elles-mêmes) dans le corps de la page, mais supprimez le **balisage** JSON-LD. Structurez les Q&A avec des H3 et des paragraphes de réponse concis (40-60 mots). Ce format est celui que Google extrait le plus facilement pour les PAA.\n\nC'est aussi le format que les modèles de langage ingèrent le mieux pour les AI Overviews. Les [signaux qui définissent la visibilité en AI search](/blog/4-signals-that-now-define-visibility-in-ai-search) reposent en grande partie sur la capacité de votre contenu à fournir des réponses extractibles et attribuables.\n\n### Travailler les meta descriptions pour le CTR\n\nSans rich result, votre snippet se réduit au title + meta description + URL. Chaque caractère compte davantage. Passez en revue les meta descriptions de vos pages les plus impactées. Une meta description qui reprend la question principale à laquelle la page répond performe systématiquement mieux qu'une description générique.\n\nVérifiez aussi que vos meta descriptions ne sont pas tronquées ou absentes sur les pages critiques. C'est le type de régression silencieuse qu'un outil de monitoring comme Seogard détecte automatiquement — une meta description qui disparaît après un déploiement peut passer inaperçue pendant des semaines si personne ne surveille.\n\n## Implications pour la stratégie de contenu SEO\n\n### La fin du contenu FAQ comme levier de scaling\n\nBeaucoup de sites avaient industrialisé la production de contenu FAQ : un script qui génère 3 à 5 questions par page à partir des données de Search Console (requêtes liées), un template qui injecte le balisage `FAQPage` automatiquement. Cette approche perd son ROI principal.\n\nCela rejoint un mouvement plus large. Google resserre les critères de qualité sur le contenu scalé. Les [seuils de qualité appliqués au contenu IA généré à grande échelle](/blog/google-s-quality-threshold-is-quietly-killing-scaled-ai-content-via-sejournal-taylordanrw) montrent que la quantité sans profondeur éditoriale est de moins en moins viable. La fin des FAQ rich results est un symptôme de cette tendance, pas un événement isolé.\n\n### Rediriger l'effort vers la profondeur thématique\n\nLes ressources que vous consacriez à créer et maintenir du contenu FAQ doivent être réallouées. Deux pistes à fort ROI :\n\n1. **Enrichir les pages existantes** avec du contenu expert qui répond aux questions que le FAQ couvrait, mais de manière intégrée et contextualisée plutôt que sous forme de liste Q&A. Un paragraphe de 150 mots qui traite une objection client dans le flux naturel de la page a plus de valeur SEO qu'une FAQ collée en bas de page.\n\n2. **Créer des contenus hub** qui centralisent l'expertise sur un sujet. Au lieu de 800 pages catégories avec chacune 5 questions FAQ, créez 20 guides approfondis qui couvrent les questions transversales et qui maillent vers les pages catégories. Le [SEO programmatique sémantique](/blog/a-blueprint-for-semantic-programmatic-seo) offre un cadre méthodologique pour ce type de restructuration.\n\n## Monitoring post-migration : ce qu'il faut surveiller\n\nLa suppression du balisage FAQ est un changement à déployer proprement, pas un hotfix à pousser un vendredi soir.\n\n### Checklist de validation\n\n- **Validation des données structurées restantes** : après suppression du FAQ JSON-LD, vérifiez que les autres blocs (Product, BreadcrumbList, Organization) sont toujours syntaxiquement valides. Un JSON-LD malformé peut casser silencieusement tous les rich results de la page.\n- **Monitoring du CTR par segment** : dans Search Console, créez des expressions régulières pour isoler les pages qui avaient du FAQ. Suivez le CTR hebdomadaire pendant 8 semaines minimum.\n- **Vérification du rendu SSR** : si votre balisage FAQ était injecté côté serveur et que vous modifiez le pipeline de rendu, assurez-vous que le SSR n'est pas cassé. Les [leçons JavaScript SEO des sites e-commerce](/blog/5-javascript-seo-lessons-from-top-ecommerce-sites) détaillent les pièges courants.\n- **Suivi des impressions « FAQ » dans Search Console** : tant que le rapport existe, vérifiez qu'il tombe bien à zéro après votre déploiement. Si des impressions FAQ persistent, vous avez probablement un cache CDN qui sert encore l'ancien HTML, ou un composant client-side qui réinjecte le balisage.\n\n### Automatiser la détection de régression\n\nLe risque réel n'est pas le déploiement initial — c'est le déploiement suivant. Un développeur qui ne connaît pas le contexte pourrait réintroduire le balisage FAQ en important un ancien template, ou un plugin CMS pourrait le générer automatiquement après une mise à jour.\n\nC'est précisément le type de régression que Seogard surveille en continu : un balisage structuré qui réapparaît ou disparaît de manière inattendue déclenche une alerte avant que l'impact ne se propage sur des milliers de pages.\n\n## Le signal plus large : Google reprend le contrôle de la SERP\n\nLa suppression des FAQ rich results n'est pas un événement technique isolé. C'est un mouvement stratégique dans la même direction que les AI Overviews, les featured snippets étendus, et la réduction progressive de l'espace accordé aux résultats organiques classiques.\n\nGoogle ne veut plus que les webmasters contrôlent la présentation des résultats via le balisage structuré. Il veut extraire les données, les reformuler, et les présenter dans ses propres formats. Le balisage structuré reste utile — pas comme levier d'affichage, mais comme signal de compréhension sémantique. Google l'utilise pour mieux comprendre vos données, pas pour vous laisser décider comment elles s'affichent.\n\nCette distinction change fondamentalement la manière dont vous devez penser les données structurées. Implémentez-les pour la précision sémantique (un produit est un produit, un prix est un prix, une organisation est une organisation), pas pour « obtenir un rich result ». Les rich results sont un bonus que Google accorde quand ça l'arrange — et qu'il retire quand ça ne l'arrange plus.\n\nLes FAQ rich results viennent de nous le rappeler. Nettoyez votre balisage, réallouez vos efforts vers la profondeur de contenu et les formats que Google favorise aujourd'hui, et mettez en place un monitoring qui vous préviendra la prochaine fois qu'une feature disparaît sous vos pieds.\n```","https://seogard.io/blog/google-to-no-longer-support-faq-rich-results","Actualités SEO","2026-05-08T18:02:50.170Z","2026-05-08","Google supprime les FAQ rich results. Analyse technique de l'impact sur le trafic, le CTR et le balisage structuré, avec un plan de migration concret.","\u003Ch2>Le contexte : une suppression annoncée, un impact sous-estimé\u003C/h2>\n\u003Cp>En août 2023, Google a commencé à restreindre les FAQ rich results aux sites dits « à forte autorité » (sites gouvernementaux, santé). Depuis, le déploiement s'est élargi : \u003Cstrong>les FAQ rich results ne s'affichent plus pour la majorité des sites dans les résultats de recherche\u003C/strong>, et les rapports associés dans Search Console sont en cours de suppression.\u003C/p>\n\u003Cp>Ce n'est pas un ajustement mineur. Les FAQ rich results ont été, pendant quatre ans, l'un des leviers les plus exploités pour augmenter la surface SERP occupée par un résultat organique — parfois doublant ou triplant la hauteur d'un snippet. Pour certains sites, c'était la principale source de CTR différentiel entre eux et leurs concurrents directs.\u003C/p>\n\u003Cp>La question n'est plus « est-ce que ça va arriver » mais « qu'est-ce que vous faites du balisage \u003Ccode>FAQPage\u003C/code> qui traîne sur des milliers de pages, et comment vous récupérez le CTR perdu ».\u003C/p>\n\u003Ch2>Pourquoi Google a tué les FAQ rich results\u003C/h2>\n\u003Ch3>Le problème de l'abus à l'échelle\u003C/h3>\n\u003Cp>Le schéma \u003Ccode>FAQPage\u003C/code> a été massivement détourné. L'intention initiale — permettre aux pages qui contiennent réellement une FAQ éditoriale de l'afficher enrichie — a été noyée sous les implémentations opportunistes. Des sites e-commerce collaient du balisage FAQ sur chaque page catégorie avec des questions générées automatiquement du type « Quel est le meilleur [produit] en 2024 ? ». Des blogs ajoutaient des FAQ de 10 questions pour des articles de 500 mots.\u003C/p>\n\u003Cp>Google a constaté que la qualité perçue des SERP se dégradait. Les FAQ rich results prenaient un espace disproportionné sans fournir de valeur informationnelle réelle. Le ratio signal/bruit était devenu intenable.\u003C/p>\n\u003Ch3>L'alignement avec la stratégie AI Overviews\u003C/h3>\n\u003Cp>L'autre facteur, rarement discuté : les FAQ rich results entraient en conflit direct avec les AI Overviews. Quand Google génère une réponse synthétique en haut de SERP, afficher en dessous une FAQ dépliable avec des réponses fragmentées crée une redondance visuelle et informationnelle. La suppression des FAQ rich results libère de l'espace SERP pour les fonctionnalités IA que Google pousse activement.\u003C/p>\n\u003Cp>C'est un pattern récurrent : Google retire les features structured data qui concurrencent ses propres formats de réponse. Les \u003Ca href=\"/blog/google-updates-links-within-ai-overviews-ai-mode\">évolutions récentes des liens dans les AI Overviews\u003C/a> confirment cette direction — Google veut contrôler la couche de présentation, pas la déléguer au balisage des webmasters.\u003C/p>\n\u003Ch2>Audit technique : identifier et quantifier l'impact sur votre site\u003C/h2>\n\u003Cp>Avant de toucher quoi que ce soit, vous devez mesurer l'étendue du problème.\u003C/p>\n\u003Ch3>Étape 1 : Lister toutes les pages avec balisage FAQPage\u003C/h3>\n\u003Cp>Avec Screaming Frog, lancez un crawl avec l'extraction de données structurées activée :\u003C/p>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Configuration Screaming Frog CLI (si vous utilisez la version en ligne de commande)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">screamingfrog\u003C/span>\u003Cspan style=\"color:#79B8FF\"> --crawl\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> https://www.votresite.fr\u003C/span>\u003Cspan style=\"color:#79B8FF\"> \\\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">  --headless\u003C/span>\u003Cspan style=\"color:#79B8FF\"> \\\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">  --save-crawl\u003C/span>\u003Cspan style=\"color:#79B8FF\"> \\\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">  --export-tabs\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"Structured Data:All\"\u003C/span>\u003Cspan style=\"color:#79B8FF\"> \\\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">  --output-folder\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> /tmp/audit-faq/\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Filtrez ensuite les résultats pour le type FAQPage\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">cat\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> /tmp/audit-faq/structured_data_all.csv\u003C/span>\u003Cspan style=\"color:#F97583\"> |\u003C/span>\u003Cspan style=\"color:#79B8FF\"> \\\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">  grep\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"FAQPage\"\u003C/span>\u003Cspan style=\"color:#F97583\"> |\u003C/span>\u003Cspan style=\"color:#79B8FF\"> \\\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">  awk\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -F\u003C/span>\u003Cspan style=\"color:#9ECBFF\">','\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> '{print $1}'\u003C/span>\u003Cspan style=\"color:#F97583\"> |\u003C/span>\u003Cspan style=\"color:#79B8FF\"> \\\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">  sort\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -u\u003C/span>\u003Cspan style=\"color:#F97583\"> >\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> /tmp/audit-faq/pages_with_faq.txt\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">wc\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -l\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> /tmp/audit-faq/pages_with_faq.txt\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>Si vous n'avez pas Screaming Frog CLI, l'interface graphique fait le même travail : Configuration > Spider > Extraction > cochez « Structured Data ». Après le crawl, allez dans l'onglet « Structured Data » et filtrez sur \u003Ccode>FAQPage\u003C/code>.\u003C/p>\n\u003Ch3>Étape 2 : Croiser avec les données Search Console\u003C/h3>\n\u003Cp>L'objectif est d'identifier les pages qui bénéficiaient réellement d'impressions FAQ rich results — pas juste celles qui avaient le balisage.\u003C/p>\n\u003Cp>Dans Search Console, le rapport « Améliorations > FAQ » est en cours de suppression, mais tant qu'il est disponible, exportez-le. Sinon, utilisez l'API Search Console pour extraire les données historiques de performance par page :\u003C/p>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Extraction via l'API Search Console (Python + google-api-python-client)\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\"> google.oauth2.service_account \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\">import\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> csv\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\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">SCOPES\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> [\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'https://www.googleapis.com/auth/webmasters.readonly'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">]\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">SERVICE_ACCOUNT_FILE\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> 'service-account.json'\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">credentials \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> Credentials.from_service_account_file(\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">    SERVICE_ACCOUNT_FILE\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#FFAB70\">scopes\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#79B8FF\">SCOPES\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">service \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> build(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'searchconsole'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'v1'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#FFAB70\">credentials\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\">credentials)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">SITE_URL\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> 'https://www.votresite.fr'\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Période AVANT la suppression des FAQ rich results\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Ajustez selon la date effective pour votre site\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">start_date \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> '2023-06-01'\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">end_date \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> '2023-08-01'\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Charger les URLs avec balisage FAQ\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">with\u003C/span>\u003Cspan style=\"color:#79B8FF\"> open\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'/tmp/audit-faq/pages_with_faq.txt'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">) \u003C/span>\u003Cspan style=\"color:#F97583\">as\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> f:\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    faq_urls \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> [line.strip() \u003C/span>\u003Cspan style=\"color:#F97583\">for\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> line \u003C/span>\u003Cspan style=\"color:#F97583\">in\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> f.readlines()]\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">results \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> []\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># L'API limite à 25 000 lignes par requête\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Pour un gros site, paginez avec startRow\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">request_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\">'page'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">],\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    'rowLimit'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#79B8FF\">25000\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    'dimensionFilterGroups'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: [{\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">        'filters'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: [{\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">            'dimension'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'searchAppearance'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">            'expression'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'FAQ_RICH_RESULT'\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        }]\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    }]\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">}\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">response \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> service.searchanalytics().query(\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FFAB70\">    siteUrl\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#79B8FF\">SITE_URL\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FFAB70\">    body\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\">request_body\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">).execute()\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">with\u003C/span>\u003Cspan style=\"color:#79B8FF\"> open\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'/tmp/audit-faq/faq_performance.csv'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'w'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#FFAB70\">newline\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">''\u003C/span>\u003Cspan style=\"color:#E1E4E8\">) \u003C/span>\u003Cspan style=\"color:#F97583\">as\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> csvfile:\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    writer \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> csv.writer(csvfile)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    writer.writerow([\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'url'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'clicks'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'impressions'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'ctr'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'position'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">])\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    for\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> row \u003C/span>\u003Cspan style=\"color:#F97583\">in\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> response.get(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'rows'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, []):\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        writer.writerow([\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">            row[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'keys'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">][\u003C/span>\u003Cspan style=\"color:#79B8FF\">0\u003C/span>\u003Cspan style=\"color:#E1E4E8\">],\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">            row[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'clicks'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">],\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">            row[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'impressions'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">],\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">            round\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(row[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'ctr'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">], \u003C/span>\u003Cspan style=\"color:#79B8FF\">4\u003C/span>\u003Cspan style=\"color:#E1E4E8\">),\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">            round\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(row[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'position'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">], \u003C/span>\u003Cspan style=\"color:#79B8FF\">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\">\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\">\"Pages avec FAQ rich results actifs : \u003C/span>\u003Cspan style=\"color:#79B8FF\">{len\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(response.get(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'rows'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, []))\u003C/span>\u003Cspan style=\"color:#79B8FF\">}\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">)\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>Le filtre \u003Ccode>searchAppearance: FAQ_RICH_RESULT\u003C/code> est la clé. Il vous donne uniquement les pages qui ont effectivement généré des impressions avec le rich result FAQ affiché — pas celles qui avaient le balisage mais sans affichage.\u003C/p>\n\u003Ch3>Étape 3 : Quantifier le delta CTR\u003C/h3>\n\u003Cp>Comparez le CTR des mêmes pages avant et après la suppression. Si la suppression est déjà effective pour votre site, prenez la période actuelle comme « après ». Le delta typique se situe entre 8% et 30% de CTR perdu, selon la proportion de l'espace SERP que la FAQ occupait et le niveau de concurrence.\u003C/p>\n\u003Ch2>Scénario concret : un site e-commerce de 12 000 pages\u003C/h2>\n\u003Cp>Prenons un cas réaliste. Un e-commerce spécialisé en équipement outdoor, 12 000 pages indexées (800 pages catégories, 10 500 fiches produits, 700 articles de blog). L'équipe SEO avait déployé du balisage \u003Ccode>FAQPage\u003C/code> sur :\u003C/p>\n\u003Cul>\n\u003Cli>\u003Cstrong>Les 800 pages catégories\u003C/strong> : 3-5 questions générées par template (« Quelle est la meilleure tente 2 places ? », « Comment choisir ses chaussures de randonnée ? »)\u003C/li>\n\u003Cli>\u003Cstrong>350 articles de blog\u003C/strong> : FAQ reprenant les sous-titres de l'article sous forme de questions\u003C/li>\n\u003C/ul>\n\u003Cp>Données avant suppression (moyenne mensuelle, période janvier-juillet 2023) :\u003C/p>\n\u003Cul>\n\u003Cli>Pages catégories avec FAQ rich result affiché : \u003Cstrong>420 sur 800\u003C/strong> (53%)\u003C/li>\n\u003Cli>CTR moyen des pages catégories avec FAQ : \u003Cstrong>4.8%\u003C/strong>\u003C/li>\n\u003Cli>CTR moyen des pages catégories sans FAQ : \u003Cstrong>3.1%\u003C/strong>\u003C/li>\n\u003Cli>Trafic mensuel attribuable au différentiel CTR FAQ : \u003Cstrong>~2 800 visites\u003C/strong>\u003C/li>\n\u003C/ul>\n\u003Cp>Données après suppression (octobre 2023 - mars 2024) :\u003C/p>\n\u003Cul>\n\u003Cli>CTR moyen des pages catégories (toutes) : \u003Cstrong>3.3%\u003C/strong>\u003C/li>\n\u003Cli>Perte de trafic mensuel estimée : \u003Cstrong>~2 200 visites\u003C/strong>\u003C/li>\n\u003C/ul>\n\u003Cp>Soit une perte annuelle de \u003Cstrong>~26 000 visites qualifiées\u003C/strong> sur les pages catégories seules. Pour un site avec un revenu par visite organique de 1,80€, c'est ~47 000€/an de manque à gagner.\u003C/p>\n\u003Cp>Ce scénario n'a rien d'exceptionnel. Il illustre pourquoi la réaction « c'est juste un affichage en moins » est dangereusement naïve.\u003C/p>\n\u003Ch2>Faut-il supprimer le balisage FAQPage ?\u003C/h2>\n\u003Cp>La réponse courte : \u003Cstrong>oui, dans la majorité des cas\u003C/strong>. Mais pas pour les raisons que vous croyez.\u003C/p>\n\u003Ch3>Le balisage orphelin n'est pas neutre\u003C/h3>\n\u003Cp>Un balisage \u003Ccode>FAQPage\u003C/code> qui ne génère plus de rich result n'est pas techniquement « nocif » au sens d'une pénalité. Google ne va pas déclasser votre page parce qu'elle contient un schéma valide mais non affiché. Cependant :\u003C/p>\n\u003Col>\n\u003Cli>\n\u003Cp>\u003Cstrong>Il alourdit le DOM\u003C/strong> — chaque bloc JSON-LD ajoute du poids au HTML initial. Sur des pages catégories déjà lourdes, avec des fiches produits lazy-loaded et du balisage \u003Ccode>Product\u003C/code>, \u003Ccode>BreadcrumbList\u003C/code>, \u003Ccode>Organization\u003C/code>, le JSON-LD FAQ ajoute typiquement 2-5 Ko de données inutiles.\u003C/p>\n\u003C/li>\n\u003Cli>\n\u003Cp>\u003Cstrong>Il brouille le signal de données structurées\u003C/strong> — Googlebot parse tous les blocs de données structurées. Un balisage FAQ de qualité médiocre (questions auto-générées, réponses vagues) envoie un signal de qualité négatif sur la page, même sans affichage rich result.\u003C/p>\n\u003C/li>\n\u003Cli>\n\u003Cp>\u003Cstrong>Il crée de la dette technique\u003C/strong> — du code que personne ne maintient mais que tout le monde hérite. Quand un développeur modifie le template de page catégorie, il doit comprendre et maintenir un bloc JSON-LD qui ne sert plus à rien.\u003C/p>\n\u003C/li>\n\u003C/ol>\n\u003Ch3>L'exception : les sites « à forte autorité »\u003C/h3>\n\u003Cp>Google continue d'afficher les FAQ rich results pour les sites gouvernementaux et les sources de santé faisant autorité. Si vous êtes dans cette catégorie (sites \u003Ccode>.gouv.fr\u003C/code>, établissements de santé référencés, organismes publics), conservez le balisage et assurez-vous qu'il reste valide.\u003C/p>\n\u003Cp>Pour tous les autres, procédez au nettoyage.\u003C/p>\n\u003Ch3>Plan de suppression technique\u003C/h3>\n\u003Cp>Voici un exemple de script qui nettoie les blocs \u003Ccode>FAQPage\u003C/code> du JSON-LD sans toucher aux autres types de données structurées. Adapté pour un site Next.js qui génère le JSON-LD côté serveur :\u003C/p>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">// utils/cleanStructuredData.ts\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">// Supprime les blocs FAQPage du JSON-LD avant injection dans le &#x3C;head>\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\"> StructuredDataBlock\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  '@type'\u003C/span>\u003Cspan style=\"color:#F97583\">:\u003C/span>\u003Cspan style=\"color:#79B8FF\"> string\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:#9ECBFF\">  '@context'\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:#E1E4E8\">  [\u003C/span>\u003Cspan style=\"color:#FFAB70\">key\u003C/span>\u003Cspan style=\"color:#F97583\">:\u003C/span>\u003Cspan style=\"color:#79B8FF\"> string\u003C/span>\u003Cspan style=\"color:#E1E4E8\">]\u003C/span>\u003Cspan style=\"color:#F97583\">:\u003C/span>\u003Cspan style=\"color:#79B8FF\"> unknown\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:#F97583\">type\u003C/span>\u003Cspan style=\"color:#B392F0\"> StructuredData\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#B392F0\"> StructuredDataBlock\u003C/span>\u003Cspan style=\"color:#F97583\"> |\u003C/span>\u003Cspan style=\"color:#B392F0\"> StructuredDataBlock\u003C/span>\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\"> removeFaqSchema\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#FFAB70\">jsonLd\u003C/span>\u003Cspan style=\"color:#F97583\">:\u003C/span>\u003Cspan style=\"color:#B392F0\"> StructuredData\u003C/span>\u003Cspan style=\"color:#E1E4E8\">)\u003C/span>\u003Cspan style=\"color:#F97583\">:\u003C/span>\u003Cspan style=\"color:#B392F0\"> StructuredData\u003C/span>\u003Cspan style=\"color:#F97583\"> |\u003C/span>\u003Cspan style=\"color:#79B8FF\"> null\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">  // Cas 1 : un seul objet\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">  if\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> (\u003C/span>\u003Cspan style=\"color:#F97583\">!\u003C/span>\u003Cspan style=\"color:#E1E4E8\">Array.\u003C/span>\u003Cspan style=\"color:#B392F0\">isArray\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(jsonLd)) {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    const\u003C/span>\u003Cspan style=\"color:#79B8FF\"> types\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> Array.\u003C/span>\u003Cspan style=\"color:#B392F0\">isArray\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(jsonLd[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'@type'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">])\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">      ?\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> jsonLd[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'@type'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">]\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">      :\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> [jsonLd[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'@type'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">]];\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    if\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> (types.\u003C/span>\u003Cspan style=\"color:#B392F0\">includes\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'FAQPage'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">)) {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">      return\u003C/span>\u003Cspan style=\"color:#79B8FF\"> null\u003C/span>\u003Cspan style=\"color:#E1E4E8\">; \u003C/span>\u003Cspan style=\"color:#6A737D\">// Suppression complète\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\">    // Vérifier les sous-objets @graph\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    if\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> (jsonLd[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'@graph'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">] \u003C/span>\u003Cspan style=\"color:#F97583\">&#x26;&#x26;\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> Array.\u003C/span>\u003Cspan style=\"color:#B392F0\">isArray\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(jsonLd[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'@graph'\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\"> filtered\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> (jsonLd[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'@graph'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">] \u003C/span>\u003Cspan style=\"color:#F97583\">as\u003C/span>\u003Cspan style=\"color:#B392F0\"> StructuredDataBlock\u003C/span>\u003Cspan style=\"color:#E1E4E8\">[]).\u003C/span>\u003Cspan style=\"color:#B392F0\">filter\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        (\u003C/span>\u003Cspan style=\"color:#FFAB70\">item\u003C/span>\u003Cspan style=\"color:#E1E4E8\">) \u003C/span>\u003Cspan style=\"color:#F97583\">=>\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\"> itemTypes\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> Array.\u003C/span>\u003Cspan style=\"color:#B392F0\">isArray\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(item[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'@type'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">])\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">            ?\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> item[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'@type'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">]\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">            :\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> [item[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'@type'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">]];\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">          return\u003C/span>\u003Cspan style=\"color:#F97583\"> !\u003C/span>\u003Cspan style=\"color:#E1E4E8\">itemTypes.\u003C/span>\u003Cspan style=\"color:#B392F0\">includes\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'FAQPage'\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\">      if\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> (filtered.\u003C/span>\u003Cspan style=\"color:#79B8FF\">length\u003C/span>\u003Cspan style=\"color:#F97583\"> ===\u003C/span>\u003Cspan style=\"color:#79B8FF\"> 0\u003C/span>\u003Cspan style=\"color:#E1E4E8\">) \u003C/span>\u003Cspan style=\"color:#F97583\">return\u003C/span>\u003Cspan style=\"color:#79B8FF\"> null\u003C/span>\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>\u003Cspan style=\"color:#F97583\">...\u003C/span>\u003Cspan style=\"color:#E1E4E8\">jsonLd, \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'@graph'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: filtered };\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\"> jsonLd;\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\">  // Cas 2 : tableau de blocs\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">  const\u003C/span>\u003Cspan style=\"color:#79B8FF\"> filtered\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> jsonLd.\u003C/span>\u003Cspan style=\"color:#B392F0\">filter\u003C/span>\u003Cspan style=\"color:#E1E4E8\">((\u003C/span>\u003Cspan style=\"color:#FFAB70\">block\u003C/span>\u003Cspan style=\"color:#E1E4E8\">) \u003C/span>\u003Cspan style=\"color:#F97583\">=>\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\"> types\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> Array.\u003C/span>\u003Cspan style=\"color:#B392F0\">isArray\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(block[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'@type'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">])\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">      ?\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> block[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'@type'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">]\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">      :\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> [block[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'@type'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">]];\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    return\u003C/span>\u003Cspan style=\"color:#F97583\"> !\u003C/span>\u003Cspan style=\"color:#E1E4E8\">types.\u003C/span>\u003Cspan style=\"color:#B392F0\">includes\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'FAQPage'\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:#F97583\">  if\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> (filtered.\u003C/span>\u003Cspan style=\"color:#79B8FF\">length\u003C/span>\u003Cspan style=\"color:#F97583\"> ===\u003C/span>\u003Cspan style=\"color:#79B8FF\"> 0\u003C/span>\u003Cspan style=\"color:#E1E4E8\">) \u003C/span>\u003Cspan style=\"color:#F97583\">return\u003C/span>\u003Cspan style=\"color:#79B8FF\"> null\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">  if\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> (filtered.\u003C/span>\u003Cspan style=\"color:#79B8FF\">length\u003C/span>\u003Cspan style=\"color:#F97583\"> ===\u003C/span>\u003Cspan style=\"color:#79B8FF\"> 1\u003C/span>\u003Cspan style=\"color:#E1E4E8\">) \u003C/span>\u003Cspan style=\"color:#F97583\">return\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> filtered[\u003C/span>\u003Cspan style=\"color:#79B8FF\">0\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\"> filtered;\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\">// Utilisation dans un composant Next.js (App Router)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">// app/category/[slug]/page.tsx\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">//\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">// const cleanedJsonLd = removeFaqSchema(originalJsonLd);\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">// if (cleanedJsonLd) {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">//   return (\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">//     &#x3C;script\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">//       type=\"application/ld+json\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">//       dangerouslySetInnerHTML={{ __html: JSON.stringify(cleanedJsonLd) }}\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">//     />\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">//   );\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">// }\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>Ce script gère les trois cas courants : un bloc JSON-LD unique de type \u003Ccode>FAQPage\u003C/code>, un \u003Ccode>@graph\u003C/code> contenant un mélange de types, et un tableau de blocs autonomes. Testez-le sur votre staging avant déploiement — et validez avec le \u003Ca href=\"https://search.google.com/test/rich-results\">test de résultats enrichis de Google\u003C/a> que vos autres types de données structurées restent intacts.\u003C/p>\n\u003Ch2>Récupérer le CTR perdu : stratégies de remplacement\u003C/h2>\n\u003Cp>Supprimer le balisage FAQ ne résout que la moitié du problème. L'autre moitié, c'est compenser la perte de surface SERP.\u003C/p>\n\u003Ch3>Miser sur les données structurées qui fonctionnent encore\u003C/h3>\n\u003Cp>Plusieurs types de rich results restent pleinement supportés et offrent un gain de CTR mesurable :\u003C/p>\n\u003Cp>\u003Cstrong>\u003Ccode>HowTo\u003C/code>\u003C/strong> — pour les contenus éditoriaux qui décrivent un processus. Attention : Google a aussi restreint HowTo en août 2023, mais il reste affiché pour les requêtes informationnelles légitimes sur mobile. À tester au cas par cas.\u003C/p>\n\u003Cp>\u003Cstrong>\u003Ccode>Product\u003C/code> et \u003Ccode>Review\u003C/code>\u003C/strong> — pour l'e-commerce, le balisage produit avec agrégation d'avis reste le levier rich result le plus stable. Si vos pages catégories n'ont pas d'\u003Ccode>AggregateRating\u003C/code>, c'est la première chose à implémenter.\u003C/p>\n\u003Cp>\u003Cstrong>\u003Ccode>Article\u003C/code> avec \u003Ccode>speakable\u003C/code>\u003C/strong> — pour les sites médias, le balisage \u003Ccode>speakable\u003C/code> permet à Google Assistant de lire des extraits. Niche, mais différenciant.\u003C/p>\n\u003Cp>\u003Cstrong>\u003Ccode>BreadcrumbList\u003C/code>\u003C/strong> — souvent négligé, le fil d'Ariane structuré améliore l'affichage de l'URL dans les SERPs. C'est un petit gain, mais il est systématique et fiable.\u003C/p>\n\u003Ch3>Optimiser pour les « People Also Ask »\u003C/h3>\n\u003Cp>Les FAQ rich results sont morts, mais les « People Also Ask » (PAA) sont bien vivants. La différence fondamentale : vous ne contrôlez pas l'affichage PAA via du balisage. Google sélectionne les contenus qui répondent aux questions connexes en se basant sur la pertinence sémantique de votre contenu.\u003C/p>\n\u003Cp>La stratégie : conservez le \u003Cstrong>contenu\u003C/strong> de vos FAQ (les questions-réponses elles-mêmes) dans le corps de la page, mais supprimez le \u003Cstrong>balisage\u003C/strong> JSON-LD. Structurez les Q&#x26;A avec des H3 et des paragraphes de réponse concis (40-60 mots). Ce format est celui que Google extrait le plus facilement pour les PAA.\u003C/p>\n\u003Cp>C'est aussi le format que les modèles de langage ingèrent le mieux pour les AI Overviews. Les \u003Ca href=\"/blog/4-signals-that-now-define-visibility-in-ai-search\">signaux qui définissent la visibilité en AI search\u003C/a> reposent en grande partie sur la capacité de votre contenu à fournir des réponses extractibles et attribuables.\u003C/p>\n\u003Ch3>Travailler les meta descriptions pour le CTR\u003C/h3>\n\u003Cp>Sans rich result, votre snippet se réduit au title + meta description + URL. Chaque caractère compte davantage. Passez en revue les meta descriptions de vos pages les plus impactées. Une meta description qui reprend la question principale à laquelle la page répond performe systématiquement mieux qu'une description générique.\u003C/p>\n\u003Cp>Vérifiez aussi que vos meta descriptions ne sont pas tronquées ou absentes sur les pages critiques. C'est le type de régression silencieuse qu'un outil de monitoring comme Seogard détecte automatiquement — une meta description qui disparaît après un déploiement peut passer inaperçue pendant des semaines si personne ne surveille.\u003C/p>\n\u003Ch2>Implications pour la stratégie de contenu SEO\u003C/h2>\n\u003Ch3>La fin du contenu FAQ comme levier de scaling\u003C/h3>\n\u003Cp>Beaucoup de sites avaient industrialisé la production de contenu FAQ : un script qui génère 3 à 5 questions par page à partir des données de Search Console (requêtes liées), un template qui injecte le balisage \u003Ccode>FAQPage\u003C/code> automatiquement. Cette approche perd son ROI principal.\u003C/p>\n\u003Cp>Cela rejoint un mouvement plus large. Google resserre les critères de qualité sur le contenu scalé. Les \u003Ca href=\"/blog/google-s-quality-threshold-is-quietly-killing-scaled-ai-content-via-sejournal-taylordanrw\">seuils de qualité appliqués au contenu IA généré à grande échelle\u003C/a> montrent que la quantité sans profondeur éditoriale est de moins en moins viable. La fin des FAQ rich results est un symptôme de cette tendance, pas un événement isolé.\u003C/p>\n\u003Ch3>Rediriger l'effort vers la profondeur thématique\u003C/h3>\n\u003Cp>Les ressources que vous consacriez à créer et maintenir du contenu FAQ doivent être réallouées. Deux pistes à fort ROI :\u003C/p>\n\u003Col>\n\u003Cli>\n\u003Cp>\u003Cstrong>Enrichir les pages existantes\u003C/strong> avec du contenu expert qui répond aux questions que le FAQ couvrait, mais de manière intégrée et contextualisée plutôt que sous forme de liste Q&#x26;A. Un paragraphe de 150 mots qui traite une objection client dans le flux naturel de la page a plus de valeur SEO qu'une FAQ collée en bas de page.\u003C/p>\n\u003C/li>\n\u003Cli>\n\u003Cp>\u003Cstrong>Créer des contenus hub\u003C/strong> qui centralisent l'expertise sur un sujet. Au lieu de 800 pages catégories avec chacune 5 questions FAQ, créez 20 guides approfondis qui couvrent les questions transversales et qui maillent vers les pages catégories. Le \u003Ca href=\"/blog/a-blueprint-for-semantic-programmatic-seo\">SEO programmatique sémantique\u003C/a> offre un cadre méthodologique pour ce type de restructuration.\u003C/p>\n\u003C/li>\n\u003C/ol>\n\u003Ch2>Monitoring post-migration : ce qu'il faut surveiller\u003C/h2>\n\u003Cp>La suppression du balisage FAQ est un changement à déployer proprement, pas un hotfix à pousser un vendredi soir.\u003C/p>\n\u003Ch3>Checklist de validation\u003C/h3>\n\u003Cul>\n\u003Cli>\u003Cstrong>Validation des données structurées restantes\u003C/strong> : après suppression du FAQ JSON-LD, vérifiez que les autres blocs (Product, BreadcrumbList, Organization) sont toujours syntaxiquement valides. Un JSON-LD malformé peut casser silencieusement tous les rich results de la page.\u003C/li>\n\u003Cli>\u003Cstrong>Monitoring du CTR par segment\u003C/strong> : dans Search Console, créez des expressions régulières pour isoler les pages qui avaient du FAQ. Suivez le CTR hebdomadaire pendant 8 semaines minimum.\u003C/li>\n\u003Cli>\u003Cstrong>Vérification du rendu SSR\u003C/strong> : si votre balisage FAQ était injecté côté serveur et que vous modifiez le pipeline de rendu, assurez-vous que le SSR n'est pas cassé. Les \u003Ca href=\"/blog/5-javascript-seo-lessons-from-top-ecommerce-sites\">leçons JavaScript SEO des sites e-commerce\u003C/a> détaillent les pièges courants.\u003C/li>\n\u003Cli>\u003Cstrong>Suivi des impressions « FAQ » dans Search Console\u003C/strong> : tant que le rapport existe, vérifiez qu'il tombe bien à zéro après votre déploiement. Si des impressions FAQ persistent, vous avez probablement un cache CDN qui sert encore l'ancien HTML, ou un composant client-side qui réinjecte le balisage.\u003C/li>\n\u003C/ul>\n\u003Ch3>Automatiser la détection de régression\u003C/h3>\n\u003Cp>Le risque réel n'est pas le déploiement initial — c'est le déploiement suivant. Un développeur qui ne connaît pas le contexte pourrait réintroduire le balisage FAQ en important un ancien template, ou un plugin CMS pourrait le générer automatiquement après une mise à jour.\u003C/p>\n\u003Cp>C'est précisément le type de régression que Seogard surveille en continu : un balisage structuré qui réapparaît ou disparaît de manière inattendue déclenche une alerte avant que l'impact ne se propage sur des milliers de pages.\u003C/p>\n\u003Ch2>Le signal plus large : Google reprend le contrôle de la SERP\u003C/h2>\n\u003Cp>La suppression des FAQ rich results n'est pas un événement technique isolé. C'est un mouvement stratégique dans la même direction que les AI Overviews, les featured snippets étendus, et la réduction progressive de l'espace accordé aux résultats organiques classiques.\u003C/p>\n\u003Cp>Google ne veut plus que les webmasters contrôlent la présentation des résultats via le balisage structuré. Il veut extraire les données, les reformuler, et les présenter dans ses propres formats. Le balisage structuré reste utile — pas comme levier d'affichage, mais comme signal de compréhension sémantique. Google l'utilise pour mieux comprendre vos données, pas pour vous laisser décider comment elles s'affichent.\u003C/p>\n\u003Cp>Cette distinction change fondamentalement la manière dont vous devez penser les données structurées. Implémentez-les pour la précision sémantique (un produit est un produit, un prix est un prix, une organisation est une organisation), pas pour « obtenir un rich result ». Les rich results sont un bonus que Google accorde quand ça l'arrange — et qu'il retire quand ça ne l'arrange plus.\u003C/p>\n\u003Cp>Les FAQ rich results viennent de nous le rappeler. Nettoyez votre balisage, réallouez vos efforts vers la profondeur de contenu et les formats que Google favorise aujourd'hui, et mettez en place un monitoring qui vous préviendra la prochaine fois qu'une feature disparaît sous vos pieds.\u003C/p>\n\u003Cpre>\u003Ccode>\u003C/code>\u003C/pre>",null,12,[18,19,20,21,22],"google","rich results","structured data","FAQ schema","search console","Fin des FAQ Rich Results : impact technique et plan d'action","Fri May 08 2026 18:02:50 GMT+0000 (Coordinated Universal Time)",[26,41,56],{"_id":27,"slug":28,"__v":6,"author":7,"canonical":29,"category":10,"createdAt":30,"date":31,"description":32,"image":15,"imageAlt":15,"readingTime":16,"tags":33,"title":39,"updatedAt":40},"6a041412aa6b273b0c40f181","how-to-build-local-pages-that-win-in-ai-powered-search-via-sejournal-lorenbaker","https://seogard.io/blog/how-to-build-local-pages-that-win-in-ai-powered-search-via-sejournal-lorenbaker","2026-05-13T06:02:58.743Z","2026-05-13","Guide technique pour construire des pages locales qui performent dans les AI Overviews et AI Mode. Schema, SSR, contenu structuré.",[34,35,36,37,38],"local SEO","AI search","pages locales","schema markup","SSR","Pages locales pour l'AI Search : architecture technique","Wed May 13 2026 06:02:58 GMT+0000 (Coordinated Universal Time)",{"_id":42,"slug":43,"__v":6,"author":7,"canonical":44,"category":10,"createdAt":45,"date":46,"description":47,"image":15,"imageAlt":15,"readingTime":48,"tags":49,"title":54,"updatedAt":55},"6a02c291aa6b273b0c2a74f9","the-tech-seo-audit-for-the-ai-search-era-how-to-maximize-your-ai-visibility-via-sejournal-jetoctopus","https://seogard.io/blog/the-tech-seo-audit-for-the-ai-search-era-how-to-maximize-your-ai-visibility-via-sejournal-jetoctopus","2026-05-12T06:02:57.339Z","2026-05-12","Comment adapter votre audit technique SEO aux exigences des AI Overviews, du crawl par les LLMs et du grounding. Méthodes, code et scénarios concrets.",14,[50,51,52,53,20],"tech seo audit","ai search","ai visibility","crawl budget","Audit SEO technique pour l'ère AI Search : guide avancé","Tue May 12 2026 06:02:57 GMT+0000 (Coordinated Universal Time)",{"_id":57,"slug":58,"__v":6,"author":7,"canonical":59,"category":10,"createdAt":60,"date":46,"description":61,"image":15,"imageAlt":15,"readingTime":16,"tags":62,"title":67,"updatedAt":68},"6a02fac0aa6b273b0c58d096","the-consensus-gap-via-sejournal-kevin-indig","https://seogard.io/blog/the-consensus-gap-via-sejournal-kevin-indig","2026-05-12T10:02:40.519Z","Une marque peut dominer dans un dashboard AI agrégé et être absente de deux moteurs sur trois. Analyse technique du Consensus Gap et méthodes pour le détecter.",[63,35,64,65,66],"consensus gap","LLM visibility","GEO","multi-engine","The Consensus Gap : votre marque visible sur un LLM, invisible sur deux autres","Tue May 12 2026 10:02:40 GMT+0000 (Coordinated Universal Time)"]