[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fA_CVRLrZWrjW5oG_UketrB463LVIYW8dQcU8su7fKbE":3,"$fZ9F1xlRNpH1rVPE53sclKF5rtsBPmVNYCL-Vb-KBJ7E":27},{"_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":25,"updatedAt":26},"6a0ca5e3aa6b273b0c532500","the-funnel-query-pathway-a-framework-for-measuring-ai-visibility",0,"Equipe Seogard","Un site e-commerce de 22 000 pages voit son trafic organique chuter de 18 % en six mois. La Search Console ne montre pourtant aucune perte de positions sur les requêtes cibles. L'explication : 40 % des impressions passent désormais par des AI Overviews où le site apparaît en citation — sans jamais générer de clic comptabilisé. Les métriques classiques sont devenues aveugles à une part croissante de la visibilité réelle.\n\nLe concept de Funnel Query Pathway, formalisé récemment dans l'écosystème SEO, propose un cadre pour mesurer cette visibilité fragmentée entre search classique, assistants conversationnels et agents autonomes. Pas une énième matrice théorique : un modèle opérationnel, avec des points de mesure concrets à chaque étape du funnel.\n\n## Pourquoi les métriques SEO classiques cassent dans un environnement AI\n\nLe modèle historique est simple : impression → clic → page vue → conversion. Google Search Console fournit les impressions et les clics. GA4 prend le relais côté site. Ce pipeline linéaire fonctionne quand le SERP est une liste de liens bleus.\n\nDans un environnement AI, ce pipeline se fragmente en trois surfaces de visibilité distinctes :\n\n### La surface search augmentée (AI Overviews, SGE)\n\nGoogle génère une réponse synthétique au-dessus des résultats organiques. Votre contenu peut être cité, paraphrasé, ou servir de source sans que l'utilisateur clique. La Search Console compte une \"impression\" quand votre lien apparaît dans le panel AI Overview, mais le CTR de cette impression est structurellement plus bas — souvent sous 2 % — parce que l'utilisateur obtient sa réponse sans cliquer.\n\nLe problème fondamental : une impression AI Overview et une impression position 3 ne représentent pas la même réalité. Pourtant, elles sont agrégées dans le même rapport Search Console. [Google a élargi les liens dans les AI Overviews](/blog/google-expands-ai-search-links-without-new-click-data-via-sejournal-mattgsouthern) sans pour autant fournir de données de clic différenciées.\n\n### La surface assistant (ChatGPT, Gemini, Copilot)\n\nQuand un utilisateur pose une question à ChatGPT ou Gemini, la réponse peut citer votre site, recommander votre produit, ou reproduire votre contenu. Aucune de ces interactions ne génère d'impression dans la Search Console. Vous n'avez aucune visibilité native sur cette exposition — sauf si l'utilisateur clique sur le lien de citation et atterrit sur votre site avec un referrer identifiable.\n\n### La surface agent (Google Agent, agents MCP)\n\nLes agents autonomes — ceux qui exécutent des tâches pour le compte de l'utilisateur — consultent vos pages, extraient des données structurées, et prennent des décisions sans intervention humaine. [Google a donné une identité à son agent web](/blog/google-agent-the-web-s-new-visitor-just-got-an-identity-via-sejournal-slobodanmanic), ce qui permet de le détecter dans les logs serveur. Mais la plupart des agents tiers n'ont pas de user-agent standardisé. Vous servez des pages à des machines qui ne génèrent ni impressions, ni clics, ni pages vues dans vos dashboards.\n\nLe Funnel Query Pathway répond à cette fragmentation en proposant un modèle de mesure par couche, pas par canal.\n\n## Architecture du Funnel Query Pathway : les trois couches de mesure\n\nLe framework repose sur une décomposition de la visibilité en trois niveaux mesurables indépendamment, puis corrélés :\n\n**Couche 1 — Mention (Visibility)** : votre contenu est-il présent dans la réponse, quelle que soit la surface ? Mesure : détection de citations dans les AI Overviews, scraping des réponses d'assistants, analyse des logs pour les agents.\n\n**Couche 2 — Engagement (Interaction)** : l'utilisateur ou l'agent interagit-il avec votre contenu après la mention ? Mesure : clics depuis AI Overviews, clics sur les citations d'assistants, requêtes API des agents vers vos endpoints.\n\n**Couche 3 — Conversion (Outcome)** : cette interaction produit-elle un résultat business ? Mesure : conversion e-commerce, lead, inscription, ou action complétée par un agent (réservation, achat, extraction de données).\n\nCe qui change fondamentalement par rapport au funnel SEO classique : la couche 1 (Mention) n'a pas d'équivalent dans les métriques traditionnelles. Une impression Search Console est déjà un hybride mention/engagement. Ici, la mention est découplée — vous pouvez être cité dans 500 réponses ChatGPT par jour sans qu'aucune métrique classique ne le reflète.\n\nPour implémenter ce framework, il faut instrumenter chaque couche séparément.\n\n## Implémenter la couche Mention : détection de citations AI\n\nLa détection de mentions dans les réponses AI est le problème le plus difficile du framework. Contrairement aux SERP classiques qui ont des APIs (Search Console, SERPApi), les réponses d'assistants ne sont pas indexées de manière standardisée.\n\n### Monitoring des AI Overviews via Search Console API\n\nLa Search Console expose les données d'AI Overviews dans le rapport de performance, mais sans filtre dédié dans l'API. Il faut analyser les patterns de requêtes pour identifier les termes qui déclenchent des AI Overviews et croiser avec vos impressions.\n\nVoici un script Python qui extrait les requêtes à fort taux d'impression mais faible CTR — un signal proxy pour les requêtes où vous apparaissez en AI Overview sans clic :\n\n```python\nimport os\nfrom google.oauth2.credentials import Credentials\nfrom googleapiclient.discovery import build\n\nSITE_URL = \"sc-domain:votresite.fr\"\nSERVICE = build(\"searchconsole\", \"v1\", credentials=Credentials.from_authorized_user_file(\n    os.path.expanduser(\"~/.config/gsc/credentials.json\"),\n    scopes=[\"https://www.googleapis.com/auth/webmasters.readonly\"]\n))\n\ndef get_low_ctr_high_impression_queries(start_date, end_date, min_impressions=50, max_ctr=0.02):\n    \"\"\"Identifie les requêtes probablement servies via AI Overviews :\n       impressions élevées, CTR anormalement bas (\u003C2%)\"\"\"\n    response = SERVICE.searchanalytics().query(\n        siteUrl=SITE_URL,\n        body={\n            \"startDate\": start_date,\n            \"endDate\": end_date,\n            \"dimensions\": [\"query\", \"page\"],\n            \"rowLimit\": 5000,\n            \"dimensionFilterGroups\": [{\n                \"filters\": [{\n                    \"dimension\": \"country\",\n                    \"expression\": \"fra\"\n                }]\n            }]\n        }\n    ).execute()\n\n    ai_overview_candidates = []\n    for row in response.get(\"rows\", []):\n        impressions = row[\"impressions\"]\n        ctr = row[\"ctr\"]\n        if impressions >= min_impressions and ctr \u003C= max_ctr:\n            ai_overview_candidates.append({\n                \"query\": row[\"keys\"][0],\n                \"page\": row[\"keys\"][1],\n                \"impressions\": impressions,\n                \"clicks\": row[\"clicks\"],\n                \"ctr\": round(ctr, 4),\n                \"position\": round(row[\"position\"], 1)\n            })\n\n    # Trier par impressions décroissantes pour prioriser\n    return sorted(ai_overview_candidates, key=lambda x: x[\"impressions\"], reverse=True)\n\ncandidates = get_low_ctr_high_impression_queries(\"2026-04-01\", \"2026-04-30\")\nfor c in candidates[:20]:\n    print(f\"[CTR {c['ctr']:.1%}] {c['query']} → {c['page']} ({c['impressions']} imp)\")\n```\n\nCe script ne prouve pas la présence en AI Overview — il identifie les candidats. La confirmation nécessite un scraping SERP ou un outil de monitoring SERP qui différencie les types de résultats. Screaming Frog avec un crawl SERP personnalisé, ou des outils comme Semrush / Ahrefs qui trackent spécifiquement les AI Overviews, permettent de valider.\n\n### Détection des mentions dans les assistants conversationnels\n\nPour les assistants comme ChatGPT, Perplexity ou Gemini, la méthode la plus fiable reste l'analyse des logs serveur côté referrer. Voici une config Nginx qui isole et log les requêtes provenant d'agents AI connus :\n\n```nginx\n# /etc/nginx/conf.d/ai-agent-tracking.conf\n\n# Map pour identifier les agents AI par user-agent\nmap $http_user_agent $is_ai_agent {\n    default                         \"organic\";\n    \"~*ChatGPT-User\"               \"chatgpt\";\n    \"~*GPTBot\"                      \"gptbot_crawler\";\n    \"~*Google-Extended\"             \"google_ai_training\";\n    \"~*Googlebot-Extended\"          \"google_ai_training\";\n    \"~*PerplexityBot\"              \"perplexity\";\n    \"~*ClaudeBot\"                   \"claude\";\n    \"~*Claude-Web\"                  \"claude_web\";\n    \"~*Applebot-Extended\"           \"apple_ai\";\n    \"~*Bytespider\"                  \"bytedance_ai\";\n    \"~*cohere-ai\"                   \"cohere\";\n    \"~*GoogleOther\"                 \"google_agent\";\n}\n\n# Map pour identifier les referrers AI\nmap $http_referer $ai_referrer {\n    default                         \"none\";\n    \"~*chat\\.openai\\.com\"           \"chatgpt\";\n    \"~*perplexity\\.ai\"              \"perplexity\";\n    \"~*gemini\\.google\\.com\"         \"gemini\";\n    \"~*copilot\\.microsoft\\.com\"     \"copilot\";\n    \"~*you\\.com\"                    \"you_ai\";\n}\n\n# Log format dédié AI avec toutes les dimensions utiles\nlog_format ai_traffic\n    '$time_iso8601\\t'\n    '$remote_addr\\t'\n    '$request_uri\\t'\n    '$status\\t'\n    '$body_bytes_sent\\t'\n    '$is_ai_agent\\t'\n    '$ai_referrer\\t'\n    '$http_user_agent\\t'\n    '$http_referer\\t'\n    '$request_time';\n\n# Log séparé pour le trafic AI uniquement\naccess_log /var/log/nginx/ai-traffic.log ai_traffic\n    if=$is_ai_agent_or_referrer;\n\n# Variable combinée pour le conditional logging\nmap \"$is_ai_agent:$ai_referrer\" $is_ai_agent_or_referrer {\n    default             0;\n    \"~^(?!organic:none)\" 1;\n}\n```\n\nCe log dédié permet d'analyser quotidiennement quelles pages sont servies aux agents AI, à quelle fréquence, et depuis quelle source. C'est la base de votre couche Mention pour la surface agent.\n\nL'edge case ici : de nombreux utilisateurs ChatGPT cliquent sur un lien de citation et arrivent sur votre site avec un referrer `chat.openai.com`. [GA4 commence à tracker ce trafic assistant](/blog/ga4-tracks-ai-assistant-traffic-faq-results-gone-seo-pulse-via-sejournal-mattgsouthern), mais la granularité reste limitée. Le log serveur fournit des données plus complètes.\n\n## Implémenter la couche Engagement : tracker les interactions post-mention\n\nLa couche Engagement mesure ce qui se passe quand un utilisateur ou un agent passe de la mention à l'interaction. Pour les humains, c'est un clic. Pour les agents, c'est une requête API ou un crawl de données structurées.\n\n### Attribution du trafic AI dans GA4\n\nGA4 regroupe le trafic ChatGPT, Perplexity et autres sous \"Referral\" ou \"Organic Social\" selon la configuration. Pour obtenir un canal dédié, créez un canal personnalisé via l'API Admin :\n\n```javascript\n// Script Node.js pour créer un channel group AI dans GA4\n// Nécessite @google-analytics/admin v1.x+\n\nconst { AnalyticsAdminServiceClient } = require(\"@google-analytics/admin\");\nconst client = new AnalyticsAdminServiceClient();\n\nasync function createAIChannelGroup(propertyId) {\n  const channelGroup = {\n    parent: `properties/${propertyId}`,\n    channelGroup: {\n      displayName: \"AI Search & Assistants\",\n      groupingRule: [\n        {\n          displayName: \"ChatGPT\",\n          expression: {\n            orGroup: {\n              expressions: [\n                {\n                  andGroup: {\n                    expressions: [\n                      {\n                        simpleFilter: {\n                          fieldName: \"sessionSource\",\n                          stringFilter: {\n                            matchType: \"CONTAINS\",\n                            value: \"chat.openai.com\",\n                          },\n                        },\n                      },\n                    ],\n                  },\n                },\n              ],\n            },\n          },\n        },\n        {\n          displayName: \"Perplexity\",\n          expression: {\n            orGroup: {\n              expressions: [\n                {\n                  andGroup: {\n                    expressions: [\n                      {\n                        simpleFilter: {\n                          fieldName: \"sessionSource\",\n                          stringFilter: {\n                            matchType: \"CONTAINS\",\n                            value: \"perplexity.ai\",\n                          },\n                        },\n                      },\n                    ],\n                  },\n                },\n              ],\n            },\n          },\n        },\n        {\n          displayName: \"Google Gemini\",\n          expression: {\n            orGroup: {\n              expressions: [\n                {\n                  andGroup: {\n                    expressions: [\n                      {\n                        simpleFilter: {\n                          fieldName: \"sessionSource\",\n                          stringFilter: {\n                            matchType: \"CONTAINS\",\n                            value: \"gemini.google.com\",\n                          },\n                        },\n                      },\n                    ],\n                  },\n                },\n              ],\n            },\n          },\n        },\n        {\n          displayName: \"Microsoft Copilot\",\n          expression: {\n            orGroup: {\n              expressions: [\n                {\n                  andGroup: {\n                    expressions: [\n                      {\n                        simpleFilter: {\n                          fieldName: \"sessionSource\",\n                          stringFilter: {\n                            matchType: \"CONTAINS\",\n                            value: \"copilot.microsoft.com\",\n                          },\n                        },\n                      },\n                    ],\n                  },\n                },\n              ],\n            },\n          },\n        },\n        {\n          displayName: \"AI Agents (Other)\",\n          expression: {\n            orGroup: {\n              expressions: [\n                {\n                  andGroup: {\n                    expressions: [\n                      {\n                        simpleFilter: {\n                          fieldName: \"sessionSource\",\n                          stringFilter: {\n                            matchType: \"CONTAINS\",\n                            value: \"you.com\",\n                          },\n                        },\n                      },\n                    ],\n                  },\n                },\n              ],\n            },\n          },\n        },\n      ],\n    },\n  };\n\n  const [response] = await client.createChannelGroup(channelGroup);\n  console.log(`Channel group créé : ${response.name}`);\n  return response;\n}\n\ncreateAIChannelGroup(\"YOUR_GA4_PROPERTY_ID\");\n```\n\nCe channel group vous donne un segment dédié dans les rapports GA4 — sessions, engagement rate, conversions — spécifiquement pour le trafic provenant d'assistants AI. C'est la base de votre couche Engagement côté humain.\n\n### Mesurer l'engagement des agents\n\nPour les agents autonomes, l'engagement se mesure dans les logs serveur. Un agent qui crawle votre page produit et extrait le prix via JSON-LD génère un \"engagement\" même sans page vue GA4. Croisez vos logs AI (configurés plus haut) avec vos données structurées pour identifier quelles informations les agents extraient :\n\n```bash\n# Analyse des pages les plus consultées par les agents AI\n# sur les 7 derniers jours\n\nawk -F'\\t' '\n  $6 != \"organic\" {\n    agent_type = $6;\n    page = $3;\n    # Nettoyer les query strings\n    gsub(/\\?.*/, \"\", page);\n    count[agent_type][page]++;\n    total[agent_type]++;\n  }\n  END {\n    for (agent in total) {\n      print \"=== \" agent \" (\" total[agent] \" requêtes) ===\";\n      # Trier par fréquence\n      n = asorti(count[agent], sorted, \"@val_num_desc\");\n      for (i = 1; i \u003C= (n \u003C 20 ? n : 20); i++) {\n        printf \"  %5d  %s\\n\", count[agent][sorted[i]], sorted[i];\n      }\n    }\n  }\n' /var/log/nginx/ai-traffic.log\n```\n\nCe type d'analyse révèle des patterns invisibles dans les outils classiques. Sur le site e-commerce mentionné en introduction (22K pages), cette analyse a montré que GPTBot crawlait massivement les pages catégorie (pas les fiches produit), tandis que PerplexityBot ciblait les guides d'achat. Deux comportements distincts qui impliquent deux stratégies d'optimisation différentes.\n\n## Mapper les types de requêtes sur le funnel : le \"Query Pathway\"\n\nLe framework ne se limite pas à empiler des couches de mesure. Le \"Pathway\" est le chemin qu'une requête emprunte à travers les surfaces AI avant d'atteindre (ou non) votre site.\n\n### Taxonomie des query pathways\n\n**Pathway direct** : requête Google → AI Overview → clic citation → votre site. Le plus proche du modèle classique. Mesurable via Search Console + GA4.\n\n**Pathway conversationnel** : question ChatGPT → réponse avec citation → clic utilisateur → votre site. Mesurable via referrer + GA4.\n\n**Pathway multi-étapes** : l'utilisateur pose une question à Gemini, obtient une réponse citant votre marque, puis fait une recherche Google \"votresite avis\", puis clique. Le premier touchpoint (Gemini) est invisible sauf si vous monitorez les mentions. Le clic final est attribué à \"organic\" dans GA4.\n\n**Pathway agent** : un agent MCP consulte votre API produit, extrait des specs, et complète une tâche (comparaison de prix pour un utilisateur). Zéro page vue. Zéro clic. Mais une visibilité et un impact business réels — l'agent peut recommander votre produit.\n\n**Pathway zero-click** : la réponse AI satisfait complètement l'utilisateur. Votre contenu est cité mais personne ne visite jamais votre site. C'est la visibilité la plus difficile à valoriser, mais elle construit la notoriété de marque et influence les pathways multi-étapes futurs.\n\nC'est précisément ce que décrit le concept de [visibilité AI en trois couches distinctes](/blog/stop-treating-ai-visibility-as-one-problem-it-s-actually-three-on-three-different-layers-via-sejournal-duaneforrester) : chaque couche nécessite ses propres métriques et ses propres actions d'optimisation.\n\n### Scoring du pathway\n\nPour rendre le framework opérationnel, attribuez un score de visibilité pondéré à chaque pathway. L'idée n'est pas de remplacer le ROI — c'est de créer un indicateur composite qui reflète la réalité de votre exposition.\n\nExemple de pondération pour un e-commerce :\n\n| Pathway | Score Mention | Score Engagement | Score Conversion | Poids total |\n|---|---|---|---|---|\n| Direct (AI Overview → clic) | 1 | 3 | 5 | 9 |\n| Conversationnel (assistant → clic) | 2 | 3 | 5 | 10 |\n| Multi-étapes (assistant → search → clic) | 1 | 2 | 5 | 8 |\n| Agent (crawl API → action) | 2 | 4 | 5 | 11 |\n| Zero-click (citation sans clic) | 3 | 0 | 0 | 3 |\n\nLe score Mention du zero-click est élevé (3) parce que la citation dans une réponse AI est une exposition forte, même sans clic. Le score Agent Conversion est maximal parce qu'un agent qui utilise vos données pour compléter un achat génère un impact business direct.\n\nCes pondérations sont arbitraires — ajustez-les à votre modèle business. Un média monétisé à la page vue pondérera différemment d'un SaaS B2B.\n\n## Scénario concret : migration du framework sur un site média de 8 000 pages\n\nUn site média tech français (8 200 articles, 2,3 M de sessions organiques mensuelles) a implémenté le Funnel Query Pathway sur Q1 2026. Voici les résultats de l'instrumentation.\n\n### Situation initiale\n\n- Search Console : 45 M d'impressions/mois, CTR moyen de 3,8 %, en baisse constante depuis 12 mois (était à 5,1 %)\n- GA4 : trafic organique stable en apparence (-3 % YoY)\n- Aucune mesure du trafic AI assistant\n\n### Après instrumentation (configuration Nginx + GA4 channel group + scraping AI Overviews)\n\n**Couche Mention** : le site était cité dans les AI Overviews pour 1 840 requêtes distinctes (sur un scope de 5 000 requêtes trackées). 62 % de ces requêtes avaient un CTR inférieur à 1,5 %. Sans le framework, ces 1 840 points de visibilité étaient noyés dans les données Search Console globales.\n\n**Couche Engagement** : les logs Nginx ont révélé 180 000 requêtes mensuelles provenant d'agents AI (ChatGPT-User, PerplexityBot, ClaudeBot). En parallèle, GA4 avec le channel group personnalisé montrait 12 000 sessions/mois depuis des referrers AI — un volume invisible jusque-là parce qu'il était classé en \"Referral\" générique.\n\n**Couche Conversion** : les sessions AI avaient un taux de conversion newsletter 40 % supérieur au trafic organique classique. Hypothèse : l'utilisateur qui arrive depuis un assistant AI a déjà été pré-qualifié par la réponse conversationnelle.\n\n### Actions déclenchées\n\nL'analyse des pathways a révélé que les articles \"guide d'achat\" et \"comparatif\" étaient massivement cités par les assistants, tandis que les articles d'actualité pure ne l'étaient presque jamais. L'équipe éditoriale a ajusté son calendrier : +30 % de contenus comparatifs structurés avec des données factuelles extraibles (tableaux, specs, scores), -15 % de brèves factuelles dont la valeur se limite au pathway zero-click.\n\nCe type de décision éditoriale est impossible sans la décomposition en couches du Funnel Query Pathway.\n\n## Préparer la couche Agent : schema, MCP et endpoints structurés\n\nLa couche agent du framework est la plus prospective mais déjà actionable. Les agents autonomes — qu'il s'agisse du [Google Agent](/blog/what-google-s-ucp-tells-us-about-agent-ready-websites-via-sejournal-slobodanmanic) ou d'agents tiers utilisant le [protocole MCP](/blog/why-now-is-the-time-to-prepare-for-webmcp) — interagissent avec votre site différemment des humains et des crawlers classiques.\n\nPour maximiser votre visibilité dans la couche Agent, trois actions techniques :\n\n**1. Exposer des données structurées complètes et extractibles.** Les agents ne lisent pas vos paragraphes — ils parsent vos données structurées. Un Product schema incomplet (sans `price`, sans `availability`, sans `review`) est invisible pour un agent de comparaison.\n\n**2. Fournir des endpoints machine-readable.** Au-delà du schema sur vos pages HTML, envisagez des endpoints JSON-LD dédiés ou une API produit légère que les agents peuvent interroger. [L'audit technique pour l'ère AI](/blog/the-tech-seo-audit-for-the-ai-search-era-how-to-maximize-your-ai-visibility-via-sejournal-jetoctopus) détaille ces vérifications.\n\n**3. Monitorer et filtrer.** Tous les agents ne méritent pas le même traitement. Un agent qui crawle 50 000 pages/jour sans générer de valeur business consomme du crawl budget inutilement. La config Nginx ci-dessus vous donne la visibilité nécessaire pour décider quels agents bloquer via `robots.txt` et lesquels servir en priorité.\n\nBing a d'ailleurs clarifié ce que le concept de [grounding signifie pour la visibilité AI](/blog/bing-reveals-what-grounding-means-for-ai-search-visibility-via-sejournal-mattgsouthern) : la capacité d'un LLM à ancrer sa réponse dans vos données concrètes, pas dans une reformulation vague. Plus vos données sont structurées et accessibles, plus le grounding est fort, plus la mention est précise.\n\n## Les limites du framework et les trade-offs\n\nLe Funnel Query Pathway n'est pas une solution magique. Plusieurs limites méritent d'être explicites :\n\n**Le dark traffic AI reste majoritaire.** Quand un utilisateur copie-colle une réponse ChatGPT dans un email à un collègue qui visite ensuite votre site en direct, aucun framework ne capture ce pathway. La part de \"dark social\" appliquée à l'AI est probablement massive.\n\n**Le scoring est subjectif.** Les pondérations du pathway scoring reflètent vos hypothèses business, pas une vérité objective. Deux entreprises avec le même site peuvent avoir des scores radicalement différents — et c'est normal.\n\n**L'instrumentation a un coût.** La config Nginx, le channel group GA4, le scraping des AI Overviews, l'analyse des logs : ce n'est pas gratuit en temps d'ingénierie. Pour un site de 500 pages avec 50K sessions/mois, le ROI de cette instrumentation est discutable. Le framework prend son sens à partir de quelques milliers de pages et quelques centaines de milliers de sessions.\n\n**Les user-agents changent.** Les agents AI modifient régulièrement leurs identifiants. La map Nginx doit être maintenue. Un outil de monitoring comme Seogard qui détecte automatiquement les nouveaux user-agents dans vos logs réduit cette charge de maintenance.\n\n**La corrélation mention → conversion est fragile.** Prouver qu'une citation ChatGPT a causé une conversion trois jours plus tard via un pathway multi-étapes relève davantage de la modélisation probabiliste que de la mesure directe. Le framework fournit les données brutes — l'attribution reste un exercice d'interprétation.\n\n## Intégrer le Funnel Query Pathway dans vos reports existants\n\nLe framework n'a de valeur que s'il s'intègre dans vos workflows de reporting. Voici comment le greffer sur une stack existante.\n\nAjoutez un onglet \"AI Visibility\" à vos rapports mensuels avec trois métriques :\n\n- **AI Mention Rate** : nombre de requêtes trackées où votre site apparaît en citation AI / nombre total de requêtes trackées. Calculé via scraping SERP + analyse logs.\n- **AI Engagement Volume** : sessions GA4 depuis le channel group AI + requêtes agents dans les logs. C'est votre équivalent du \"trafic organique\" pour la surface AI.\n- **AI Conversion Value** : revenus ou leads attribués aux sessions du channel group AI. La métrique qui justifie l'investissement dans le framework.\n\nL'article source de Search Engine Land sur le Funnel Query Pathway ([référence](https://searchengineland.com/funnel-query-pathway-framework-measuring-ai-visibility-477932)) propose une vision similaire, orientée stratégie. Ce qui manque dans la plupart des implémentations, c'est la couche technique de collecte de données — les scripts, les configs, les pipelines — que nous avons détaillée ici.\n\nPour aller plus loin sur la mesure concrète des KPIs de recherche AI, le [framework des 5 couches GEO](/blog/the-5-layer-framework-for-measuring-geo-performance) complète le Funnel Query Pathway en ajoutant des dimensions de performance spécifiques aux réponses génératives.\n\n---\n\nLe Funnel Query Pathway n'est pas un remplacement des métriques SEO classiques — c'est une extension nécessaire pour couvrir les surfaces de visibilité que la Search Console et GA4 ignorent. L'instrumentation technique (logs serveur, channel groups, scoring par pathway) transforme un concept stratégique en système de mesure opérationnel. Les équipes qui l'implémentent maintenant auront six mois d'avance sur les données quand le trafic AI deviendra impossible à ignorer — et un outil de monitoring continu comme Seogard permet de détecter les régressions de visibilité sur ces nouvelles surfaces avant qu'elles n'impactent le business.","https://seogard.io/blog/the-funnel-query-pathway-a-framework-for-measuring-ai-visibility","Actualités SEO","2026-05-19T18:03:15.164Z","2026-05-19","Framework technique pour tracker votre visibilité sur search, assistants et agents AI. Implémentation, métriques et code pour remplacer les KPIs SEO classiques.","\u003Cp>Un site e-commerce de 22 000 pages voit son trafic organique chuter de 18 % en six mois. La Search Console ne montre pourtant aucune perte de positions sur les requêtes cibles. L'explication : 40 % des impressions passent désormais par des AI Overviews où le site apparaît en citation — sans jamais générer de clic comptabilisé. Les métriques classiques sont devenues aveugles à une part croissante de la visibilité réelle.\u003C/p>\n\u003Cp>Le concept de Funnel Query Pathway, formalisé récemment dans l'écosystème SEO, propose un cadre pour mesurer cette visibilité fragmentée entre search classique, assistants conversationnels et agents autonomes. Pas une énième matrice théorique : un modèle opérationnel, avec des points de mesure concrets à chaque étape du funnel.\u003C/p>\n\u003Ch2>Pourquoi les métriques SEO classiques cassent dans un environnement AI\u003C/h2>\n\u003Cp>Le modèle historique est simple : impression → clic → page vue → conversion. Google Search Console fournit les impressions et les clics. GA4 prend le relais côté site. Ce pipeline linéaire fonctionne quand le SERP est une liste de liens bleus.\u003C/p>\n\u003Cp>Dans un environnement AI, ce pipeline se fragmente en trois surfaces de visibilité distinctes :\u003C/p>\n\u003Ch3>La surface search augmentée (AI Overviews, SGE)\u003C/h3>\n\u003Cp>Google génère une réponse synthétique au-dessus des résultats organiques. Votre contenu peut être cité, paraphrasé, ou servir de source sans que l'utilisateur clique. La Search Console compte une \"impression\" quand votre lien apparaît dans le panel AI Overview, mais le CTR de cette impression est structurellement plus bas — souvent sous 2 % — parce que l'utilisateur obtient sa réponse sans cliquer.\u003C/p>\n\u003Cp>Le problème fondamental : une impression AI Overview et une impression position 3 ne représentent pas la même réalité. Pourtant, elles sont agrégées dans le même rapport Search Console. \u003Ca href=\"/blog/google-expands-ai-search-links-without-new-click-data-via-sejournal-mattgsouthern\">Google a élargi les liens dans les AI Overviews\u003C/a> sans pour autant fournir de données de clic différenciées.\u003C/p>\n\u003Ch3>La surface assistant (ChatGPT, Gemini, Copilot)\u003C/h3>\n\u003Cp>Quand un utilisateur pose une question à ChatGPT ou Gemini, la réponse peut citer votre site, recommander votre produit, ou reproduire votre contenu. Aucune de ces interactions ne génère d'impression dans la Search Console. Vous n'avez aucune visibilité native sur cette exposition — sauf si l'utilisateur clique sur le lien de citation et atterrit sur votre site avec un referrer identifiable.\u003C/p>\n\u003Ch3>La surface agent (Google Agent, agents MCP)\u003C/h3>\n\u003Cp>Les agents autonomes — ceux qui exécutent des tâches pour le compte de l'utilisateur — consultent vos pages, extraient des données structurées, et prennent des décisions sans intervention humaine. \u003Ca href=\"/blog/google-agent-the-web-s-new-visitor-just-got-an-identity-via-sejournal-slobodanmanic\">Google a donné une identité à son agent web\u003C/a>, ce qui permet de le détecter dans les logs serveur. Mais la plupart des agents tiers n'ont pas de user-agent standardisé. Vous servez des pages à des machines qui ne génèrent ni impressions, ni clics, ni pages vues dans vos dashboards.\u003C/p>\n\u003Cp>Le Funnel Query Pathway répond à cette fragmentation en proposant un modèle de mesure par couche, pas par canal.\u003C/p>\n\u003Ch2>Architecture du Funnel Query Pathway : les trois couches de mesure\u003C/h2>\n\u003Cp>Le framework repose sur une décomposition de la visibilité en trois niveaux mesurables indépendamment, puis corrélés :\u003C/p>\n\u003Cp>\u003Cstrong>Couche 1 — Mention (Visibility)\u003C/strong> : votre contenu est-il présent dans la réponse, quelle que soit la surface ? Mesure : détection de citations dans les AI Overviews, scraping des réponses d'assistants, analyse des logs pour les agents.\u003C/p>\n\u003Cp>\u003Cstrong>Couche 2 — Engagement (Interaction)\u003C/strong> : l'utilisateur ou l'agent interagit-il avec votre contenu après la mention ? Mesure : clics depuis AI Overviews, clics sur les citations d'assistants, requêtes API des agents vers vos endpoints.\u003C/p>\n\u003Cp>\u003Cstrong>Couche 3 — Conversion (Outcome)\u003C/strong> : cette interaction produit-elle un résultat business ? Mesure : conversion e-commerce, lead, inscription, ou action complétée par un agent (réservation, achat, extraction de données).\u003C/p>\n\u003Cp>Ce qui change fondamentalement par rapport au funnel SEO classique : la couche 1 (Mention) n'a pas d'équivalent dans les métriques traditionnelles. Une impression Search Console est déjà un hybride mention/engagement. Ici, la mention est découplée — vous pouvez être cité dans 500 réponses ChatGPT par jour sans qu'aucune métrique classique ne le reflète.\u003C/p>\n\u003Cp>Pour implémenter ce framework, il faut instrumenter chaque couche séparément.\u003C/p>\n\u003Ch2>Implémenter la couche Mention : détection de citations AI\u003C/h2>\n\u003Cp>La détection de mentions dans les réponses AI est le problème le plus difficile du framework. Contrairement aux SERP classiques qui ont des APIs (Search Console, SERPApi), les réponses d'assistants ne sont pas indexées de manière standardisée.\u003C/p>\n\u003Ch3>Monitoring des AI Overviews via Search Console API\u003C/h3>\n\u003Cp>La Search Console expose les données d'AI Overviews dans le rapport de performance, mais sans filtre dédié dans l'API. Il faut analyser les patterns de requêtes pour identifier les termes qui déclenchent des AI Overviews et croiser avec vos impressions.\u003C/p>\n\u003Cp>Voici un script Python qui extrait les requêtes à fort taux d'impression mais faible CTR — un signal proxy pour les requêtes où vous apparaissez en AI Overview sans clic :\u003C/p>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">import\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> os\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\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">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\">\u003Cspan style=\"color:#79B8FF\">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.from_authorized_user_file(\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    os.path.expanduser(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"~/.config/gsc/credentials.json\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">),\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FFAB70\">    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:#E1E4E8\">))\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_low_ctr_high_impression_queries\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(start_date, end_date, min_impressions\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#79B8FF\">50\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, max_ctr\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#79B8FF\">0.02\u003C/span>\u003Cspan style=\"color:#E1E4E8\">):\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    \"\"\"Identifie les requêtes probablement servies via AI Overviews :\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">       impressions élevées, CTR anormalement bas (&#x3C;2%)\"\"\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    response \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#79B8FF\"> SERVICE\u003C/span>\u003Cspan style=\"color:#E1E4E8\">.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\">{\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\">\"query\"\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\">5000\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\">\"country\"\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\">\"fra\"\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\">    ).execute()\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    ai_overview_candidates \u003C/span>\u003Cspan style=\"color:#F97583\">=\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\">        impressions \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\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:#E1E4E8\">        ctr \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> row[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"ctr\"\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\"> impressions \u003C/span>\u003Cspan style=\"color:#F97583\">>=\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> min_impressions \u003C/span>\u003Cspan style=\"color:#F97583\">and\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> ctr \u003C/span>\u003Cspan style=\"color:#F97583\">&#x3C;=\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> max_ctr:\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">            ai_overview_candidates.append({\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">                \"query\"\u003C/span>\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:#9ECBFF\">                \"page\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: row[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"keys\"\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:#9ECBFF\">                \"impressions\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: impressions,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">                \"clicks\"\u003C/span>\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:#9ECBFF\">                \"ctr\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#79B8FF\">round\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(ctr, \u003C/span>\u003Cspan style=\"color:#79B8FF\">4\u003C/span>\u003Cspan style=\"color:#E1E4E8\">),\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">                \"position\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\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:#6A737D\">    # Trier par impressions décroissantes pour prioriser\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    return\u003C/span>\u003Cspan style=\"color:#79B8FF\"> sorted\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(ai_overview_candidates, \u003C/span>\u003Cspan style=\"color:#FFAB70\">key\u003C/span>\u003Cspan style=\"color:#F97583\">=lambda\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> x: x[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"impressions\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">], \u003C/span>\u003Cspan style=\"color:#FFAB70\">reverse\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#79B8FF\">True\u003C/span>\u003Cspan style=\"color:#E1E4E8\">)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">candidates \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> get_low_ctr_high_impression_queries(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"2026-04-01\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"2026-04-30\"\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\"> c \u003C/span>\u003Cspan style=\"color:#F97583\">in\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> candidates[:\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\">\"[CTR \u003C/span>\u003Cspan style=\"color:#79B8FF\">{\u003C/span>\u003Cspan style=\"color:#E1E4E8\">c[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'ctr'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">]\u003C/span>\u003Cspan style=\"color:#F97583\">:.1%\u003C/span>\u003Cspan style=\"color:#79B8FF\">}\u003C/span>\u003Cspan style=\"color:#9ECBFF\">] \u003C/span>\u003Cspan style=\"color:#79B8FF\">{\u003C/span>\u003Cspan style=\"color:#E1E4E8\">c[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'query'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">]\u003C/span>\u003Cspan style=\"color:#79B8FF\">}\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> → \u003C/span>\u003Cspan style=\"color:#79B8FF\">{\u003C/span>\u003Cspan style=\"color:#E1E4E8\">c[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'page'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">]\u003C/span>\u003Cspan style=\"color:#79B8FF\">}\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> (\u003C/span>\u003Cspan style=\"color:#79B8FF\">{\u003C/span>\u003Cspan style=\"color:#E1E4E8\">c[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'impressions'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">]\u003C/span>\u003Cspan style=\"color:#79B8FF\">}\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> imp)\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">)\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>Ce script ne prouve pas la présence en AI Overview — il identifie les candidats. La confirmation nécessite un scraping SERP ou un outil de monitoring SERP qui différencie les types de résultats. Screaming Frog avec un crawl SERP personnalisé, ou des outils comme Semrush / Ahrefs qui trackent spécifiquement les AI Overviews, permettent de valider.\u003C/p>\n\u003Ch3>Détection des mentions dans les assistants conversationnels\u003C/h3>\n\u003Cp>Pour les assistants comme ChatGPT, Perplexity ou Gemini, la méthode la plus fiable reste l'analyse des logs serveur côté referrer. Voici une config Nginx qui isole et log les requêtes provenant d'agents AI connus :\u003C/p>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># /etc/nginx/conf.d/ai-agent-tracking.conf\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Map pour identifier les agents AI par user-agent\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">map\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> $\u003C/span>\u003Cspan style=\"color:#FFAB70\">http_user_agent\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> $is_ai_agent {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">    default\u003C/span>\u003Cspan style=\"color:#9ECBFF\">                         \"organic\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    \"~*ChatGPT-User\"\u003C/span>\u003Cspan style=\"color:#9ECBFF\">               \"chatgpt\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    \"~*GPTBot\"\u003C/span>\u003Cspan style=\"color:#9ECBFF\">                      \"gptbot_crawler\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    \"~*Google-Extended\"\u003C/span>\u003Cspan style=\"color:#9ECBFF\">             \"google_ai_training\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    \"~*Googlebot-Extended\"\u003C/span>\u003Cspan style=\"color:#9ECBFF\">          \"google_ai_training\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    \"~*PerplexityBot\"\u003C/span>\u003Cspan style=\"color:#9ECBFF\">              \"perplexity\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    \"~*ClaudeBot\"\u003C/span>\u003Cspan style=\"color:#9ECBFF\">                   \"claude\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    \"~*Claude-Web\"\u003C/span>\u003Cspan style=\"color:#9ECBFF\">                  \"claude_web\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    \"~*Applebot-Extended\"\u003C/span>\u003Cspan style=\"color:#9ECBFF\">           \"apple_ai\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    \"~*Bytespider\"\u003C/span>\u003Cspan style=\"color:#9ECBFF\">                  \"bytedance_ai\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    \"~*cohere-ai\"\u003C/span>\u003Cspan style=\"color:#9ECBFF\">                   \"cohere\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    \"~*GoogleOther\"\u003C/span>\u003Cspan style=\"color:#9ECBFF\">                 \"google_agent\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">}\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Map pour identifier les referrers AI\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">map\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> $\u003C/span>\u003Cspan style=\"color:#FFAB70\">http_referer\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> $ai_referrer {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">    default\u003C/span>\u003Cspan style=\"color:#9ECBFF\">                         \"none\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    \"~*chat\\.openai\\.com\"\u003C/span>\u003Cspan style=\"color:#9ECBFF\">           \"chatgpt\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    \"~*perplexity\\.ai\"\u003C/span>\u003Cspan style=\"color:#9ECBFF\">              \"perplexity\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    \"~*gemini\\.google\\.com\"\u003C/span>\u003Cspan style=\"color:#9ECBFF\">         \"gemini\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    \"~*copilot\\.microsoft\\.com\"\u003C/span>\u003Cspan style=\"color:#9ECBFF\">     \"copilot\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    \"~*you\\.com\"\u003C/span>\u003Cspan style=\"color:#9ECBFF\">                    \"you_ai\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">}\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Log format dédié AI avec toutes les dimensions utiles\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">log_format \u003C/span>\u003Cspan style=\"color:#E1E4E8\">ai_traffic\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    '$\u003C/span>\u003Cspan style=\"color:#E1E4E8\">time_iso8601\u003C/span>\u003Cspan style=\"color:#79B8FF\">\\t\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    '$\u003C/span>\u003Cspan style=\"color:#E1E4E8\">remote_addr\u003C/span>\u003Cspan style=\"color:#79B8FF\">\\t\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    '$\u003C/span>\u003Cspan style=\"color:#E1E4E8\">request_uri\u003C/span>\u003Cspan style=\"color:#79B8FF\">\\t\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    '$\u003C/span>\u003Cspan style=\"color:#E1E4E8\">status\u003C/span>\u003Cspan style=\"color:#79B8FF\">\\t\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    '$\u003C/span>\u003Cspan style=\"color:#E1E4E8\">body_bytes_sent\u003C/span>\u003Cspan style=\"color:#79B8FF\">\\t\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    '$\u003C/span>\u003Cspan style=\"color:#E1E4E8\">is_ai_agent\u003C/span>\u003Cspan style=\"color:#79B8FF\">\\t\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    '$\u003C/span>\u003Cspan style=\"color:#E1E4E8\">ai_referrer\u003C/span>\u003Cspan style=\"color:#79B8FF\">\\t\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    '$\u003C/span>\u003Cspan style=\"color:#E1E4E8\">http_user_agent\u003C/span>\u003Cspan style=\"color:#79B8FF\">\\t\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    '$\u003C/span>\u003Cspan style=\"color:#E1E4E8\">http_referer\u003C/span>\u003Cspan style=\"color:#79B8FF\">\\t\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    '$\u003C/span>\u003Cspan style=\"color:#E1E4E8\">request_time\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Log séparé pour le trafic AI uniquement\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">access_log \u003C/span>\u003Cspan style=\"color:#E1E4E8\">/var/log/nginx/ai-traffic.log ai_traffic\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    if=$is_ai_agent_or_referrer;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Variable combinée pour le conditional logging\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">map\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"$\u003C/span>\u003Cspan style=\"color:#E1E4E8\">is_ai_agent\u003C/span>\u003Cspan style=\"color:#9ECBFF\">:$\u003C/span>\u003Cspan style=\"color:#E1E4E8\">ai_referrer\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> $is_ai_agent_or_referrer {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    default\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\">    \"~^(?!organic:none)\" 1;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">}\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>Ce log dédié permet d'analyser quotidiennement quelles pages sont servies aux agents AI, à quelle fréquence, et depuis quelle source. C'est la base de votre couche Mention pour la surface agent.\u003C/p>\n\u003Cp>L'edge case ici : de nombreux utilisateurs ChatGPT cliquent sur un lien de citation et arrivent sur votre site avec un referrer \u003Ccode>chat.openai.com\u003C/code>. \u003Ca href=\"/blog/ga4-tracks-ai-assistant-traffic-faq-results-gone-seo-pulse-via-sejournal-mattgsouthern\">GA4 commence à tracker ce trafic assistant\u003C/a>, mais la granularité reste limitée. Le log serveur fournit des données plus complètes.\u003C/p>\n\u003Ch2>Implémenter la couche Engagement : tracker les interactions post-mention\u003C/h2>\n\u003Cp>La couche Engagement mesure ce qui se passe quand un utilisateur ou un agent passe de la mention à l'interaction. Pour les humains, c'est un clic. Pour les agents, c'est une requête API ou un crawl de données structurées.\u003C/p>\n\u003Ch3>Attribution du trafic AI dans GA4\u003C/h3>\n\u003Cp>GA4 regroupe le trafic ChatGPT, Perplexity et autres sous \"Referral\" ou \"Organic Social\" selon la configuration. Pour obtenir un canal dédié, créez un canal personnalisé via l'API Admin :\u003C/p>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">// Script Node.js pour créer un channel group AI dans GA4\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">// Nécessite @google-analytics/admin v1.x+\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">const\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> { \u003C/span>\u003Cspan style=\"color:#79B8FF\">AnalyticsAdminServiceClient\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> } \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#B392F0\"> require\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"@google-analytics/admin\"\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\"> client\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#F97583\"> new\u003C/span>\u003Cspan style=\"color:#B392F0\"> AnalyticsAdminServiceClient\u003C/span>\u003Cspan style=\"color:#E1E4E8\">();\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">async\u003C/span>\u003Cspan style=\"color:#F97583\"> function\u003C/span>\u003Cspan style=\"color:#B392F0\"> createAIChannelGroup\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#FFAB70\">propertyId\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\"> channelGroup\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    parent: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">`properties/${\u003C/span>\u003Cspan style=\"color:#E1E4E8\">propertyId\u003C/span>\u003Cspan style=\"color:#9ECBFF\">}`\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    channelGroup: {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      displayName: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"AI Search &#x26; Assistants\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      groupingRule: [\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">          displayName: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"ChatGPT\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">          expression: {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">            orGroup: {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">              expressions: [\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                  andGroup: {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                    expressions: [\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                      {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                        simpleFilter: {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                          fieldName: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"sessionSource\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                          stringFilter: {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                            matchType: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"CONTAINS\"\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\">\"chat.openai.com\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                          },\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                        },\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                      },\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                    ],\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#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\">        },\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">          displayName: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"Perplexity\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">          expression: {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">            orGroup: {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">              expressions: [\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                  andGroup: {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                    expressions: [\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                      {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                        simpleFilter: {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                          fieldName: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"sessionSource\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                          stringFilter: {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                            matchType: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"CONTAINS\"\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\">\"perplexity.ai\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                          },\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                        },\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                      },\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                    ],\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#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\">        },\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">          displayName: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"Google Gemini\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">          expression: {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">            orGroup: {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">              expressions: [\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                  andGroup: {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                    expressions: [\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                      {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                        simpleFilter: {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                          fieldName: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"sessionSource\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                          stringFilter: {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                            matchType: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"CONTAINS\"\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\">\"gemini.google.com\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                          },\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                        },\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                      },\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                    ],\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#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\">        },\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">          displayName: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"Microsoft Copilot\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">          expression: {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">            orGroup: {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">              expressions: [\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                  andGroup: {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                    expressions: [\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                      {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                        simpleFilter: {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                          fieldName: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"sessionSource\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                          stringFilter: {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                            matchType: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"CONTAINS\"\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\">\"copilot.microsoft.com\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                          },\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                        },\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                      },\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                    ],\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#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\">        },\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">          displayName: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"AI Agents (Other)\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">          expression: {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">            orGroup: {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">              expressions: [\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                  andGroup: {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                    expressions: [\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                      {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                        simpleFilter: {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                          fieldName: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"sessionSource\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                          stringFilter: {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                            matchType: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"CONTAINS\"\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\">\"you.com\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                          },\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                        },\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                      },\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                    ],\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#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\">        },\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:#F97583\">  const\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> [\u003C/span>\u003Cspan style=\"color:#79B8FF\">response\u003C/span>\u003Cspan style=\"color:#E1E4E8\">] \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#F97583\"> await\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> client.\u003C/span>\u003Cspan style=\"color:#B392F0\">createChannelGroup\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(channelGroup);\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  console.\u003C/span>\u003Cspan style=\"color:#B392F0\">log\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">`Channel group créé : ${\u003C/span>\u003Cspan style=\"color:#E1E4E8\">response\u003C/span>\u003Cspan style=\"color:#9ECBFF\">.\u003C/span>\u003Cspan style=\"color:#E1E4E8\">name\u003C/span>\u003Cspan style=\"color:#9ECBFF\">}`\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\"> response;\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:#B392F0\">createAIChannelGroup\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"YOUR_GA4_PROPERTY_ID\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">);\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>Ce channel group vous donne un segment dédié dans les rapports GA4 — sessions, engagement rate, conversions — spécifiquement pour le trafic provenant d'assistants AI. C'est la base de votre couche Engagement côté humain.\u003C/p>\n\u003Ch3>Mesurer l'engagement des agents\u003C/h3>\n\u003Cp>Pour les agents autonomes, l'engagement se mesure dans les logs serveur. Un agent qui crawle votre page produit et extrait le prix via JSON-LD génère un \"engagement\" même sans page vue GA4. Croisez vos logs AI (configurés plus haut) avec vos données structurées pour identifier quelles informations les agents extraient :\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 des pages les plus consultées par les agents AI\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># sur les 7 derniers jours\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">awk\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -F\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'\\t'\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> '\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  $6 != \"organic\" {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    agent_type = $6;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    page = $3;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    # Nettoyer les query strings\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    gsub(/\\?.*/, \"\", page);\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    count[agent_type][page]++;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    total[agent_type]++;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  }\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  END {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    for (agent in total) {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">      print \"=== \" agent \" (\" total[agent] \" requêtes) ===\";\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">      # Trier par fréquence\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">      n = asorti(count[agent], sorted, \"@val_num_desc\");\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">      for (i = 1; i &#x3C;= (n &#x3C; 20 ? n : 20); i++) {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">        printf \"  %5d  %s\\n\", count[agent][sorted[i]], sorted[i];\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">      }\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    }\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  }\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">'\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> /var/log/nginx/ai-traffic.log\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>Ce type d'analyse révèle des patterns invisibles dans les outils classiques. Sur le site e-commerce mentionné en introduction (22K pages), cette analyse a montré que GPTBot crawlait massivement les pages catégorie (pas les fiches produit), tandis que PerplexityBot ciblait les guides d'achat. Deux comportements distincts qui impliquent deux stratégies d'optimisation différentes.\u003C/p>\n\u003Ch2>Mapper les types de requêtes sur le funnel : le \"Query Pathway\"\u003C/h2>\n\u003Cp>Le framework ne se limite pas à empiler des couches de mesure. Le \"Pathway\" est le chemin qu'une requête emprunte à travers les surfaces AI avant d'atteindre (ou non) votre site.\u003C/p>\n\u003Ch3>Taxonomie des query pathways\u003C/h3>\n\u003Cp>\u003Cstrong>Pathway direct\u003C/strong> : requête Google → AI Overview → clic citation → votre site. Le plus proche du modèle classique. Mesurable via Search Console + GA4.\u003C/p>\n\u003Cp>\u003Cstrong>Pathway conversationnel\u003C/strong> : question ChatGPT → réponse avec citation → clic utilisateur → votre site. Mesurable via referrer + GA4.\u003C/p>\n\u003Cp>\u003Cstrong>Pathway multi-étapes\u003C/strong> : l'utilisateur pose une question à Gemini, obtient une réponse citant votre marque, puis fait une recherche Google \"votresite avis\", puis clique. Le premier touchpoint (Gemini) est invisible sauf si vous monitorez les mentions. Le clic final est attribué à \"organic\" dans GA4.\u003C/p>\n\u003Cp>\u003Cstrong>Pathway agent\u003C/strong> : un agent MCP consulte votre API produit, extrait des specs, et complète une tâche (comparaison de prix pour un utilisateur). Zéro page vue. Zéro clic. Mais une visibilité et un impact business réels — l'agent peut recommander votre produit.\u003C/p>\n\u003Cp>\u003Cstrong>Pathway zero-click\u003C/strong> : la réponse AI satisfait complètement l'utilisateur. Votre contenu est cité mais personne ne visite jamais votre site. C'est la visibilité la plus difficile à valoriser, mais elle construit la notoriété de marque et influence les pathways multi-étapes futurs.\u003C/p>\n\u003Cp>C'est précisément ce que décrit le concept de \u003Ca href=\"/blog/stop-treating-ai-visibility-as-one-problem-it-s-actually-three-on-three-different-layers-via-sejournal-duaneforrester\">visibilité AI en trois couches distinctes\u003C/a> : chaque couche nécessite ses propres métriques et ses propres actions d'optimisation.\u003C/p>\n\u003Ch3>Scoring du pathway\u003C/h3>\n\u003Cp>Pour rendre le framework opérationnel, attribuez un score de visibilité pondéré à chaque pathway. L'idée n'est pas de remplacer le ROI — c'est de créer un indicateur composite qui reflète la réalité de votre exposition.\u003C/p>\n\u003Cp>Exemple de pondération pour un e-commerce :\u003C/p>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Pathway\u003C/th>\n\u003Cth>Score Mention\u003C/th>\n\u003Cth>Score Engagement\u003C/th>\n\u003Cth>Score Conversion\u003C/th>\n\u003Cth>Poids total\u003C/th>\n\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>Direct (AI Overview → clic)\u003C/td>\n\u003Ctd>1\u003C/td>\n\u003Ctd>3\u003C/td>\n\u003Ctd>5\u003C/td>\n\u003Ctd>9\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Conversationnel (assistant → clic)\u003C/td>\n\u003Ctd>2\u003C/td>\n\u003Ctd>3\u003C/td>\n\u003Ctd>5\u003C/td>\n\u003Ctd>10\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Multi-étapes (assistant → search → clic)\u003C/td>\n\u003Ctd>1\u003C/td>\n\u003Ctd>2\u003C/td>\n\u003Ctd>5\u003C/td>\n\u003Ctd>8\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Agent (crawl API → action)\u003C/td>\n\u003Ctd>2\u003C/td>\n\u003Ctd>4\u003C/td>\n\u003Ctd>5\u003C/td>\n\u003Ctd>11\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Zero-click (citation sans clic)\u003C/td>\n\u003Ctd>3\u003C/td>\n\u003Ctd>0\u003C/td>\n\u003Ctd>0\u003C/td>\n\u003Ctd>3\u003C/td>\n\u003C/tr>\n\u003C/tbody>\n\u003C/table>\n\u003Cp>Le score Mention du zero-click est élevé (3) parce que la citation dans une réponse AI est une exposition forte, même sans clic. Le score Agent Conversion est maximal parce qu'un agent qui utilise vos données pour compléter un achat génère un impact business direct.\u003C/p>\n\u003Cp>Ces pondérations sont arbitraires — ajustez-les à votre modèle business. Un média monétisé à la page vue pondérera différemment d'un SaaS B2B.\u003C/p>\n\u003Ch2>Scénario concret : migration du framework sur un site média de 8 000 pages\u003C/h2>\n\u003Cp>Un site média tech français (8 200 articles, 2,3 M de sessions organiques mensuelles) a implémenté le Funnel Query Pathway sur Q1 2026. Voici les résultats de l'instrumentation.\u003C/p>\n\u003Ch3>Situation initiale\u003C/h3>\n\u003Cul>\n\u003Cli>Search Console : 45 M d'impressions/mois, CTR moyen de 3,8 %, en baisse constante depuis 12 mois (était à 5,1 %)\u003C/li>\n\u003Cli>GA4 : trafic organique stable en apparence (-3 % YoY)\u003C/li>\n\u003Cli>Aucune mesure du trafic AI assistant\u003C/li>\n\u003C/ul>\n\u003Ch3>Après instrumentation (configuration Nginx + GA4 channel group + scraping AI Overviews)\u003C/h3>\n\u003Cp>\u003Cstrong>Couche Mention\u003C/strong> : le site était cité dans les AI Overviews pour 1 840 requêtes distinctes (sur un scope de 5 000 requêtes trackées). 62 % de ces requêtes avaient un CTR inférieur à 1,5 %. Sans le framework, ces 1 840 points de visibilité étaient noyés dans les données Search Console globales.\u003C/p>\n\u003Cp>\u003Cstrong>Couche Engagement\u003C/strong> : les logs Nginx ont révélé 180 000 requêtes mensuelles provenant d'agents AI (ChatGPT-User, PerplexityBot, ClaudeBot). En parallèle, GA4 avec le channel group personnalisé montrait 12 000 sessions/mois depuis des referrers AI — un volume invisible jusque-là parce qu'il était classé en \"Referral\" générique.\u003C/p>\n\u003Cp>\u003Cstrong>Couche Conversion\u003C/strong> : les sessions AI avaient un taux de conversion newsletter 40 % supérieur au trafic organique classique. Hypothèse : l'utilisateur qui arrive depuis un assistant AI a déjà été pré-qualifié par la réponse conversationnelle.\u003C/p>\n\u003Ch3>Actions déclenchées\u003C/h3>\n\u003Cp>L'analyse des pathways a révélé que les articles \"guide d'achat\" et \"comparatif\" étaient massivement cités par les assistants, tandis que les articles d'actualité pure ne l'étaient presque jamais. L'équipe éditoriale a ajusté son calendrier : +30 % de contenus comparatifs structurés avec des données factuelles extraibles (tableaux, specs, scores), -15 % de brèves factuelles dont la valeur se limite au pathway zero-click.\u003C/p>\n\u003Cp>Ce type de décision éditoriale est impossible sans la décomposition en couches du Funnel Query Pathway.\u003C/p>\n\u003Ch2>Préparer la couche Agent : schema, MCP et endpoints structurés\u003C/h2>\n\u003Cp>La couche agent du framework est la plus prospective mais déjà actionable. Les agents autonomes — qu'il s'agisse du \u003Ca href=\"/blog/what-google-s-ucp-tells-us-about-agent-ready-websites-via-sejournal-slobodanmanic\">Google Agent\u003C/a> ou d'agents tiers utilisant le \u003Ca href=\"/blog/why-now-is-the-time-to-prepare-for-webmcp\">protocole MCP\u003C/a> — interagissent avec votre site différemment des humains et des crawlers classiques.\u003C/p>\n\u003Cp>Pour maximiser votre visibilité dans la couche Agent, trois actions techniques :\u003C/p>\n\u003Cp>\u003Cstrong>1. Exposer des données structurées complètes et extractibles.\u003C/strong> Les agents ne lisent pas vos paragraphes — ils parsent vos données structurées. Un Product schema incomplet (sans \u003Ccode>price\u003C/code>, sans \u003Ccode>availability\u003C/code>, sans \u003Ccode>review\u003C/code>) est invisible pour un agent de comparaison.\u003C/p>\n\u003Cp>\u003Cstrong>2. Fournir des endpoints machine-readable.\u003C/strong> Au-delà du schema sur vos pages HTML, envisagez des endpoints JSON-LD dédiés ou une API produit légère que les agents peuvent interroger. \u003Ca href=\"/blog/the-tech-seo-audit-for-the-ai-search-era-how-to-maximize-your-ai-visibility-via-sejournal-jetoctopus\">L'audit technique pour l'ère AI\u003C/a> détaille ces vérifications.\u003C/p>\n\u003Cp>\u003Cstrong>3. Monitorer et filtrer.\u003C/strong> Tous les agents ne méritent pas le même traitement. Un agent qui crawle 50 000 pages/jour sans générer de valeur business consomme du crawl budget inutilement. La config Nginx ci-dessus vous donne la visibilité nécessaire pour décider quels agents bloquer via \u003Ccode>robots.txt\u003C/code> et lesquels servir en priorité.\u003C/p>\n\u003Cp>Bing a d'ailleurs clarifié ce que le concept de \u003Ca href=\"/blog/bing-reveals-what-grounding-means-for-ai-search-visibility-via-sejournal-mattgsouthern\">grounding signifie pour la visibilité AI\u003C/a> : la capacité d'un LLM à ancrer sa réponse dans vos données concrètes, pas dans une reformulation vague. Plus vos données sont structurées et accessibles, plus le grounding est fort, plus la mention est précise.\u003C/p>\n\u003Ch2>Les limites du framework et les trade-offs\u003C/h2>\n\u003Cp>Le Funnel Query Pathway n'est pas une solution magique. Plusieurs limites méritent d'être explicites :\u003C/p>\n\u003Cp>\u003Cstrong>Le dark traffic AI reste majoritaire.\u003C/strong> Quand un utilisateur copie-colle une réponse ChatGPT dans un email à un collègue qui visite ensuite votre site en direct, aucun framework ne capture ce pathway. La part de \"dark social\" appliquée à l'AI est probablement massive.\u003C/p>\n\u003Cp>\u003Cstrong>Le scoring est subjectif.\u003C/strong> Les pondérations du pathway scoring reflètent vos hypothèses business, pas une vérité objective. Deux entreprises avec le même site peuvent avoir des scores radicalement différents — et c'est normal.\u003C/p>\n\u003Cp>\u003Cstrong>L'instrumentation a un coût.\u003C/strong> La config Nginx, le channel group GA4, le scraping des AI Overviews, l'analyse des logs : ce n'est pas gratuit en temps d'ingénierie. Pour un site de 500 pages avec 50K sessions/mois, le ROI de cette instrumentation est discutable. Le framework prend son sens à partir de quelques milliers de pages et quelques centaines de milliers de sessions.\u003C/p>\n\u003Cp>\u003Cstrong>Les user-agents changent.\u003C/strong> Les agents AI modifient régulièrement leurs identifiants. La map Nginx doit être maintenue. Un outil de monitoring comme Seogard qui détecte automatiquement les nouveaux user-agents dans vos logs réduit cette charge de maintenance.\u003C/p>\n\u003Cp>\u003Cstrong>La corrélation mention → conversion est fragile.\u003C/strong> Prouver qu'une citation ChatGPT a causé une conversion trois jours plus tard via un pathway multi-étapes relève davantage de la modélisation probabiliste que de la mesure directe. Le framework fournit les données brutes — l'attribution reste un exercice d'interprétation.\u003C/p>\n\u003Ch2>Intégrer le Funnel Query Pathway dans vos reports existants\u003C/h2>\n\u003Cp>Le framework n'a de valeur que s'il s'intègre dans vos workflows de reporting. Voici comment le greffer sur une stack existante.\u003C/p>\n\u003Cp>Ajoutez un onglet \"AI Visibility\" à vos rapports mensuels avec trois métriques :\u003C/p>\n\u003Cul>\n\u003Cli>\u003Cstrong>AI Mention Rate\u003C/strong> : nombre de requêtes trackées où votre site apparaît en citation AI / nombre total de requêtes trackées. Calculé via scraping SERP + analyse logs.\u003C/li>\n\u003Cli>\u003Cstrong>AI Engagement Volume\u003C/strong> : sessions GA4 depuis le channel group AI + requêtes agents dans les logs. C'est votre équivalent du \"trafic organique\" pour la surface AI.\u003C/li>\n\u003Cli>\u003Cstrong>AI Conversion Value\u003C/strong> : revenus ou leads attribués aux sessions du channel group AI. La métrique qui justifie l'investissement dans le framework.\u003C/li>\n\u003C/ul>\n\u003Cp>L'article source de Search Engine Land sur le Funnel Query Pathway (\u003Ca href=\"https://searchengineland.com/funnel-query-pathway-framework-measuring-ai-visibility-477932\">référence\u003C/a>) propose une vision similaire, orientée stratégie. Ce qui manque dans la plupart des implémentations, c'est la couche technique de collecte de données — les scripts, les configs, les pipelines — que nous avons détaillée ici.\u003C/p>\n\u003Cp>Pour aller plus loin sur la mesure concrète des KPIs de recherche AI, le \u003Ca href=\"/blog/the-5-layer-framework-for-measuring-geo-performance\">framework des 5 couches GEO\u003C/a> complète le Funnel Query Pathway en ajoutant des dimensions de performance spécifiques aux réponses génératives.\u003C/p>\n\u003Chr>\n\u003Cp>Le Funnel Query Pathway n'est pas un remplacement des métriques SEO classiques — c'est une extension nécessaire pour couvrir les surfaces de visibilité que la Search Console et GA4 ignorent. L'instrumentation technique (logs serveur, channel groups, scoring par pathway) transforme un concept stratégique en système de mesure opérationnel. Les équipes qui l'implémentent maintenant auront six mois d'avance sur les données quand le trafic AI deviendra impossible à ignorer — et un outil de monitoring continu comme Seogard permet de détecter les régressions de visibilité sur ces nouvelles surfaces avant qu'elles n'impactent le business.\u003C/p>",null,12,[18,19,20,21,22,23,24],"funnel","query","pathway","framework","measuring","AI visibility","GEO","Funnel Query Pathway : mesurer la visibilité AI au-delà du CTR","Tue May 19 2026 18:03:15 GMT+0000 (Coordinated Universal Time)",[28,42,56],{"_id":29,"slug":30,"__v":6,"author":7,"canonical":31,"category":10,"createdAt":32,"date":33,"description":34,"image":15,"imageAlt":15,"readingTime":16,"tags":35,"title":40,"updatedAt":41},"6a0d4ea4aa6b273b0cde629a","reasoning-lift-what-happens-to-brand-visibility-when-ai-thinks-harder","https://seogard.io/blog/reasoning-lift-what-happens-to-brand-visibility-when-ai-thinks-harder","2026-05-20T06:03:16.188Z","2026-05-20","Analyse technique de 200 réponses GPT-5.2 : le raisonnement élevé cite plus de sources, favorise le haut de funnel et redéfinit la visibilité de marque.",[36,37,38,24,39],"reasoning lift","AI search","brand visibility","LLM","Reasoning lift : impact du raisonnement IA sur la visibilité des marques","Wed May 20 2026 06:03:16 GMT+0000 (Coordinated Universal Time)",{"_id":43,"slug":44,"__v":6,"author":7,"canonical":45,"category":10,"createdAt":46,"date":33,"description":47,"image":15,"imageAlt":15,"readingTime":16,"tags":48,"title":54,"updatedAt":55},"6a0d86d3aa6b273b0c0cbec7","google-brings-ai-content-verification-to-search-via-sejournal-mattgsouthern","https://seogard.io/blog/google-brings-ai-content-verification-to-search-via-sejournal-mattgsouthern","2026-05-20T10:02:59.955Z","Google intègre SynthID à Search pour vérifier le contenu IA. Analyse technique des watermarks, impact sur le crawl et stratégies SEO concrètes.",[49,50,51,52,53],"google","synthid","ai content verification","search","seo technique","SynthID dans Search : impact technique sur le SEO","Wed May 20 2026 10:02:59 GMT+0000 (Coordinated Universal Time)",{"_id":57,"slug":58,"__v":6,"author":7,"canonical":59,"category":10,"createdAt":60,"date":33,"description":61,"image":15,"imageAlt":15,"readingTime":16,"tags":62,"title":68,"updatedAt":69},"6a0df755aa6b273b0c69952f","google-s-llms-txt-guidance-depends-on-which-product-you-ask-via-sejournal-mattgsouthern","https://seogard.io/blog/google-s-llms-txt-guidance-depends-on-which-product-you-ask-via-sejournal-mattgsouthern","2026-05-20T18:03:01.922Z","Google Search ignore llms.txt, mais Lighthouse l'audite pour l'agentic browsing. Analyse technique des contradictions et guide d'implémentation.",[63,64,65,66,67],"llms.txt","agentic browsing","Lighthouse","AI Search","Google","llms.txt : Google Search et Lighthouse se contredisent","Wed May 20 2026 18:03:01 GMT+0000 (Coordinated Universal Time)"]