[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fEp3bfIbhh57Wo5qvhfKbiJmQ_vC-fa11N8el-JpGvoM":3,"$ftq53z2aAKZ-tc-BA9zU81_40E2vlsJyN7nziKARCn-A":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},"6a1a7d89aa6b273b0ccd1780","google-serp-layout-shift-position-1-now-appears-halfway-down-the-page-via-sejournal-lorenbaker",0,"Equipe Seogard","Sur desktop, le premier résultat organique de Google apparaît en moyenne à plus de 800 pixels du haut de page. Sur mobile, c'est pire. Les études récentes mesurant la SERP en pixels — et non plus en positions — révèlent une réalité que le rank tracking classique masque entièrement : votre position 1 est invisible sans scroll.\n\n## La SERP mesurée en pixels : ce que les études révèlent\n\nLe paradigme du rank tracking repose sur une hypothèse implicite : position 1 = premier élément vu par l'utilisateur. Cette hypothèse est morte depuis au moins 2023, mais l'industrie continue de tracker des positions comme si la SERP était une liste ordonnée linéaire.\n\nLes [analyses menées par Search Engine Journal](https://www.searchenginejournal.com/updated-serps-new-study-measures-the-serp-in-pixels-not-ranks-recap/577359/) et les données de STAT, Semrush Sensor, et Advanced Web Ranking convergent : pour les requêtes commerciales à forte intention, Google empile en moyenne 3 à 5 blocs de contenu propriétaire avant le premier lien organique.\n\n### Anatomie d'une SERP commerciale en 2026\n\nPrenons une requête type `meilleur CRM B2B`. Voici ce que Google affiche avant le premier résultat organique, mesuré en pixels sur un viewport 1440×900 :\n\n| Bloc SERP | Hauteur estimée (px) | Cumulé |\n|---|---|---|\n| Barre de recherche + navigation | ~120 | 120 |\n| AI Overview (replié) | ~180 | 300 |\n| Sponsored (4 annonces) | ~400 | 700 |\n| People Also Ask (3 questions) | ~150 | 850 |\n| **Premier résultat organique** | — | **~850px** |\n\nSur un écran 900px de haut, le premier résultat organique est littéralement sous la ligne de flottaison. L'utilisateur doit scroller pour le voir.\n\n### Le calcul du \"pixel rank\" vs le rank classique\n\nLe concept de \"pixel rank\" — la distance en pixels entre le haut du viewport et le premier pixel du résultat — est la seule métrique qui capture la visibilité réelle. Un site en position 1 avec un pixel rank de 900px a une visibilité réelle inférieure à un site en position 4 sur une requête sans ads et sans AI Overview (pixel rank ~300px).\n\nVous pouvez mesurer cela vous-même avec un script Puppeteer :\n\n```javascript\nconst puppeteer = require('puppeteer');\n\nasync function measurePixelRank(query, targetDomain) {\n  const browser = await puppeteer.launch({\n    headless: true,\n    args: ['--window-size=1440,900']\n  });\n  const page = await browser.newPage();\n  await page.setViewport({ width: 1440, height: 900 });\n  \n  // Simuler une recherche Google (respectez les ToS)\n  await page.goto(\n    `https://www.google.com/search?q=${encodeURIComponent(query)}&gl=fr&hl=fr`,\n    { waitUntil: 'networkidle2' }\n  );\n\n  // Attendre le rendu complet (AI Overview peut charger en async)\n  await page.waitForTimeout(3000);\n\n  // Mesurer la position Y du premier résultat organique\n  const pixelData = await page.evaluate((domain) => {\n    const results = document.querySelectorAll('div[data-sokoban-container] a[href]');\n    const allLinks = document.querySelectorAll('#search a[href*=\"' + domain + '\"]');\n    \n    // Position du premier résultat organique (tous domaines)\n    const firstOrganic = document.querySelector('#rso > div:first-child');\n    const firstOrganicRect = firstOrganic\n      ? firstOrganic.getBoundingClientRect()\n      : null;\n\n    // Position du domaine cible\n    let targetRect = null;\n    for (const link of allLinks) {\n      const container = link.closest('.g');\n      if (container) {\n        targetRect = container.getBoundingClientRect();\n        break;\n      }\n    }\n\n    return {\n      firstOrganicPixelY: firstOrganicRect ? Math.round(firstOrganicRect.top) : null,\n      targetPixelY: targetRect ? Math.round(targetRect.top) : null,\n      viewportHeight: window.innerHeight,\n      isAboveFold: targetRect ? targetRect.top \u003C window.innerHeight : false\n    };\n  }, targetDomain);\n\n  await browser.close();\n  return pixelData;\n}\n\n// Usage\nmeasurePixelRank('meilleur crm b2b', 'hubspot.com')\n  .then(data => {\n    console.log(`Premier résultat organique: ${data.firstOrganicPixelY}px`);\n    console.log(`Domaine cible: ${data.targetPixelY}px`);\n    console.log(`Above the fold: ${data.isAboveFold}`);\n    console.log(`Viewport: ${data.viewportHeight}px`);\n  });\n```\n\nCe script est une base. En production, vous le paramétrerez pour boucler sur vos top 50 requêtes et exporter les données dans un sheet pour suivre l'évolution du pixel rank semaine après semaine. La donnée brute que Search Console ne fournit pas.\n\n## Pourquoi Google pousse le premier résultat organique vers le bas\n\nCe n'est pas un bug. C'est une stratégie de monétisation et de rétention parfaitement délibérée.\n\n### Le modèle économique de la rétention SERP\n\nGoogle a trois objectifs simultanés sur chaque SERP :\n\n1. **Maximiser les clics payants** : chaque pixel above-the-fold occupé par une annonce augmente la probabilité de clic Ads. Google rapportait 237 milliards de dollars de revenus publicitaires en 2023 (source : [Alphabet Q4 2023 Earnings](https://abc.xyz/investor/)).\n\n2. **Répondre dans la SERP** : les AI Overviews, les Featured Snippets, les Knowledge Panels réduisent le besoin de cliquer. Google ne cache pas cette intention — les \"zero-click searches\" représentent, selon les analyses de Rand Fishkin (SparkToro), une part croissante des requêtes.\n\n3. **Empêcher la commoditisation** : si 10 liens bleus suffisaient, n'importe quel moteur pourrait concurrencer Google. Les blocs propriétaires créent un moat UX.\n\n### L'impact de l'AI Overview sur le pixel rank\n\nL'AI Overview est le facteur le plus destructeur pour la visibilité organique. Même replié (collapsed), il occupe 150-200px. Déplié, il peut atteindre 400-600px selon la complexité de la réponse. Sur mobile, un AI Overview déplié peut repousser le premier résultat organique à 2-3 écrans de scroll.\n\nLa [stratégie AI de Google pour la recherche](/blog/google-s-ai-search-guidance-is-naive-and-self-serving) accentue cette tendance. Chaque itération de l'AI Overview augmente sa couverture de requêtes et sa taille visuelle.\n\nCe qui est mesurable aujourd'hui : pour les requêtes informationnelles, l'AI Overview apparaît sur environ 40-60% des SERP (variable selon la verticale et la géolocalisation). Pour les requêtes transactionnelles, la combinaison ads + shopping + AI Overview crée un mur de 1000+ pixels avant le premier lien organique.\n\n## Le CTR organique en chute : les chiffres qui comptent\n\nLe taux de clic de la position 1 organique a historiquement oscillé entre 25% et 35% selon les études (Backlinko, Advanced Web Ranking, Sistrix). Ces chiffres sont en déclin structurel.\n\n### Modélisation de l'impact pour un site e-commerce\n\nPrenons un scénario concret : **MaisonDeco.fr**, un e-commerce de mobilier avec 18 000 pages produit, positionné en top 3 sur 2 400 requêtes à intention commerciale.\n\n**Situation avant le SERP layout shift (2022)** :\n- Position 1 moyenne → CTR estimé : 28%\n- 2 400 requêtes × volume moyen 320 recherches/mois × 28% CTR = ~215 000 clics organiques/mois\n- Panier moyen : 180€, taux de conversion : 2.1%\n- Revenu organique estimé : ~813 000€/mois\n\n**Situation après (2026)** — même position, même volume :\n- Position 1 mais pixel rank moyen à 850px → CTR estimé : 18% (baisse de 36%)\n- 2 400 × 320 × 18% = ~138 000 clics/mois\n- Même panier, même conversion\n- Revenu organique estimé : ~522 000€/mois\n- **Delta : -291 000€/mois, soit -3.5M€/an**\n\nCes chiffres ne sont pas fantaisistes. La baisse de CTR est documentée par les données de Search Console de dizaines de sites — les impressions restent stables (le ranking n'a pas bougé), mais les clics chutent.\n\n### Vérifier l'impact sur votre propre site\n\nDans Google Search Console, exportez vos données performance par requête sur 12 mois. Calculez le CTR moyen par position, et comparez les courbes Q1 2025 vs Q1 2026 :\n\n```python\nimport pandas as pd\n\n# Export CSV depuis Search Console > Performance > Pages\ndf = pd.read_csv('search_console_export.csv')\n\n# Filtrer sur les requêtes avec position moyenne \u003C= 3\ntop3 = df[df['Position'] \u003C= 3.0].copy()\n\n# Calculer le CTR moyen par trimestre\ntop3['Date'] = pd.to_datetime(top3['Date'])\ntop3['Quarter'] = top3['Date'].dt.to_period('Q')\n\nctr_by_quarter = top3.groupby('Quarter').agg(\n    avg_ctr=('CTR', 'mean'),\n    total_clicks=('Clicks', 'sum'),\n    total_impressions=('Impressions', 'sum'),\n    avg_position=('Position', 'mean')\n).reset_index()\n\nprint(ctr_by_quarter.to_string())\n\n# Ce que vous cherchez :\n# - Position stable (avg_position ~ constant)\n# - CTR en baisse (avg_ctr diminue trimestre après trimestre)\n# = Confirmation du SERP layout shift\n```\n\nSi vous observez une position stable avec un CTR en baisse régulière, vous avez la preuve quantitative que le layout de la SERP, et non votre ranking, est responsable de la perte de trafic. C'est un signal critique, et c'est exactement le type de dégradation silencieuse qu'un monitoring continu permet de détecter avant qu'elle n'atteigne votre P&L.\n\n## Stratégies d'adaptation : au-delà du rank tracking\n\nLe rank tracking reste utile comme signal relatif (vous vs. la concurrence), mais il ne suffit plus comme métrique de visibilité. Voici les leviers actionnables.\n\n### Capturer les SERP features, pas juste les positions\n\nLes blocs que Google affiche au-dessus des résultats organiques sont aussi des emplacements que vous pouvez cibler :\n\n**Featured Snippet** : structurer le contenu pour répondre directement à la query dans les 40-60 premiers mots d'un paragraphe, ou via une liste/tableau balisé. Le Featured Snippet apparaît au-dessus des résultats organiques classiques — pixel rank ~200px même avec des ads.\n\n**FAQ Schema** : les résultats enrichis avec `FAQPage` schema gagnent en hauteur visuelle dans la SERP, ce qui augmente le ratio pixels occupés / résultats affichés. Balisez vos pages stratégiques :\n\n```html\n\u003Cscript type=\"application/ld+json\">\n{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"FAQPage\",\n  \"mainEntity\": [\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Quelle est la différence entre position organique et pixel rank ?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"La position organique indique le classement relatif parmi les résultats organiques. Le pixel rank mesure la distance en pixels entre le haut du viewport et le résultat, incluant les ads, AI Overviews, et autres SERP features qui le précèdent.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Comment mesurer le pixel rank de mes pages ?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Utilisez Puppeteer ou Playwright pour automatiser des captures SERP et mesurer la coordonnée Y du premier pixel de votre résultat. Les outils comme STAT ou Semrush commencent à intégrer des métriques de SERP feature coverage.\"\n      }\n    }\n  ]\n}\n\u003C/script>\n```\n\n**Sitelinks Search Box**, **Product Schema**, **Review Schema** : chaque donnée structurée augmente votre empreinte visuelle. Sur une SERP comprimée, un résultat qui occupe 120px au lieu de 60px capte davantage l'attention, même en position 3.\n\n### Optimiser pour l'AI Overview — pas contre\n\nL'AI Overview est votre concurrent et votre canal. Si Google vous cite dans l'AI Overview, vous gagnez en visibilité au pixel rank le plus élevé possible — avant même la position 1 organique.\n\nLes critères de citation dans l'AI Overview ne sont pas officiellement documentés, mais les analyses de corrélation montrent que :\n\n- Les contenus avec un balisage sémantique clair (headings hiérarchiques, listes, tableaux) sont davantage cités.\n- Les pages avec un E-E-A-T fort (auteur identifié, expertise démontrée, sources citées) sont privilégiées.\n- La fraîcheur du contenu est un facteur pour les requêtes informationnelles.\n\nLa [visibilité de marque face aux LLMs](/blog/reasoning-lift-what-happens-to-brand-visibility-when-ai-thinks-harder) est un sujet connexe : les mêmes signaux de confiance qui favorisent l'AI Overview favorisent la citation dans les réponses des modèles de raisonnement.\n\n### Diversifier les surfaces de découverte\n\nSi le premier résultat organique Google est à 850px, d'autres surfaces de découverte offrent un meilleur pixel rank natif :\n\n- **Google Discover** : pas de concurrence ads/AI Overview, le contenu est affiché en plein écran sur mobile.\n- **Google Images** : pour les requêtes visuelles (mobilier, mode, recettes), Images apparaît souvent dans les 300 premiers pixels de la SERP.\n- **YouTube** : les carrousels vidéo Google apparaissent fréquemment above-the-fold, surtout pour les requêtes how-to.\n\nLe point commun : ces surfaces ne sont pas indexables avec les mêmes signaux que les 10 liens bleus. Elles nécessitent des stratégies de contenu dédiées.\n\n## Monitoring technique : détecter la dégradation de visibilité SERP\n\nLe problème du SERP layout shift, c'est qu'il est invisible dans vos dashboards classiques. Votre position n'a pas changé. Votre indexation est intacte. Vos Core Web Vitals sont au vert. Et pourtant, votre trafic organique baisse.\n\n### Ce que Search Console ne montre pas\n\nSearch Console affiche les impressions et les clics, mais pas :\n\n- Le pixel rank de vos résultats\n- La présence d'un AI Overview sur vos requêtes\n- Le nombre de blocs SERP au-dessus de votre résultat\n- La taille visuelle de votre snippet vs. celle des concurrents\n\nPour combler ce gap, les équipes SEO avancées combinent plusieurs sources :\n\n**Screaming Frog** en mode SERP : Screaming Frog ne crawle pas les SERP nativement, mais ses exports peuvent être croisés avec les données de STAT ou Semrush Sensor pour mapper les SERP features par URL.\n\n**Chrome DevTools** pour l'audit visuel manuel : sur une requête stratégique, ouvrez la SERP en mode responsive (viewport 375×812 pour iPhone 14, 1440×900 pour desktop) et mesurez manuellement la position du premier résultat organique avec l'inspecteur d'éléments.\n\n**Automatisation via Playwright** pour le monitoring continu :\n\n```typescript\nimport { chromium } from 'playwright';\n\ninterface SerpFeature {\n  type: string;\n  heightPx: number;\n  topPx: number;\n}\n\nasync function auditSerpLayout(query: string): Promise\u003C{\n  features: SerpFeature[];\n  firstOrganicPx: number;\n  viewportHeight: number;\n}> {\n  const browser = await chromium.launch({ headless: true });\n  const context = await browser.newContext({\n    viewport: { width: 1440, height: 900 },\n    locale: 'fr-FR',\n    geolocation: { latitude: 48.8566, longitude: 2.3522 },\n  });\n  const page = await context.newPage();\n\n  await page.goto(\n    `https://www.google.com/search?q=${encodeURIComponent(query)}&gl=fr&hl=fr`,\n    { waitUntil: 'networkidle' }\n  );\n\n  // Attendre le chargement complet (AI Overview lazy-load)\n  await page.waitForTimeout(4000);\n\n  const layoutData = await page.evaluate(() => {\n    const features: SerpFeature[] = [];\n\n    // Détecter AI Overview\n    const aiOverview = document.querySelector('[data-attrid=\"wa:/description\"]')\n      || document.querySelector('.kp-wholepage');\n    if (aiOverview) {\n      const rect = aiOverview.getBoundingClientRect();\n      features.push({\n        type: 'AI_OVERVIEW',\n        heightPx: Math.round(rect.height),\n        topPx: Math.round(rect.top)\n      });\n    }\n\n    // Détecter ads\n    const adContainer = document.querySelector('#tads');\n    if (adContainer) {\n      const rect = adContainer.getBoundingClientRect();\n      features.push({\n        type: 'ADS_TOP',\n        heightPx: Math.round(rect.height),\n        topPx: Math.round(rect.top)\n      });\n    }\n\n    // Détecter People Also Ask\n    const paa = document.querySelector('[data-sgrd=\"paa\"]')\n      || document.querySelector('.related-question-pair')?.closest('div[data-initq]');\n    if (paa) {\n      const rect = paa.getBoundingClientRect();\n      features.push({\n        type: 'PEOPLE_ALSO_ASK',\n        heightPx: Math.round(rect.height),\n        topPx: Math.round(rect.top)\n      });\n    }\n\n    // Premier résultat organique\n    const firstOrganic = document.querySelector('#rso > div:first-child');\n    const firstOrganicPx = firstOrganic\n      ? Math.round(firstOrganic.getBoundingClientRect().top)\n      : -1;\n\n    return {\n      features,\n      firstOrganicPx,\n      viewportHeight: window.innerHeight\n    };\n  });\n\n  await browser.close();\n  return layoutData;\n}\n\n// Batch sur vos requêtes stratégiques\nconst queries = [\n  'meuble salon design',\n  'canapé cuir italien',\n  'table basse marbre',\n];\n\n(async () => {\n  for (const q of queries) {\n    const result = await auditSerpLayout(q);\n    const aboveFold = result.firstOrganicPx \u003C result.viewportHeight;\n    console.log(\n      `[${q}] First organic: ${result.firstOrganicPx}px | ` +\n      `Above fold: ${aboveFold} | ` +\n      `Features: ${result.features.map(f => f.type).join(', ')}`\n    );\n  }\n})();\n```\n\nCe type de monitoring automatisé vous donne une vision réelle de ce que l'utilisateur voit. En le combinant avec un outil de monitoring SEO comme Seogard qui détecte les régressions de meta, de SSR, ou de structure, vous couvrez à la fois la visibilité technique (votre site fonctionne-t-il correctement ?) et la visibilité SERP (votre résultat est-il réellement vu ?).\n\n## Implications pour le Core Update May 2026\n\nLe [core update de mai 2026](/blog/google-begins-rolling-out-may-2026-core-update-via-sejournal-mattgsouthern) arrive dans un contexte où la SERP est plus fragmentée que jamais. Les deux phénomènes se renforcent mutuellement :\n\n- Le core update réévalue la qualité et la pertinence des résultats organiques.\n- Le SERP layout shift réduit la visibilité de ces mêmes résultats, quelle que soit leur qualité.\n\nUn site qui gagne 3 positions grâce au core update mais se retrouve derrière un AI Overview élargi peut voir son trafic organique stagner ou baisser. C'est le paradoxe : vous montez dans le ranking, mais vous descendez en visibilité réelle.\n\n### Le piège de l'optimisation mono-canal\n\nLes équipes SEO qui ne trackent que la position organique passent à côté de la moitié du tableau. La stratégie gagnante combine :\n\n1. **Rank tracking** classique (position relative vs. concurrence)\n2. **SERP feature tracking** (présence dans AI Overview, Featured Snippet, PAA)\n3. **Pixel rank monitoring** (visibilité réelle au-dessus du fold)\n4. **CTR par position** (via Search Console, segmenté par type de requête)\n\nLe site qui se contente de tracker sa position 1 et de célébrer ne voit pas qu'il perd 30% de ses clics à cause d'un AI Overview qui n'existait pas il y a 6 mois.\n\n## Rendre votre marque visible dans un monde post-10-liens-bleus\n\nLa SERP de 2026 n'est plus une liste. C'est une interface composite où Google agrège des réponses, des publicités, des entités, des médias, et occasionnellement, des liens vers votre site. La position organique est un composant de cette interface, pas son centre.\n\nLes équipes qui performent adoptent une approche multi-surface :\n\n- **Schema markup exhaustif** pour maximiser l'empreinte visuelle du snippet (FAQ, How-to, Product, Review, Breadcrumb)\n- **Contenu structuré pour l'AI Overview** : réponses directes, factuelles, citables, avec des sources\n- **Présence sur les surfaces annexes** : Images, Vidéo, Discover, Maps (pour le local)\n- **Brand authority** : un nom de marque reconnu augmente le CTR même en position 3 — les utilisateurs scrollent pour cliquer sur une marque de confiance. Ce que [la lisibilité machine de votre marque](/blog/what-makes-a-brand-machine-readable-in-ai-search) rend possible dans les systèmes AI.\n\nLa position 1 organique n'est pas morte. Mais elle ne suffit plus. Le ranking est un input. La visibilité SERP — mesurée en pixels, en SERP features capturées, et en CTR réel — est l'output qui compte. Si votre dashboard ne mesure que l'input, vous pilotez à l'aveugle.\n\n```","https://seogard.io/blog/google-serp-layout-shift-position-1-now-appears-halfway-down-the-page-via-sejournal-lorenbaker","Actualités SEO","2026-05-30T06:02:49.607Z","2026-05-30","La position 1 organique recule à 800px+ du haut de page. Analyse technique du SERP layout shift Google et stratégies pour maintenir la visibilité réelle.","\u003Cp>Sur desktop, le premier résultat organique de Google apparaît en moyenne à plus de 800 pixels du haut de page. Sur mobile, c'est pire. Les études récentes mesurant la SERP en pixels — et non plus en positions — révèlent une réalité que le rank tracking classique masque entièrement : votre position 1 est invisible sans scroll.\u003C/p>\n\u003Ch2>La SERP mesurée en pixels : ce que les études révèlent\u003C/h2>\n\u003Cp>Le paradigme du rank tracking repose sur une hypothèse implicite : position 1 = premier élément vu par l'utilisateur. Cette hypothèse est morte depuis au moins 2023, mais l'industrie continue de tracker des positions comme si la SERP était une liste ordonnée linéaire.\u003C/p>\n\u003Cp>Les \u003Ca href=\"https://www.searchenginejournal.com/updated-serps-new-study-measures-the-serp-in-pixels-not-ranks-recap/577359/\">analyses menées par Search Engine Journal\u003C/a> et les données de STAT, Semrush Sensor, et Advanced Web Ranking convergent : pour les requêtes commerciales à forte intention, Google empile en moyenne 3 à 5 blocs de contenu propriétaire avant le premier lien organique.\u003C/p>\n\u003Ch3>Anatomie d'une SERP commerciale en 2026\u003C/h3>\n\u003Cp>Prenons une requête type \u003Ccode>meilleur CRM B2B\u003C/code>. Voici ce que Google affiche avant le premier résultat organique, mesuré en pixels sur un viewport 1440×900 :\u003C/p>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Bloc SERP\u003C/th>\n\u003Cth>Hauteur estimée (px)\u003C/th>\n\u003Cth>Cumulé\u003C/th>\n\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>Barre de recherche + navigation\u003C/td>\n\u003Ctd>~120\u003C/td>\n\u003Ctd>120\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>AI Overview (replié)\u003C/td>\n\u003Ctd>~180\u003C/td>\n\u003Ctd>300\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Sponsored (4 annonces)\u003C/td>\n\u003Ctd>~400\u003C/td>\n\u003Ctd>700\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>People Also Ask (3 questions)\u003C/td>\n\u003Ctd>~150\u003C/td>\n\u003Ctd>850\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Premier résultat organique\u003C/strong>\u003C/td>\n\u003Ctd>—\u003C/td>\n\u003Ctd>\u003Cstrong>~850px\u003C/strong>\u003C/td>\n\u003C/tr>\n\u003C/tbody>\n\u003C/table>\n\u003Cp>Sur un écran 900px de haut, le premier résultat organique est littéralement sous la ligne de flottaison. L'utilisateur doit scroller pour le voir.\u003C/p>\n\u003Ch3>Le calcul du \"pixel rank\" vs le rank classique\u003C/h3>\n\u003Cp>Le concept de \"pixel rank\" — la distance en pixels entre le haut du viewport et le premier pixel du résultat — est la seule métrique qui capture la visibilité réelle. Un site en position 1 avec un pixel rank de 900px a une visibilité réelle inférieure à un site en position 4 sur une requête sans ads et sans AI Overview (pixel rank ~300px).\u003C/p>\n\u003Cp>Vous pouvez mesurer cela vous-même avec un script Puppeteer :\u003C/p>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">const\u003C/span>\u003Cspan style=\"color:#79B8FF\"> puppeteer\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\">'puppeteer'\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\"> measurePixelRank\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#FFAB70\">query\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#FFAB70\">targetDomain\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\"> browser\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#F97583\"> await\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> puppeteer.\u003C/span>\u003Cspan style=\"color:#B392F0\">launch\u003C/span>\u003Cspan style=\"color:#E1E4E8\">({\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    headless: \u003C/span>\u003Cspan style=\"color:#79B8FF\">true\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    args: [\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'--window-size=1440,900'\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:#F97583\">  const\u003C/span>\u003Cspan style=\"color:#79B8FF\"> page\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#F97583\"> await\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> browser.\u003C/span>\u003Cspan style=\"color:#B392F0\">newPage\u003C/span>\u003Cspan style=\"color:#E1E4E8\">();\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">  await\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> page.\u003C/span>\u003Cspan style=\"color:#B392F0\">setViewport\u003C/span>\u003Cspan style=\"color:#E1E4E8\">({ width: \u003C/span>\u003Cspan style=\"color:#79B8FF\">1440\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, height: \u003C/span>\u003Cspan style=\"color:#79B8FF\">900\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> });\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  \u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">  // Simuler une recherche Google (respectez les ToS)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">  await\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> page.\u003C/span>\u003Cspan style=\"color:#B392F0\">goto\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    `https://www.google.com/search?q=${\u003C/span>\u003Cspan style=\"color:#B392F0\">encodeURIComponent\u003C/span>\u003Cspan style=\"color:#9ECBFF\">(\u003C/span>\u003Cspan style=\"color:#E1E4E8\">query\u003C/span>\u003Cspan style=\"color:#9ECBFF\">)\u003C/span>\u003Cspan style=\"color:#9ECBFF\">}&#x26;gl=fr&#x26;hl=fr`\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    { waitUntil: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'networkidle2'\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\">  // Attendre le rendu complet (AI Overview peut charger en async)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">  await\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> page.\u003C/span>\u003Cspan style=\"color:#B392F0\">waitForTimeout\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#79B8FF\">3000\u003C/span>\u003Cspan style=\"color:#E1E4E8\">);\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">  // Mesurer la position Y du premier résultat organique\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">  const\u003C/span>\u003Cspan style=\"color:#79B8FF\"> pixelData\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#F97583\"> await\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> page.\u003C/span>\u003Cspan style=\"color:#B392F0\">evaluate\u003C/span>\u003Cspan style=\"color:#E1E4E8\">((\u003C/span>\u003Cspan style=\"color:#FFAB70\">domain\u003C/span>\u003Cspan style=\"color:#E1E4E8\">) \u003C/span>\u003Cspan style=\"color:#F97583\">=>\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    const\u003C/span>\u003Cspan style=\"color:#79B8FF\"> results\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> document.\u003C/span>\u003Cspan style=\"color:#B392F0\">querySelectorAll\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'div[data-sokoban-container] a[href]'\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\"> allLinks\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> document.\u003C/span>\u003Cspan style=\"color:#B392F0\">querySelectorAll\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'#search a[href*=\"'\u003C/span>\u003Cspan style=\"color:#F97583\"> +\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> domain \u003C/span>\u003Cspan style=\"color:#F97583\">+\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> '\"]'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">);\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    \u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">    // Position du premier résultat organique (tous domaines)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    const\u003C/span>\u003Cspan style=\"color:#79B8FF\"> firstOrganic\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> document.\u003C/span>\u003Cspan style=\"color:#B392F0\">querySelector\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'#rso > div:first-child'\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\"> firstOrganicRect\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> firstOrganic\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">      ?\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> firstOrganic.\u003C/span>\u003Cspan style=\"color:#B392F0\">getBoundingClientRect\u003C/span>\u003Cspan style=\"color:#E1E4E8\">()\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">      :\u003C/span>\u003Cspan style=\"color:#79B8FF\"> null\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">    // Position du domaine cible\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    let\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> targetRect \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#79B8FF\"> null\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    for\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> (\u003C/span>\u003Cspan style=\"color:#F97583\">const\u003C/span>\u003Cspan style=\"color:#79B8FF\"> link\u003C/span>\u003Cspan style=\"color:#F97583\"> of\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> allLinks) {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">      const\u003C/span>\u003Cspan style=\"color:#79B8FF\"> container\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> link.\u003C/span>\u003Cspan style=\"color:#B392F0\">closest\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'.g'\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\"> (container) {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        targetRect \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> container.\u003C/span>\u003Cspan style=\"color:#B392F0\">getBoundingClientRect\u003C/span>\u003Cspan style=\"color:#E1E4E8\">();\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">        break\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      }\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    }\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    return\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      firstOrganicPixelY: firstOrganicRect \u003C/span>\u003Cspan style=\"color:#F97583\">?\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> Math.\u003C/span>\u003Cspan style=\"color:#B392F0\">round\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(firstOrganicRect.top) \u003C/span>\u003Cspan style=\"color:#F97583\">:\u003C/span>\u003Cspan style=\"color:#79B8FF\"> null\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      targetPixelY: targetRect \u003C/span>\u003Cspan style=\"color:#F97583\">?\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> Math.\u003C/span>\u003Cspan style=\"color:#B392F0\">round\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(targetRect.top) \u003C/span>\u003Cspan style=\"color:#F97583\">:\u003C/span>\u003Cspan style=\"color:#79B8FF\"> null\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      viewportHeight: window.innerHeight,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      isAboveFold: targetRect \u003C/span>\u003Cspan style=\"color:#F97583\">?\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> targetRect.top \u003C/span>\u003Cspan style=\"color:#F97583\">&#x3C;\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> window.innerHeight \u003C/span>\u003Cspan style=\"color:#F97583\">:\u003C/span>\u003Cspan style=\"color:#79B8FF\"> false\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    };\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  }, targetDomain);\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">  await\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> browser.\u003C/span>\u003Cspan style=\"color:#B392F0\">close\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\"> pixelData;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">}\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">// Usage\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">measurePixelRank\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'meilleur crm b2b'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'hubspot.com'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  .\u003C/span>\u003Cspan style=\"color:#B392F0\">then\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#FFAB70\">data\u003C/span>\u003Cspan style=\"color:#F97583\"> =>\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    console.\u003C/span>\u003Cspan style=\"color:#B392F0\">log\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">`Premier résultat organique: ${\u003C/span>\u003Cspan style=\"color:#E1E4E8\">data\u003C/span>\u003Cspan style=\"color:#9ECBFF\">.\u003C/span>\u003Cspan style=\"color:#E1E4E8\">firstOrganicPixelY\u003C/span>\u003Cspan style=\"color:#9ECBFF\">}px`\u003C/span>\u003Cspan style=\"color:#E1E4E8\">);\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    console.\u003C/span>\u003Cspan style=\"color:#B392F0\">log\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">`Domaine cible: ${\u003C/span>\u003Cspan style=\"color:#E1E4E8\">data\u003C/span>\u003Cspan style=\"color:#9ECBFF\">.\u003C/span>\u003Cspan style=\"color:#E1E4E8\">targetPixelY\u003C/span>\u003Cspan style=\"color:#9ECBFF\">}px`\u003C/span>\u003Cspan style=\"color:#E1E4E8\">);\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    console.\u003C/span>\u003Cspan style=\"color:#B392F0\">log\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">`Above the fold: ${\u003C/span>\u003Cspan style=\"color:#E1E4E8\">data\u003C/span>\u003Cspan style=\"color:#9ECBFF\">.\u003C/span>\u003Cspan style=\"color:#E1E4E8\">isAboveFold\u003C/span>\u003Cspan style=\"color:#9ECBFF\">}`\u003C/span>\u003Cspan style=\"color:#E1E4E8\">);\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    console.\u003C/span>\u003Cspan style=\"color:#B392F0\">log\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">`Viewport: ${\u003C/span>\u003Cspan style=\"color:#E1E4E8\">data\u003C/span>\u003Cspan style=\"color:#9ECBFF\">.\u003C/span>\u003Cspan style=\"color:#E1E4E8\">viewportHeight\u003C/span>\u003Cspan style=\"color:#9ECBFF\">}px`\u003C/span>\u003Cspan style=\"color:#E1E4E8\">);\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  });\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>Ce script est une base. En production, vous le paramétrerez pour boucler sur vos top 50 requêtes et exporter les données dans un sheet pour suivre l'évolution du pixel rank semaine après semaine. La donnée brute que Search Console ne fournit pas.\u003C/p>\n\u003Ch2>Pourquoi Google pousse le premier résultat organique vers le bas\u003C/h2>\n\u003Cp>Ce n'est pas un bug. C'est une stratégie de monétisation et de rétention parfaitement délibérée.\u003C/p>\n\u003Ch3>Le modèle économique de la rétention SERP\u003C/h3>\n\u003Cp>Google a trois objectifs simultanés sur chaque SERP :\u003C/p>\n\u003Col>\n\u003Cli>\n\u003Cp>\u003Cstrong>Maximiser les clics payants\u003C/strong> : chaque pixel above-the-fold occupé par une annonce augmente la probabilité de clic Ads. Google rapportait 237 milliards de dollars de revenus publicitaires en 2023 (source : \u003Ca href=\"https://abc.xyz/investor/\">Alphabet Q4 2023 Earnings\u003C/a>).\u003C/p>\n\u003C/li>\n\u003Cli>\n\u003Cp>\u003Cstrong>Répondre dans la SERP\u003C/strong> : les AI Overviews, les Featured Snippets, les Knowledge Panels réduisent le besoin de cliquer. Google ne cache pas cette intention — les \"zero-click searches\" représentent, selon les analyses de Rand Fishkin (SparkToro), une part croissante des requêtes.\u003C/p>\n\u003C/li>\n\u003Cli>\n\u003Cp>\u003Cstrong>Empêcher la commoditisation\u003C/strong> : si 10 liens bleus suffisaient, n'importe quel moteur pourrait concurrencer Google. Les blocs propriétaires créent un moat UX.\u003C/p>\n\u003C/li>\n\u003C/ol>\n\u003Ch3>L'impact de l'AI Overview sur le pixel rank\u003C/h3>\n\u003Cp>L'AI Overview est le facteur le plus destructeur pour la visibilité organique. Même replié (collapsed), il occupe 150-200px. Déplié, il peut atteindre 400-600px selon la complexité de la réponse. Sur mobile, un AI Overview déplié peut repousser le premier résultat organique à 2-3 écrans de scroll.\u003C/p>\n\u003Cp>La \u003Ca href=\"/blog/google-s-ai-search-guidance-is-naive-and-self-serving\">stratégie AI de Google pour la recherche\u003C/a> accentue cette tendance. Chaque itération de l'AI Overview augmente sa couverture de requêtes et sa taille visuelle.\u003C/p>\n\u003Cp>Ce qui est mesurable aujourd'hui : pour les requêtes informationnelles, l'AI Overview apparaît sur environ 40-60% des SERP (variable selon la verticale et la géolocalisation). Pour les requêtes transactionnelles, la combinaison ads + shopping + AI Overview crée un mur de 1000+ pixels avant le premier lien organique.\u003C/p>\n\u003Ch2>Le CTR organique en chute : les chiffres qui comptent\u003C/h2>\n\u003Cp>Le taux de clic de la position 1 organique a historiquement oscillé entre 25% et 35% selon les études (Backlinko, Advanced Web Ranking, Sistrix). Ces chiffres sont en déclin structurel.\u003C/p>\n\u003Ch3>Modélisation de l'impact pour un site e-commerce\u003C/h3>\n\u003Cp>Prenons un scénario concret : \u003Cstrong>MaisonDeco.fr\u003C/strong>, un e-commerce de mobilier avec 18 000 pages produit, positionné en top 3 sur 2 400 requêtes à intention commerciale.\u003C/p>\n\u003Cp>\u003Cstrong>Situation avant le SERP layout shift (2022)\u003C/strong> :\u003C/p>\n\u003Cul>\n\u003Cli>Position 1 moyenne → CTR estimé : 28%\u003C/li>\n\u003Cli>2 400 requêtes × volume moyen 320 recherches/mois × 28% CTR = ~215 000 clics organiques/mois\u003C/li>\n\u003Cli>Panier moyen : 180€, taux de conversion : 2.1%\u003C/li>\n\u003Cli>Revenu organique estimé : ~813 000€/mois\u003C/li>\n\u003C/ul>\n\u003Cp>\u003Cstrong>Situation après (2026)\u003C/strong> — même position, même volume :\u003C/p>\n\u003Cul>\n\u003Cli>Position 1 mais pixel rank moyen à 850px → CTR estimé : 18% (baisse de 36%)\u003C/li>\n\u003Cli>2 400 × 320 × 18% = ~138 000 clics/mois\u003C/li>\n\u003Cli>Même panier, même conversion\u003C/li>\n\u003Cli>Revenu organique estimé : ~522 000€/mois\u003C/li>\n\u003Cli>\u003Cstrong>Delta : -291 000€/mois, soit -3.5M€/an\u003C/strong>\u003C/li>\n\u003C/ul>\n\u003Cp>Ces chiffres ne sont pas fantaisistes. La baisse de CTR est documentée par les données de Search Console de dizaines de sites — les impressions restent stables (le ranking n'a pas bougé), mais les clics chutent.\u003C/p>\n\u003Ch3>Vérifier l'impact sur votre propre site\u003C/h3>\n\u003Cp>Dans Google Search Console, exportez vos données performance par requête sur 12 mois. Calculez le CTR moyen par position, et comparez les courbes Q1 2025 vs Q1 2026 :\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\"> pandas \u003C/span>\u003Cspan style=\"color:#F97583\">as\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> pd\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Export CSV depuis Search Console > Performance > Pages\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">df \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> pd.read_csv(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'search_console_export.csv'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Filtrer sur les requêtes avec position moyenne &#x3C;= 3\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">top3 \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> df[df[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'Position'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">] \u003C/span>\u003Cspan style=\"color:#F97583\">&#x3C;=\u003C/span>\u003Cspan style=\"color:#79B8FF\"> 3.0\u003C/span>\u003Cspan style=\"color:#E1E4E8\">].copy()\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Calculer le CTR moyen par trimestre\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">top3[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'Date'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">] \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> pd.to_datetime(top3[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'Date'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">])\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">top3[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'Quarter'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">] \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> top3[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'Date'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">].dt.to_period(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'Q'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">ctr_by_quarter \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> top3.groupby(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'Quarter'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">).agg(\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FFAB70\">    avg_ctr\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'CTR'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'mean'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">),\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FFAB70\">    total_clicks\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'Clicks'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'sum'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">),\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FFAB70\">    total_impressions\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'Impressions'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'sum'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">),\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FFAB70\">    avg_position\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'Position'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'mean'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">).reset_index()\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">print\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(ctr_by_quarter.to_string())\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Ce que vous cherchez :\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># - Position stable (avg_position ~ constant)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># - CTR en baisse (avg_ctr diminue trimestre après trimestre)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># = Confirmation du SERP layout shift\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>Si vous observez une position stable avec un CTR en baisse régulière, vous avez la preuve quantitative que le layout de la SERP, et non votre ranking, est responsable de la perte de trafic. C'est un signal critique, et c'est exactement le type de dégradation silencieuse qu'un monitoring continu permet de détecter avant qu'elle n'atteigne votre P&#x26;L.\u003C/p>\n\u003Ch2>Stratégies d'adaptation : au-delà du rank tracking\u003C/h2>\n\u003Cp>Le rank tracking reste utile comme signal relatif (vous vs. la concurrence), mais il ne suffit plus comme métrique de visibilité. Voici les leviers actionnables.\u003C/p>\n\u003Ch3>Capturer les SERP features, pas juste les positions\u003C/h3>\n\u003Cp>Les blocs que Google affiche au-dessus des résultats organiques sont aussi des emplacements que vous pouvez cibler :\u003C/p>\n\u003Cp>\u003Cstrong>Featured Snippet\u003C/strong> : structurer le contenu pour répondre directement à la query dans les 40-60 premiers mots d'un paragraphe, ou via une liste/tableau balisé. Le Featured Snippet apparaît au-dessus des résultats organiques classiques — pixel rank ~200px même avec des ads.\u003C/p>\n\u003Cp>\u003Cstrong>FAQ Schema\u003C/strong> : les résultats enrichis avec \u003Ccode>FAQPage\u003C/code> schema gagnent en hauteur visuelle dans la SERP, ce qui augmente le ratio pixels occupés / résultats affichés. Balisez vos pages stratégiques :\u003C/p>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">&#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">script\u003C/span>\u003Cspan style=\"color:#B392F0\"> type\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"application/ld+json\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">{\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  \"@context\": \"https://schema.org\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  \"@type\": \"FAQPage\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  \"mainEntity\": [\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      \"@type\": \"Question\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      \"name\": \"Quelle est la différence entre position organique et pixel rank ?\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      \"acceptedAnswer\": {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        \"@type\": \"Answer\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        \"text\": \"La position organique indique le classement relatif parmi les résultats organiques. Le pixel rank mesure la distance en pixels entre le haut du viewport et le résultat, incluant les ads, AI Overviews, et autres SERP features qui le précèdent.\"\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\">      \"@type\": \"Question\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      \"name\": \"Comment mesurer le pixel rank de mes pages ?\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      \"acceptedAnswer\": {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        \"@type\": \"Answer\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        \"text\": \"Utilisez Puppeteer ou Playwright pour automatiser des captures SERP et mesurer la coordonnée Y du premier pixel de votre résultat. Les outils comme STAT ou Semrush commencent à intégrer des métriques de SERP feature coverage.\"\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\">&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">script\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>\u003Cstrong>Sitelinks Search Box\u003C/strong>, \u003Cstrong>Product Schema\u003C/strong>, \u003Cstrong>Review Schema\u003C/strong> : chaque donnée structurée augmente votre empreinte visuelle. Sur une SERP comprimée, un résultat qui occupe 120px au lieu de 60px capte davantage l'attention, même en position 3.\u003C/p>\n\u003Ch3>Optimiser pour l'AI Overview — pas contre\u003C/h3>\n\u003Cp>L'AI Overview est votre concurrent et votre canal. Si Google vous cite dans l'AI Overview, vous gagnez en visibilité au pixel rank le plus élevé possible — avant même la position 1 organique.\u003C/p>\n\u003Cp>Les critères de citation dans l'AI Overview ne sont pas officiellement documentés, mais les analyses de corrélation montrent que :\u003C/p>\n\u003Cul>\n\u003Cli>Les contenus avec un balisage sémantique clair (headings hiérarchiques, listes, tableaux) sont davantage cités.\u003C/li>\n\u003Cli>Les pages avec un E-E-A-T fort (auteur identifié, expertise démontrée, sources citées) sont privilégiées.\u003C/li>\n\u003Cli>La fraîcheur du contenu est un facteur pour les requêtes informationnelles.\u003C/li>\n\u003C/ul>\n\u003Cp>La \u003Ca href=\"/blog/reasoning-lift-what-happens-to-brand-visibility-when-ai-thinks-harder\">visibilité de marque face aux LLMs\u003C/a> est un sujet connexe : les mêmes signaux de confiance qui favorisent l'AI Overview favorisent la citation dans les réponses des modèles de raisonnement.\u003C/p>\n\u003Ch3>Diversifier les surfaces de découverte\u003C/h3>\n\u003Cp>Si le premier résultat organique Google est à 850px, d'autres surfaces de découverte offrent un meilleur pixel rank natif :\u003C/p>\n\u003Cul>\n\u003Cli>\u003Cstrong>Google Discover\u003C/strong> : pas de concurrence ads/AI Overview, le contenu est affiché en plein écran sur mobile.\u003C/li>\n\u003Cli>\u003Cstrong>Google Images\u003C/strong> : pour les requêtes visuelles (mobilier, mode, recettes), Images apparaît souvent dans les 300 premiers pixels de la SERP.\u003C/li>\n\u003Cli>\u003Cstrong>YouTube\u003C/strong> : les carrousels vidéo Google apparaissent fréquemment above-the-fold, surtout pour les requêtes how-to.\u003C/li>\n\u003C/ul>\n\u003Cp>Le point commun : ces surfaces ne sont pas indexables avec les mêmes signaux que les 10 liens bleus. Elles nécessitent des stratégies de contenu dédiées.\u003C/p>\n\u003Ch2>Monitoring technique : détecter la dégradation de visibilité SERP\u003C/h2>\n\u003Cp>Le problème du SERP layout shift, c'est qu'il est invisible dans vos dashboards classiques. Votre position n'a pas changé. Votre indexation est intacte. Vos Core Web Vitals sont au vert. Et pourtant, votre trafic organique baisse.\u003C/p>\n\u003Ch3>Ce que Search Console ne montre pas\u003C/h3>\n\u003Cp>Search Console affiche les impressions et les clics, mais pas :\u003C/p>\n\u003Cul>\n\u003Cli>Le pixel rank de vos résultats\u003C/li>\n\u003Cli>La présence d'un AI Overview sur vos requêtes\u003C/li>\n\u003Cli>Le nombre de blocs SERP au-dessus de votre résultat\u003C/li>\n\u003Cli>La taille visuelle de votre snippet vs. celle des concurrents\u003C/li>\n\u003C/ul>\n\u003Cp>Pour combler ce gap, les équipes SEO avancées combinent plusieurs sources :\u003C/p>\n\u003Cp>\u003Cstrong>Screaming Frog\u003C/strong> en mode SERP : Screaming Frog ne crawle pas les SERP nativement, mais ses exports peuvent être croisés avec les données de STAT ou Semrush Sensor pour mapper les SERP features par URL.\u003C/p>\n\u003Cp>\u003Cstrong>Chrome DevTools\u003C/strong> pour l'audit visuel manuel : sur une requête stratégique, ouvrez la SERP en mode responsive (viewport 375×812 pour iPhone 14, 1440×900 pour desktop) et mesurez manuellement la position du premier résultat organique avec l'inspecteur d'éléments.\u003C/p>\n\u003Cp>\u003Cstrong>Automatisation via Playwright\u003C/strong> pour le monitoring continu :\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\"> { chromium } \u003C/span>\u003Cspan style=\"color:#F97583\">from\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> 'playwright'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">interface\u003C/span>\u003Cspan style=\"color:#B392F0\"> SerpFeature\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FFAB70\">  type\u003C/span>\u003Cspan style=\"color:#F97583\">:\u003C/span>\u003Cspan style=\"color:#79B8FF\"> string\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FFAB70\">  heightPx\u003C/span>\u003Cspan style=\"color:#F97583\">:\u003C/span>\u003Cspan style=\"color:#79B8FF\"> number\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FFAB70\">  topPx\u003C/span>\u003Cspan style=\"color:#F97583\">:\u003C/span>\u003Cspan style=\"color:#79B8FF\"> number\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\">async\u003C/span>\u003Cspan style=\"color:#F97583\"> function\u003C/span>\u003Cspan style=\"color:#B392F0\"> auditSerpLayout\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#FFAB70\">query\u003C/span>\u003Cspan style=\"color:#F97583\">:\u003C/span>\u003Cspan style=\"color:#79B8FF\"> string\u003C/span>\u003Cspan style=\"color:#E1E4E8\">)\u003C/span>\u003Cspan style=\"color:#F97583\">:\u003C/span>\u003Cspan style=\"color:#B392F0\"> Promise\u003C/span>\u003Cspan style=\"color:#E1E4E8\">&#x3C;{\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FFAB70\">  features\u003C/span>\u003Cspan style=\"color:#F97583\">:\u003C/span>\u003Cspan style=\"color:#B392F0\"> SerpFeature\u003C/span>\u003Cspan style=\"color:#E1E4E8\">[];\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FFAB70\">  firstOrganicPx\u003C/span>\u003Cspan style=\"color:#F97583\">:\u003C/span>\u003Cspan style=\"color:#79B8FF\"> number\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FFAB70\">  viewportHeight\u003C/span>\u003Cspan style=\"color:#F97583\">:\u003C/span>\u003Cspan style=\"color:#79B8FF\"> number\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:#F97583\">  const\u003C/span>\u003Cspan style=\"color:#79B8FF\"> browser\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#F97583\"> await\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> chromium.\u003C/span>\u003Cspan style=\"color:#B392F0\">launch\u003C/span>\u003Cspan style=\"color:#E1E4E8\">({ headless: \u003C/span>\u003Cspan style=\"color:#79B8FF\">true\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\"> context\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#F97583\"> await\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> browser.\u003C/span>\u003Cspan style=\"color:#B392F0\">newContext\u003C/span>\u003Cspan style=\"color:#E1E4E8\">({\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    viewport: { width: \u003C/span>\u003Cspan style=\"color:#79B8FF\">1440\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, height: \u003C/span>\u003Cspan style=\"color:#79B8FF\">900\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> },\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    locale: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'fr-FR'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    geolocation: { latitude: \u003C/span>\u003Cspan style=\"color:#79B8FF\">48.8566\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, longitude: \u003C/span>\u003Cspan style=\"color:#79B8FF\">2.3522\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:#F97583\">  const\u003C/span>\u003Cspan style=\"color:#79B8FF\"> page\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#F97583\"> await\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> context.\u003C/span>\u003Cspan style=\"color:#B392F0\">newPage\u003C/span>\u003Cspan style=\"color:#E1E4E8\">();\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">  await\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> page.\u003C/span>\u003Cspan style=\"color:#B392F0\">goto\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    `https://www.google.com/search?q=${\u003C/span>\u003Cspan style=\"color:#B392F0\">encodeURIComponent\u003C/span>\u003Cspan style=\"color:#9ECBFF\">(\u003C/span>\u003Cspan style=\"color:#E1E4E8\">query\u003C/span>\u003Cspan style=\"color:#9ECBFF\">)\u003C/span>\u003Cspan style=\"color:#9ECBFF\">}&#x26;gl=fr&#x26;hl=fr`\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    { waitUntil: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'networkidle'\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\">  // Attendre le chargement complet (AI Overview lazy-load)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">  await\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> page.\u003C/span>\u003Cspan style=\"color:#B392F0\">waitForTimeout\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#79B8FF\">4000\u003C/span>\u003Cspan style=\"color:#E1E4E8\">);\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">  const\u003C/span>\u003Cspan style=\"color:#79B8FF\"> layoutData\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#F97583\"> await\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> page.\u003C/span>\u003Cspan style=\"color:#B392F0\">evaluate\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(() \u003C/span>\u003Cspan style=\"color:#F97583\">=>\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    const\u003C/span>\u003Cspan style=\"color:#79B8FF\"> features\u003C/span>\u003Cspan style=\"color:#F97583\">:\u003C/span>\u003Cspan style=\"color:#B392F0\"> SerpFeature\u003C/span>\u003Cspan style=\"color:#E1E4E8\">[] \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> [];\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">    // Détecter AI Overview\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    const\u003C/span>\u003Cspan style=\"color:#79B8FF\"> aiOverview\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> document.\u003C/span>\u003Cspan style=\"color:#B392F0\">querySelector\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'[data-attrid=\"wa:/description\"]'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">      ||\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> document.\u003C/span>\u003Cspan style=\"color:#B392F0\">querySelector\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'.kp-wholepage'\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\"> (aiOverview) {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">      const\u003C/span>\u003Cspan style=\"color:#79B8FF\"> rect\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> aiOverview.\u003C/span>\u003Cspan style=\"color:#B392F0\">getBoundingClientRect\u003C/span>\u003Cspan style=\"color:#E1E4E8\">();\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      features.\u003C/span>\u003Cspan style=\"color:#B392F0\">push\u003C/span>\u003Cspan style=\"color:#E1E4E8\">({\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        type: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'AI_OVERVIEW'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        heightPx: Math.\u003C/span>\u003Cspan style=\"color:#B392F0\">round\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(rect.height),\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        topPx: Math.\u003C/span>\u003Cspan style=\"color:#B392F0\">round\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(rect.top)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      });\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    }\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">    // Détecter ads\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    const\u003C/span>\u003Cspan style=\"color:#79B8FF\"> adContainer\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> document.\u003C/span>\u003Cspan style=\"color:#B392F0\">querySelector\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'#tads'\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\"> (adContainer) {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">      const\u003C/span>\u003Cspan style=\"color:#79B8FF\"> rect\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> adContainer.\u003C/span>\u003Cspan style=\"color:#B392F0\">getBoundingClientRect\u003C/span>\u003Cspan style=\"color:#E1E4E8\">();\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      features.\u003C/span>\u003Cspan style=\"color:#B392F0\">push\u003C/span>\u003Cspan style=\"color:#E1E4E8\">({\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        type: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'ADS_TOP'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        heightPx: Math.\u003C/span>\u003Cspan style=\"color:#B392F0\">round\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(rect.height),\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        topPx: Math.\u003C/span>\u003Cspan style=\"color:#B392F0\">round\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(rect.top)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      });\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    }\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">    // Détecter People Also Ask\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    const\u003C/span>\u003Cspan style=\"color:#79B8FF\"> paa\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> document.\u003C/span>\u003Cspan style=\"color:#B392F0\">querySelector\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'[data-sgrd=\"paa\"]'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">      ||\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> document.\u003C/span>\u003Cspan style=\"color:#B392F0\">querySelector\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'.related-question-pair'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">)?.\u003C/span>\u003Cspan style=\"color:#B392F0\">closest\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'div[data-initq]'\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\"> (paa) {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">      const\u003C/span>\u003Cspan style=\"color:#79B8FF\"> rect\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> paa.\u003C/span>\u003Cspan style=\"color:#B392F0\">getBoundingClientRect\u003C/span>\u003Cspan style=\"color:#E1E4E8\">();\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      features.\u003C/span>\u003Cspan style=\"color:#B392F0\">push\u003C/span>\u003Cspan style=\"color:#E1E4E8\">({\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        type: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'PEOPLE_ALSO_ASK'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        heightPx: Math.\u003C/span>\u003Cspan style=\"color:#B392F0\">round\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(rect.height),\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        topPx: Math.\u003C/span>\u003Cspan style=\"color:#B392F0\">round\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(rect.top)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      });\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    }\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">    // Premier résultat organique\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    const\u003C/span>\u003Cspan style=\"color:#79B8FF\"> firstOrganic\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> document.\u003C/span>\u003Cspan style=\"color:#B392F0\">querySelector\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'#rso > div:first-child'\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\"> firstOrganicPx\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> firstOrganic\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">      ?\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> Math.\u003C/span>\u003Cspan style=\"color:#B392F0\">round\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(firstOrganic.\u003C/span>\u003Cspan style=\"color:#B392F0\">getBoundingClientRect\u003C/span>\u003Cspan style=\"color:#E1E4E8\">().top)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">      :\u003C/span>\u003Cspan style=\"color:#F97583\"> -\u003C/span>\u003Cspan style=\"color:#79B8FF\">1\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    return\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      features,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      firstOrganicPx,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      viewportHeight: window.innerHeight\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\">  await\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> browser.\u003C/span>\u003Cspan style=\"color:#B392F0\">close\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\"> layoutData;\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\">// Batch sur vos requêtes stratégiques\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">const\u003C/span>\u003Cspan style=\"color:#79B8FF\"> queries\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> [\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  'meuble salon design'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  'canapé cuir italien'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  'table basse marbre'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">];\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#F97583\">async\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> () \u003C/span>\u003Cspan style=\"color:#F97583\">=>\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">  for\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> (\u003C/span>\u003Cspan style=\"color:#F97583\">const\u003C/span>\u003Cspan style=\"color:#79B8FF\"> q\u003C/span>\u003Cspan style=\"color:#F97583\"> of\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> queries) {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    const\u003C/span>\u003Cspan style=\"color:#79B8FF\"> result\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#F97583\"> await\u003C/span>\u003Cspan style=\"color:#B392F0\"> auditSerpLayout\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(q);\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    const\u003C/span>\u003Cspan style=\"color:#79B8FF\"> aboveFold\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> result.firstOrganicPx \u003C/span>\u003Cspan style=\"color:#F97583\">&#x3C;\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> result.viewportHeight;\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>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">      `[${\u003C/span>\u003Cspan style=\"color:#E1E4E8\">q\u003C/span>\u003Cspan style=\"color:#9ECBFF\">}] First organic: ${\u003C/span>\u003Cspan style=\"color:#E1E4E8\">result\u003C/span>\u003Cspan style=\"color:#9ECBFF\">.\u003C/span>\u003Cspan style=\"color:#E1E4E8\">firstOrganicPx\u003C/span>\u003Cspan style=\"color:#9ECBFF\">}px | `\u003C/span>\u003Cspan style=\"color:#F97583\"> +\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">      `Above fold: ${\u003C/span>\u003Cspan style=\"color:#E1E4E8\">aboveFold\u003C/span>\u003Cspan style=\"color:#9ECBFF\">} | `\u003C/span>\u003Cspan style=\"color:#F97583\"> +\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">      `Features: ${\u003C/span>\u003Cspan style=\"color:#E1E4E8\">result\u003C/span>\u003Cspan style=\"color:#9ECBFF\">.\u003C/span>\u003Cspan style=\"color:#E1E4E8\">features\u003C/span>\u003Cspan style=\"color:#9ECBFF\">.\u003C/span>\u003Cspan style=\"color:#B392F0\">map\u003C/span>\u003Cspan style=\"color:#9ECBFF\">(\u003C/span>\u003Cspan style=\"color:#79B8FF\">f\u003C/span>\u003Cspan style=\"color:#F97583\"> =>\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> f\u003C/span>\u003Cspan style=\"color:#9ECBFF\">.\u003C/span>\u003Cspan style=\"color:#E1E4E8\">type\u003C/span>\u003Cspan style=\"color:#9ECBFF\">).\u003C/span>\u003Cspan style=\"color:#B392F0\">join\u003C/span>\u003Cspan style=\"color:#9ECBFF\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">', '\u003C/span>\u003Cspan style=\"color:#9ECBFF\">)\u003C/span>\u003Cspan style=\"color:#9ECBFF\">}`\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    );\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  }\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">})();\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>Ce type de monitoring automatisé vous donne une vision réelle de ce que l'utilisateur voit. En le combinant avec un outil de monitoring SEO comme Seogard qui détecte les régressions de meta, de SSR, ou de structure, vous couvrez à la fois la visibilité technique (votre site fonctionne-t-il correctement ?) et la visibilité SERP (votre résultat est-il réellement vu ?).\u003C/p>\n\u003Ch2>Implications pour le Core Update May 2026\u003C/h2>\n\u003Cp>Le \u003Ca href=\"/blog/google-begins-rolling-out-may-2026-core-update-via-sejournal-mattgsouthern\">core update de mai 2026\u003C/a> arrive dans un contexte où la SERP est plus fragmentée que jamais. Les deux phénomènes se renforcent mutuellement :\u003C/p>\n\u003Cul>\n\u003Cli>Le core update réévalue la qualité et la pertinence des résultats organiques.\u003C/li>\n\u003Cli>Le SERP layout shift réduit la visibilité de ces mêmes résultats, quelle que soit leur qualité.\u003C/li>\n\u003C/ul>\n\u003Cp>Un site qui gagne 3 positions grâce au core update mais se retrouve derrière un AI Overview élargi peut voir son trafic organique stagner ou baisser. C'est le paradoxe : vous montez dans le ranking, mais vous descendez en visibilité réelle.\u003C/p>\n\u003Ch3>Le piège de l'optimisation mono-canal\u003C/h3>\n\u003Cp>Les équipes SEO qui ne trackent que la position organique passent à côté de la moitié du tableau. La stratégie gagnante combine :\u003C/p>\n\u003Col>\n\u003Cli>\u003Cstrong>Rank tracking\u003C/strong> classique (position relative vs. concurrence)\u003C/li>\n\u003Cli>\u003Cstrong>SERP feature tracking\u003C/strong> (présence dans AI Overview, Featured Snippet, PAA)\u003C/li>\n\u003Cli>\u003Cstrong>Pixel rank monitoring\u003C/strong> (visibilité réelle au-dessus du fold)\u003C/li>\n\u003Cli>\u003Cstrong>CTR par position\u003C/strong> (via Search Console, segmenté par type de requête)\u003C/li>\n\u003C/ol>\n\u003Cp>Le site qui se contente de tracker sa position 1 et de célébrer ne voit pas qu'il perd 30% de ses clics à cause d'un AI Overview qui n'existait pas il y a 6 mois.\u003C/p>\n\u003Ch2>Rendre votre marque visible dans un monde post-10-liens-bleus\u003C/h2>\n\u003Cp>La SERP de 2026 n'est plus une liste. C'est une interface composite où Google agrège des réponses, des publicités, des entités, des médias, et occasionnellement, des liens vers votre site. La position organique est un composant de cette interface, pas son centre.\u003C/p>\n\u003Cp>Les équipes qui performent adoptent une approche multi-surface :\u003C/p>\n\u003Cul>\n\u003Cli>\u003Cstrong>Schema markup exhaustif\u003C/strong> pour maximiser l'empreinte visuelle du snippet (FAQ, How-to, Product, Review, Breadcrumb)\u003C/li>\n\u003Cli>\u003Cstrong>Contenu structuré pour l'AI Overview\u003C/strong> : réponses directes, factuelles, citables, avec des sources\u003C/li>\n\u003Cli>\u003Cstrong>Présence sur les surfaces annexes\u003C/strong> : Images, Vidéo, Discover, Maps (pour le local)\u003C/li>\n\u003Cli>\u003Cstrong>Brand authority\u003C/strong> : un nom de marque reconnu augmente le CTR même en position 3 — les utilisateurs scrollent pour cliquer sur une marque de confiance. Ce que \u003Ca href=\"/blog/what-makes-a-brand-machine-readable-in-ai-search\">la lisibilité machine de votre marque\u003C/a> rend possible dans les systèmes AI.\u003C/li>\n\u003C/ul>\n\u003Cp>La position 1 organique n'est pas morte. Mais elle ne suffit plus. Le ranking est un input. La visibilité SERP — mesurée en pixels, en SERP features capturées, et en CTR réel — est l'output qui compte. Si votre dashboard ne mesure que l'input, vous pilotez à l'aveugle.\u003C/p>\n\u003Cpre>\u003Ccode>\u003C/code>\u003C/pre>",null,12,[18,19,20,21,22,23,24],"google","serp","layout","shift","position","visibilité","above-the-fold","SERP Layout Shift : pourquoi la position 1 ne vaut plus rien","Sat May 30 2026 06:02:49 GMT+0000 (Coordinated Universal Time)",[28,43,58],{"_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":41,"updatedAt":42},"6a18674aaa6b273b0c1406eb","5-places-to-find-faq-content-that-improves-ai-visibility","https://seogard.io/blog/5-places-to-find-faq-content-that-improves-ai-visibility","2026-05-28T16:03:22.185Z","2026-05-28","GSC, Reddit, People Also Ask, insights clients et prompts IA : 5 méthodes concrètes pour trouver le FAQ content qui améliore votre visibilité dans les réponses IA.",[36,37,38,39,40],"FAQ content","AI visibility","People Also Ask","Google Search Console","AEO","5 sources de FAQ content qui boostent votre visibilité IA","Thu May 28 2026 16:03:22 GMT+0000 (Coordinated Universal Time)",{"_id":44,"slug":45,"__v":6,"author":7,"canonical":46,"category":10,"createdAt":47,"date":48,"description":49,"image":15,"imageAlt":15,"readingTime":16,"tags":50,"title":56,"updatedAt":57},"6a168914aa6b273b0c89481b","sundar-pichai-google-search-ai-agents-and-tools-will-become-one","https://seogard.io/blog/sundar-pichai-google-search-ai-agents-and-tools-will-become-one","2026-05-27T06:03:00.506Z","2026-05-27","Google Search devient un système d'exécution de tâches par agents IA. Analyse technique des impacts sur le crawl, le trafic organique et l'architecture des sites.",[51,52,53,54,55],"google search","ai agents","sundar pichai","seo technique","agentic search","Pichai fusionne Search, agents IA et outils : impact SEO technique","Wed May 27 2026 06:03:00 GMT+0000 (Coordinated Universal Time)",{"_id":59,"slug":60,"__v":6,"author":7,"canonical":61,"category":10,"createdAt":62,"date":63,"description":64,"image":15,"imageAlt":15,"readingTime":16,"tags":65,"title":71,"updatedAt":72},"6a13e60baa6b273b0c5c113f","all-you-need-to-know-about-cloudflare-s-agent-readiness-score-via-sejournal-slobodanmanic","https://seogard.io/blog/all-you-need-to-know-about-cloudflare-s-agent-readiness-score-via-sejournal-slobodanmanic","2026-05-25T06:02:51.630Z","2026-05-25","Analyse technique du score Agent Readiness de Cloudflare. Quels checks comptent selon votre type de site, et comment améliorer ce qui a un impact réel.",[66,67,68,69,70],"cloudflare","agent readiness","AI agents","crawl","SEO technique","Cloudflare Agent Readiness Score : ce que le chiffre signifie vraiment","Mon May 25 2026 06:02:51 GMT+0000 (Coordinated Universal Time)"]