[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$foiTwds8ILrXxqgBxTOnKN1w321iGBgwtTH_Oklvypbo":3,"$ftIE8H2q5k1XXEuPDJAx4O4A6WM-DvUWqkIX_iPbV4AI":25},{"_id":4,"slug":5,"__v":6,"author":7,"body":8,"canonical":9,"category":10,"createdAt":11,"date":12,"description":13,"htmlContent":14,"image":15,"imageAlt":15,"readingTime":16,"tags":17,"title":23,"updatedAt":24},"6a1c5bbfaa6b273b0c57e754","google-s-i-o-demos-reveal-the-new-business-visibility-problem-via-sejournal-mattgsouthern",0,"Equipe Seogard","Les démos de Google I/O 2026 ne montrent plus des résultats de recherche. Elles montrent des transactions finalisées. Un utilisateur demande à l'agent AI de réserver un vol, un restaurant, un plombier — et l'agent exécute. Le site web du prestataire n'apparaît à aucun moment dans la démonstration. C'est le nouveau problème de visibilité business que Matt Southern a documenté pour Search Engine Journal : le consumer path fonctionne, mais le business n'a aucune idée de pourquoi il a été choisi — ni même s'il était dans la liste.\n\n## L'architecture des démos I/O : ce que Google a montré (et caché)\n\nChaque démo majeure de Google I/O 2026 suivait le même schéma. L'utilisateur formule une intention complexe en langage naturel. L'agent AI (Project Astra, Gemini, ou une variante) décompose l'intention en sous-tâches. Il interroge des sources structurées (Google Business Profile, APIs partenaires, données de réservation). Il propose une option — parfois une seule — et exécute l'action.\n\nLe détail qui change tout : aucune de ces démos ne montrait de SERP classique. Pas de liste de 10 liens bleus. Pas d'AI Overview avec des citations cliquables. L'agent agit comme un intermédiaire opaque entre la demande et la transaction.\n\n### Ce que ça signifie pour le modèle mental SEO\n\nLe SEO classique repose sur un modèle où la visibilité = présence dans les résultats de recherche. Vous optimisez pour apparaître, l'utilisateur clique, vous convertissez sur votre site. Dans le modèle démontré à I/O, la visibilité devient : être sélectionné par l'agent comme fournisseur de la transaction, sans que l'utilisateur ne visite jamais votre propriété web.\n\nCe n'est pas une spéculation. C'est ce que [Sundar Pichai a confirmé sur scène](/blog/sundar-pichai-google-search-ai-agents-and-tools-will-become-one) : search, agents et tools convergent vers une interface unique. Le site web devient un fournisseur de données structurées pour l'agent, pas une destination pour l'utilisateur.\n\n### La boîte noire de la sélection\n\nLe problème business fondamental : comment l'agent choisit-il quel restaurant recommander, quel hôtel réserver, quel prestataire contacter ? Google n'a fourni aucune documentation sur les critères de ranking de l'agent. Contrairement au Search organique où des années de reverse engineering ont permis de comprendre les facteurs de classement, le mécanisme de sélection agentique est entièrement opaque.\n\nCe qu'on peut déduire de l'architecture visible : l'agent s'appuie sur des données structurées (Google Business Profile, schema.org, APIs commerciales), sur des signaux de confiance (avis, certification, historique de transaction), et probablement sur des accords commerciaux (partenariats API comme ceux avec OpenTable ou Booking déjà en place).\n\n## Les données structurées ne suffisent plus : il faut être machine-readable à tous les niveaux\n\nLa réponse instinctive de la communauté SEO face à ce type de changement est : « ajoutez plus de schema.org ». C'est nécessaire mais insuffisant. Le problème révélé par les démos I/O est plus profond : votre business doit être compréhensible par une machine à chaque couche de son identité numérique.\n\n### Schema.org : le minimum requis, pas le différenciateur\n\nVotre markup structured data doit être irréprochable. Pas parce que ça garantit la sélection par l'agent, mais parce que son absence vous disqualifie. Voici un exemple concret pour un service local — le type de business directement ciblé par les démos I/O :\n\n```html\n\u003Cscript type=\"application/ld+json\">\n{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"LocalBusiness\",\n  \"@id\": \"https://www.plomberie-martin-lyon.fr/#business\",\n  \"name\": \"Plomberie Martin Lyon\",\n  \"description\": \"Dépannage plomberie urgence et rénovation sanitaire à Lyon et agglomération. Intervention sous 2h, devis gratuit.\",\n  \"url\": \"https://www.plomberie-martin-lyon.fr\",\n  \"telephone\": \"+33472123456\",\n  \"email\": \"contact@plomberie-martin-lyon.fr\",\n  \"address\": {\n    \"@type\": \"PostalAddress\",\n    \"streetAddress\": \"45 rue de la République\",\n    \"addressLocality\": \"Lyon\",\n    \"postalCode\": \"69002\",\n    \"addressRegion\": \"Auvergne-Rhône-Alpes\",\n    \"addressCountry\": \"FR\"\n  },\n  \"geo\": {\n    \"@type\": \"GeoCoordinates\",\n    \"latitude\": 45.7578,\n    \"longitude\": 4.8320\n  },\n  \"openingHoursSpecification\": [\n    {\n      \"@type\": \"OpeningHoursSpecification\",\n      \"dayOfWeek\": [\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\"],\n      \"opens\": \"07:00\",\n      \"closes\": \"20:00\"\n    },\n    {\n      \"@type\": \"OpeningHoursSpecification\",\n      \"dayOfWeek\": \"Saturday\",\n      \"opens\": \"08:00\",\n      \"closes\": \"17:00\"\n    }\n  ],\n  \"aggregateRating\": {\n    \"@type\": \"AggregateRating\",\n    \"ratingValue\": \"4.7\",\n    \"reviewCount\": \"234\"\n  },\n  \"hasOfferCatalog\": {\n    \"@type\": \"OfferCatalog\",\n    \"name\": \"Services de plomberie\",\n    \"itemListElement\": [\n      {\n        \"@type\": \"Offer\",\n        \"itemOffered\": {\n          \"@type\": \"Service\",\n          \"name\": \"Dépannage urgence plomberie\",\n          \"description\": \"Intervention en moins de 2h pour fuites, canalisations bouchées, chauffe-eau en panne\"\n        },\n        \"priceSpecification\": {\n          \"@type\": \"PriceSpecification\",\n          \"price\": \"89\",\n          \"priceCurrency\": \"EUR\",\n          \"description\": \"Forfait déplacement + diagnostic\"\n        }\n      }\n    ]\n  },\n  \"sameAs\": [\n    \"https://www.google.com/maps/place/?q=place_id:ChIJ...\",\n    \"https://www.pagesjaunes.fr/pros/plomberie-martin-lyon\"\n  ]\n}\n\u003C/script>\n```\n\nLes points critiques dans ce markup : `hasOfferCatalog` avec des prix explicites (l'agent a besoin de comparer), `openingHoursSpecification` détaillé (l'agent filtre par disponibilité), et `sameAs` qui établit le lien entre vos propriétés numériques. Sans ces éléments, un agent qui cherche « plombier disponible maintenant à Lyon, pas trop cher » n'a aucune donnée pour vous évaluer.\n\nPour approfondir la question de la lisibilité machine de votre marque, l'article sur [ce qui rend une marque machine-readable en AI search](/blog/what-makes-a-brand-machine-readable-in-ai-search) détaille les couches supplémentaires au-delà du schema.org.\n\n### Google Business Profile : votre API de facto pour l'agent\n\nLes démos I/O montraient des résultats provenant de sources structurées, et Google Business Profile (GBP) est la source structurée la plus directe pour les business locaux. Le problème : la majorité des GBP sont remplis au minimum — nom, adresse, téléphone — sans les attributs riches que l'agent pourrait exploiter.\n\nVérifiez systématiquement dans la Search Console et dans le GBP Manager :\n- Les catégories secondaires (un plombier qui fait aussi de la climatisation doit le déclarer)\n- Les attributs de service (devis gratuit, intervention d'urgence, paiement en ligne)\n- Les produits/services avec prix\n- Les Q&A pré-remplis (les agents AI consomment cette donnée)\n- Les posts Google réguliers (signal de fraîcheur et d'activité)\n\n## Scénario concret : un réseau de 120 agences immobilières face au shift agentique\n\nPrenons un cas réaliste. Un réseau immobilier français gère 120 agences physiques, un site central de 18 000 pages (annonces + pages agences + contenu éditorial), et 120 fiches Google Business Profile.\n\n### L'état actuel\n\nLe site génère 340 000 sessions organiques/mois. Les fiches GBP génèrent environ 45 000 actions/mois (appels, itinéraires, visites site). Le trafic organique représente 60% des leads qualifiés.\n\n### Le scénario I/O appliqué\n\nUn utilisateur dit à Gemini : « Je cherche un appartement 3 pièces à Bordeaux, budget 250K, proche transports, avec un agent qui parle anglais ». L'agent doit :\n\n1. Filtrer les annonces par critères (localisation, prix, surface)\n2. Matcher avec une agence locale\n3. Identifier les compétences spécifiques de l'agent (langue)\n4. Proposer une prise de rendez-vous\n\nSi le site du réseau sert ses annonces en client-side rendering React sans structured data complète, l'agent ne peut pas parser les critères. Si les fiches GBP des 120 agences ne mentionnent pas les langues parlées, l'agent ne peut pas filtrer. Si aucune API de prise de rendez-vous n'est exposée, l'agent ne peut pas finaliser la transaction.\n\n### Le plan d'action technique\n\nPremière étape : auditer la couverture structured data sur les 18 000 pages. Un crawl Screaming Frog avec extraction custom des JSON-LD révèle la réalité :\n\n```bash\n# Crawl ciblé avec extraction structured data\nscreaming-frog-cli --headless \\\n  --url \"https://www.reseau-immo-exemple.fr\" \\\n  --max-uri 20000 \\\n  --extract-json-ld \\\n  --export-tabs \"Internal:All,Structured Data:All\" \\\n  --output-folder ./audit-sd/ \\\n  --config custom-extraction.seospider\n\n# Extraction custom dans Screaming Frog : \n# Regex pour détecter les pages annonces sans schema RealEstateListing\n# XPath: //script[@type='application/ld+json'][not(contains(.,'RealEstateListing'))]\n```\n\nRésultat typique sur ce type de site : 30 à 40% des pages annonces ont du structured data Product (hérité d'un template e-commerce) au lieu de `RealEstateListing`. Les pages agences ont du `LocalBusiness` mais sans `makesOffer`, sans `areaServed`, sans `knowsLanguage`.\n\nDeuxième étape : enrichir les fiches GBP via l'API Google Business Profile. Un script automatisé peut mettre à jour les 120 fiches en une passe :\n\n```typescript\nimport { google } from 'googleapis';\n\ninterface AgencyData {\n  locationId: string;\n  languages: string[];\n  services: string[];\n  attributes: { name: string; values: string[] }[];\n}\n\nasync function updateGBPAttributes(agencies: AgencyData[]) {\n  const mybusiness = google.mybusinessbusinessinformation('v1');\n  \n  for (const agency of agencies) {\n    try {\n      // Mise à jour des attributs structurés\n      await mybusiness.locations.patch({\n        name: `locations/${agency.locationId}`,\n        updateMask: 'attributes,serviceItems',\n        requestBody: {\n          attributes: agency.attributes.map(attr => ({\n            name: attr.name,\n            values: attr.values,\n          })),\n          serviceItems: agency.services.map(service => ({\n            structuredServiceItem: {\n              serviceTypeId: service,\n            },\n          })),\n        },\n      });\n\n      console.log(`Updated: ${agency.locationId}`);\n    } catch (error) {\n      // Log pour audit — chaque fiche non mise à jour \n      // est une agence invisible pour l'agent\n      console.error(`Failed: ${agency.locationId}`, error.message);\n    }\n  }\n}\n\n// Données enrichies par agence\nconst agencies: AgencyData[] = [\n  {\n    locationId: 'abc123',\n    languages: ['fr', 'en', 'es'],\n    services: ['residential_sales', 'property_management', 'rental'],\n    attributes: [\n      { name: 'has_wheelchair_accessible_entrance', values: ['true'] },\n      { name: 'requires_appointments', values: ['false'] },\n    ],\n  },\n  // ... 119 autres agences\n];\n\nupdateGBPAttributes(agencies);\n```\n\nTroisième étape : exposer une capacité transactionnelle. Google a démontré à I/O que les agents finalisent des transactions. Si votre business ne propose aucun endpoint transactionnel, l'agent passera au concurrent qui en a un. Pour un réseau immobilier, ça signifie au minimum une prise de rendez-vous via un calendrier structuré (Cal.com, Calendly avec API, ou solution custom) dont l'URL est référencée dans le schema.org :\n\n```html\n\u003Cscript type=\"application/ld+json\">\n{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"RealEstateAgent\",\n  \"name\": \"Agence Bordeaux Centre\",\n  \"potentialAction\": {\n    \"@type\": \"ReserveAction\",\n    \"target\": {\n      \"@type\": \"EntryPoint\",\n      \"urlTemplate\": \"https://www.reseau-immo-exemple.fr/agences/bordeaux-centre/rdv?date={date}&service={service}\",\n      \"actionPlatform\": [\n        \"http://schema.org/DesktopWebPlatform\",\n        \"http://schema.org/MobileWebPlatform\"\n      ]\n    },\n    \"result\": {\n      \"@type\": \"Reservation\",\n      \"name\": \"Rendez-vous estimation immobilière\"\n    }\n  },\n  \"knowsLanguage\": [\"fr\", \"en\"],\n  \"areaServed\": {\n    \"@type\": \"City\",\n    \"name\": \"Bordeaux\",\n    \"sameAs\": \"https://www.wikidata.org/wiki/Q1479\"\n  }\n}\n\u003C/script>\n```\n\nL'utilisation de `potentialAction` avec `ReserveAction` est documentée par Google comme un signal exploitable par les agents. Le `urlTemplate` avec des variables permet à l'agent de construire dynamiquement l'URL de réservation.\n\n## Le paradoxe de l'attribution : vous convertissez sans le savoir\n\nLes démos I/O révèlent un problème business fondamental : l'attribution disparaît. Quand un agent AI réserve un restaurant pour un utilisateur, le restaurateur voit une réservation arriver — mais d'où ? Le referrer HTTP sera probablement `google.com` ou une variante, indifférenciable d'un clic Search classique. Ou pire, la transaction passera par une API partenaire sans aucun referrer lié au site du restaurateur.\n\n### Ce que vous pouvez mesurer aujourd'hui\n\nSearch Console reste votre meilleure source pour détecter les signaux précoces de ce shift. Surveillez spécifiquement :\n\n- **Impressions stables ou en hausse, clics en baisse** : signe que votre contenu est consommé par l'AI sans générer de visite. Les [AI Overviews modifient déjà la position effective de vos résultats](/blog/google-serp-layout-shift-position-1-now-appears-halfway-down-the-page-via-sejournal-lorenbaker).\n- **Requêtes conversationnelles en croissance** dans le rapport de performances : « meilleur plombier urgence Lyon samedi » au lieu de « plombier Lyon ».\n- **Trafic direct en hausse inexpliquée** : quand l'agent fournit votre numéro de téléphone ou votre adresse sans clic, l'utilisateur arrive en « direct » si jamais il visite votre site ensuite.\n\nLa difficulté, c'est que ces signaux sont faibles et ambigus pris individuellement. C'est leur combinaison sur plusieurs semaines qui révèle la tendance. Un monitoring automatisé avec un outil comme Seogard, qui détecte les variations d'impressions et de comportement de crawl, permet de capter ces dérives avant qu'elles n'impactent le business.\n\n## Le SSR comme prérequis de lisibilité agentique\n\nUn point technique absent des analyses business de ce sujet : les agents AI de Google crawlent et parsent votre site différemment d'un navigateur humain. Et probablement différemment de Googlebot classique.\n\nSi vos pages critiques (fiches produit, pages service, pages agences) dépendent de JavaScript client-side pour afficher le contenu et le structured data, vous êtes vulnérable. Le rendering JavaScript par Googlebot est documenté comme fonctionnel mais retardé. Pour un agent qui a besoin d'une réponse en temps réel, le délai est inacceptable.\n\n### Le test que vous devriez faire maintenant\n\nVérifiez ce que vos pages critiques exposent sans JavaScript :\n\n```bash\n# Récupérer le HTML brut (sans exécution JS) \n# de vos pages transactionnelles\ncurl -s -A \"Mozilla/5.0 (compatible; Googlebot/2.1)\" \\\n  \"https://www.votre-site.fr/services/depannage-urgence\" \\\n  | grep -c \"application/ld+json\"\n\n# Si le résultat est 0, votre structured data est injecté côté client\n# L'agent AI ne le verra probablement pas en temps réel\n\n# Vérifier aussi le contenu textuel visible\ncurl -s -A \"Mozilla/5.0 (compatible; Googlebot/2.1)\" \\\n  \"https://www.votre-site.fr/services/depannage-urgence\" \\\n  | python3 -c \"\nimport sys\nfrom html.parser import HTMLParser\n\nclass TextExtractor(HTMLParser):\n    def __init__(self):\n        super().__init__()\n        self.text = []\n        self.skip = False\n    def handle_starttag(self, tag, attrs):\n        if tag in ('script', 'style', 'noscript'):\n            self.skip = True\n    def handle_endtag(self, tag):\n        if tag in ('script', 'style', 'noscript'):\n            self.skip = False\n    def handle_data(self, data):\n        if not self.skip and data.strip():\n            self.text.append(data.strip())\n\np = TextExtractor()\np.feed(sys.stdin.read())\ncontent = ' '.join(p.text)\nprint(f'Content length: {len(content)} chars')\nprint(f'First 500 chars: {content[:500]}')\n\"\n```\n\nSi le contenu visible sans JS est vide ou squelettique, vous avez un problème critique. Les articles sur les migrations SSR — notamment les risques avec [Next.js App Router et les metadata ignorées sur les pages client](/blog/migration-next-js-pages-router-vers-app-router-les-metadata-ignorees-sur-les-pages-client) ou [Angular SSR mal configuré](/blog/migration-angular-17-vers-ssr-provideserverrendering-mal-configure-et-hydration-mismatch-invisible) — documentent en détail les pièges techniques.\n\n## Préparer l'ère agentique : au-delà du SEO classique\n\nLe shift démontré à Google I/O n'est pas un ajustement marginal. C'est un changement de paradigme comparable au passage du desktop au mobile. Les business qui s'adapteront en premier capteront un avantage disproportionné, comme ceux qui ont adopté le responsive design avant le mobile-first indexing.\n\n### Quatre actions concrètes, par ordre de priorité\n\n**1. Audit de lisibilité machine complète.** Pas seulement le schema.org, mais l'ensemble de votre empreinte numérique : GBP, APIs exposées, contenu SSR, cohérence des données entre sources. Screaming Frog pour le crawl technique, l'outil de test des résultats enrichis de Google pour la validation schema, et un diff automatisé entre vos données GBP et votre site pour détecter les incohérences (adresses différentes, horaires contradictoires, services manquants).\n\n**2. Adoption des types schema.org transactionnels.** `ReserveAction`, `OrderAction`, `BuyAction` — ces types existent dans la spec depuis des années mais sont largement sous-utilisés. Google les a explicitement mentionnés dans la documentation [Structured Data pour les actions](https://developers.google.com/search/docs/appearance/structured-data/action) et les démos I/O montrent qu'ils deviennent fonctionnels, pas juste déclaratifs.\n\n**3. Stratégie de contenu pour les requêtes agentiques.** Les agents décomposent les requêtes complexes en sous-requêtes factuelles. « Meilleur restaurant italien à Marseille pour un anniversaire, budget 50€/personne, terrasse, accessible PMR » devient cinq filtres distincts. Votre contenu et vos données structurées doivent répondre à chaque filtre individuellement. L'article sur les [tendances AEO pour 2026](/blog/the-new-rules-of-search-key-aeo-content-marketing-trends-for-2026-via-sejournal-hethr-campbell) approfondit cette stratégie de contenu.\n\n**4. Monitoring des signaux de transition.** Le passage d'un modèle SERP à un modèle agentique ne se fera pas en un jour. Il se fait progressivement, requête par requête, vertical par vertical. [Le core update de mai 2026](/blog/google-begins-rolling-out-may-2026-core-update-via-sejournal-mattgsouthern) coïncide avec les annonces I/O — ce n'est pas un hasard. Surveillez vos impressions Search Console par catégorie de requête, votre taux de clic par position (un CTR qui chute en position 1-3 signale une interception agentique), et le comportement de crawl sur vos pages transactionnelles.\n\n### Le trade-off à anticiper\n\nCe shift vers l'agentique comporte un risque structurel : la dépendance accrue envers Google comme intermédiaire. Aujourd'hui, même si Google domine le search, l'utilisateur arrive sur votre site et vous contrôlez l'expérience. Dans le modèle agentique, Google contrôle aussi la transaction. Le restaurateur qui reçoit une réservation via l'agent Google n'a pas capté l'email du client, n'a pas présenté sa carte de fidélité, n'a pas eu l'opportunité de faire de l'upsell.\n\nC'est un arbitrage : accepter de jouer dans l'écosystème agentique pour ne pas disparaître, tout en maintenant des canaux directs (email, app, fidélité) pour les clients existants. La [guidance de Google sur l'AI search, qualifiée de naïve par certains](/blog/google-s-ai-search-guidance-is-naive-and-self-serving), ne mentionne évidemment pas ce trade-off.\n\n## Ce que les Googlers ont dit off-stage\n\nLes démos sur scène sont calibrées pour impressionner. Ce qui se dit dans les sessions techniques et les couloirs est souvent plus révélateur. Comme documenté dans [les échanges avec les Googlers hors scène à I/O 2026](/blog/velocity-what-the-googlers-not-on-stage-said-at-i-o-2026), plusieurs ingénieurs ont confirmé que le Merchant Center et Google Business Profile deviennent les « sources de vérité » pour les agents. Le site web reste un signal, mais un signal parmi d'autres — pas le signal principal.\n\nCette hiérarchie est cohérente avec l'architecture technique : un agent qui doit répondre en temps réel ne peut pas crawler, renderer et parser un site web à chaque requête. Il s'appuie sur des données pré-indexées, structurées, et accessibles via API. Si vos données business les plus critiques (prix, disponibilité, localisation, services) ne sont pas dans ces sources structurées, elles n'existent pas pour l'agent.\n\nLe [Cloudflare Agent Readiness Score](/blog/all-you-need-to-know-about-cloudflare-s-agent-readiness-score-via-sejournal-slobodanmanic) est un indicateur émergent de cette tendance : l'infrastructure elle-même commence à se noter sur sa capacité à servir des agents AI, pas seulement des navigateurs.\n\n## L'enjeu réel derrière les démos\n\nLes démos Google I/O 2026 ne montrent pas un futur hypothétique. Elles montrent un présent en déploiement progressif. Le problème de visibilité business qu'elles révèlent est technique avant d'être stratégique : si votre empreinte numérique n'est pas structurée, cohérente et transactionnelle à chaque couche, vous serez invisible pour le prochain canal d'acquisition dominant. Un outil de monitoring comme Seogard qui vérifie en continu la cohérence de vos structured data, la disponibilité de votre SSR et la stabilité de vos signaux techniques est le filet de sécurité minimal dans cette transition. Le SEO ne meurt pas — il mute en ingénierie de la lisibilité machine.","https://seogard.io/blog/google-s-i-o-demos-reveal-the-new-business-visibility-problem-via-sejournal-mattgsouthern","Actualités SEO","2026-05-31T16:03:11.265Z","2026-05-31","Les démos Google I/O finalisent des transactions sans jamais montrer de site. Analyse technique du nouveau problème de visibilité business et comment s'y préparer.","\u003Cp>Les démos de Google I/O 2026 ne montrent plus des résultats de recherche. Elles montrent des transactions finalisées. Un utilisateur demande à l'agent AI de réserver un vol, un restaurant, un plombier — et l'agent exécute. Le site web du prestataire n'apparaît à aucun moment dans la démonstration. C'est le nouveau problème de visibilité business que Matt Southern a documenté pour Search Engine Journal : le consumer path fonctionne, mais le business n'a aucune idée de pourquoi il a été choisi — ni même s'il était dans la liste.\u003C/p>\n\u003Ch2>L'architecture des démos I/O : ce que Google a montré (et caché)\u003C/h2>\n\u003Cp>Chaque démo majeure de Google I/O 2026 suivait le même schéma. L'utilisateur formule une intention complexe en langage naturel. L'agent AI (Project Astra, Gemini, ou une variante) décompose l'intention en sous-tâches. Il interroge des sources structurées (Google Business Profile, APIs partenaires, données de réservation). Il propose une option — parfois une seule — et exécute l'action.\u003C/p>\n\u003Cp>Le détail qui change tout : aucune de ces démos ne montrait de SERP classique. Pas de liste de 10 liens bleus. Pas d'AI Overview avec des citations cliquables. L'agent agit comme un intermédiaire opaque entre la demande et la transaction.\u003C/p>\n\u003Ch3>Ce que ça signifie pour le modèle mental SEO\u003C/h3>\n\u003Cp>Le SEO classique repose sur un modèle où la visibilité = présence dans les résultats de recherche. Vous optimisez pour apparaître, l'utilisateur clique, vous convertissez sur votre site. Dans le modèle démontré à I/O, la visibilité devient : être sélectionné par l'agent comme fournisseur de la transaction, sans que l'utilisateur ne visite jamais votre propriété web.\u003C/p>\n\u003Cp>Ce n'est pas une spéculation. C'est ce que \u003Ca href=\"/blog/sundar-pichai-google-search-ai-agents-and-tools-will-become-one\">Sundar Pichai a confirmé sur scène\u003C/a> : search, agents et tools convergent vers une interface unique. Le site web devient un fournisseur de données structurées pour l'agent, pas une destination pour l'utilisateur.\u003C/p>\n\u003Ch3>La boîte noire de la sélection\u003C/h3>\n\u003Cp>Le problème business fondamental : comment l'agent choisit-il quel restaurant recommander, quel hôtel réserver, quel prestataire contacter ? Google n'a fourni aucune documentation sur les critères de ranking de l'agent. Contrairement au Search organique où des années de reverse engineering ont permis de comprendre les facteurs de classement, le mécanisme de sélection agentique est entièrement opaque.\u003C/p>\n\u003Cp>Ce qu'on peut déduire de l'architecture visible : l'agent s'appuie sur des données structurées (Google Business Profile, schema.org, APIs commerciales), sur des signaux de confiance (avis, certification, historique de transaction), et probablement sur des accords commerciaux (partenariats API comme ceux avec OpenTable ou Booking déjà en place).\u003C/p>\n\u003Ch2>Les données structurées ne suffisent plus : il faut être machine-readable à tous les niveaux\u003C/h2>\n\u003Cp>La réponse instinctive de la communauté SEO face à ce type de changement est : « ajoutez plus de schema.org ». C'est nécessaire mais insuffisant. Le problème révélé par les démos I/O est plus profond : votre business doit être compréhensible par une machine à chaque couche de son identité numérique.\u003C/p>\n\u003Ch3>Schema.org : le minimum requis, pas le différenciateur\u003C/h3>\n\u003Cp>Votre markup structured data doit être irréprochable. Pas parce que ça garantit la sélection par l'agent, mais parce que son absence vous disqualifie. Voici un exemple concret pour un service local — le type de business directement ciblé par les démos I/O :\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\": \"LocalBusiness\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  \"@id\": \"https://www.plomberie-martin-lyon.fr/#business\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  \"name\": \"Plomberie Martin Lyon\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  \"description\": \"Dépannage plomberie urgence et rénovation sanitaire à Lyon et agglomération. Intervention sous 2h, devis gratuit.\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  \"url\": \"https://www.plomberie-martin-lyon.fr\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  \"telephone\": \"+33472123456\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  \"email\": \"contact@plomberie-martin-lyon.fr\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  \"address\": {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    \"@type\": \"PostalAddress\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    \"streetAddress\": \"45 rue de la République\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    \"addressLocality\": \"Lyon\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    \"postalCode\": \"69002\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    \"addressRegion\": \"Auvergne-Rhône-Alpes\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    \"addressCountry\": \"FR\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  },\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  \"geo\": {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    \"@type\": \"GeoCoordinates\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    \"latitude\": 45.7578,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    \"longitude\": 4.8320\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  },\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  \"openingHoursSpecification\": [\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\": \"OpeningHoursSpecification\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      \"dayOfWeek\": [\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\"],\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      \"opens\": \"07:00\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      \"closes\": \"20:00\"\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\": \"OpeningHoursSpecification\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      \"dayOfWeek\": \"Saturday\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      \"opens\": \"08:00\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      \"closes\": \"17:00\"\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\">  \"aggregateRating\": {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    \"@type\": \"AggregateRating\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    \"ratingValue\": \"4.7\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    \"reviewCount\": \"234\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  },\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  \"hasOfferCatalog\": {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    \"@type\": \"OfferCatalog\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    \"name\": \"Services de plomberie\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    \"itemListElement\": [\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\": \"Offer\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        \"itemOffered\": {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">          \"@type\": \"Service\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">          \"name\": \"Dépannage urgence plomberie\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">          \"description\": \"Intervention en moins de 2h pour fuites, canalisations bouchées, chauffe-eau en panne\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        },\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        \"priceSpecification\": {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">          \"@type\": \"PriceSpecification\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">          \"price\": \"89\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">          \"priceCurrency\": \"EUR\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">          \"description\": \"Forfait déplacement + diagnostic\"\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\">  \"sameAs\": [\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    \"https://www.google.com/maps/place/?q=place_id:ChIJ...\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    \"https://www.pagesjaunes.fr/pros/plomberie-martin-lyon\"\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>Les points critiques dans ce markup : \u003Ccode>hasOfferCatalog\u003C/code> avec des prix explicites (l'agent a besoin de comparer), \u003Ccode>openingHoursSpecification\u003C/code> détaillé (l'agent filtre par disponibilité), et \u003Ccode>sameAs\u003C/code> qui établit le lien entre vos propriétés numériques. Sans ces éléments, un agent qui cherche « plombier disponible maintenant à Lyon, pas trop cher » n'a aucune donnée pour vous évaluer.\u003C/p>\n\u003Cp>Pour approfondir la question de la lisibilité machine de votre marque, l'article sur \u003Ca href=\"/blog/what-makes-a-brand-machine-readable-in-ai-search\">ce qui rend une marque machine-readable en AI search\u003C/a> détaille les couches supplémentaires au-delà du schema.org.\u003C/p>\n\u003Ch3>Google Business Profile : votre API de facto pour l'agent\u003C/h3>\n\u003Cp>Les démos I/O montraient des résultats provenant de sources structurées, et Google Business Profile (GBP) est la source structurée la plus directe pour les business locaux. Le problème : la majorité des GBP sont remplis au minimum — nom, adresse, téléphone — sans les attributs riches que l'agent pourrait exploiter.\u003C/p>\n\u003Cp>Vérifiez systématiquement dans la Search Console et dans le GBP Manager :\u003C/p>\n\u003Cul>\n\u003Cli>Les catégories secondaires (un plombier qui fait aussi de la climatisation doit le déclarer)\u003C/li>\n\u003Cli>Les attributs de service (devis gratuit, intervention d'urgence, paiement en ligne)\u003C/li>\n\u003Cli>Les produits/services avec prix\u003C/li>\n\u003Cli>Les Q&#x26;A pré-remplis (les agents AI consomment cette donnée)\u003C/li>\n\u003Cli>Les posts Google réguliers (signal de fraîcheur et d'activité)\u003C/li>\n\u003C/ul>\n\u003Ch2>Scénario concret : un réseau de 120 agences immobilières face au shift agentique\u003C/h2>\n\u003Cp>Prenons un cas réaliste. Un réseau immobilier français gère 120 agences physiques, un site central de 18 000 pages (annonces + pages agences + contenu éditorial), et 120 fiches Google Business Profile.\u003C/p>\n\u003Ch3>L'état actuel\u003C/h3>\n\u003Cp>Le site génère 340 000 sessions organiques/mois. Les fiches GBP génèrent environ 45 000 actions/mois (appels, itinéraires, visites site). Le trafic organique représente 60% des leads qualifiés.\u003C/p>\n\u003Ch3>Le scénario I/O appliqué\u003C/h3>\n\u003Cp>Un utilisateur dit à Gemini : « Je cherche un appartement 3 pièces à Bordeaux, budget 250K, proche transports, avec un agent qui parle anglais ». L'agent doit :\u003C/p>\n\u003Col>\n\u003Cli>Filtrer les annonces par critères (localisation, prix, surface)\u003C/li>\n\u003Cli>Matcher avec une agence locale\u003C/li>\n\u003Cli>Identifier les compétences spécifiques de l'agent (langue)\u003C/li>\n\u003Cli>Proposer une prise de rendez-vous\u003C/li>\n\u003C/ol>\n\u003Cp>Si le site du réseau sert ses annonces en client-side rendering React sans structured data complète, l'agent ne peut pas parser les critères. Si les fiches GBP des 120 agences ne mentionnent pas les langues parlées, l'agent ne peut pas filtrer. Si aucune API de prise de rendez-vous n'est exposée, l'agent ne peut pas finaliser la transaction.\u003C/p>\n\u003Ch3>Le plan d'action technique\u003C/h3>\n\u003Cp>Première étape : auditer la couverture structured data sur les 18 000 pages. Un crawl Screaming Frog avec extraction custom des JSON-LD révèle la réalité :\u003C/p>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Crawl ciblé avec extraction structured data\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">screaming-frog-cli\u003C/span>\u003Cspan style=\"color:#79B8FF\"> --headless\u003C/span>\u003Cspan style=\"color:#79B8FF\"> \\\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">  --url\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"https://www.reseau-immo-exemple.fr\"\u003C/span>\u003Cspan style=\"color:#79B8FF\"> \\\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">  --max-uri\u003C/span>\u003Cspan style=\"color:#79B8FF\"> 20000\u003C/span>\u003Cspan style=\"color:#79B8FF\"> \\\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">  --extract-json-ld\u003C/span>\u003Cspan style=\"color:#79B8FF\"> \\\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">  --export-tabs\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"Internal:All,Structured Data:All\"\u003C/span>\u003Cspan style=\"color:#79B8FF\"> \\\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">  --output-folder\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> ./audit-sd/\u003C/span>\u003Cspan style=\"color:#79B8FF\"> \\\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">  --config\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> custom-extraction.seospider\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Extraction custom dans Screaming Frog : \u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Regex pour détecter les pages annonces sans schema RealEstateListing\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># XPath: //script[@type='application/ld+json'][not(contains(.,'RealEstateListing'))]\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>Résultat typique sur ce type de site : 30 à 40% des pages annonces ont du structured data Product (hérité d'un template e-commerce) au lieu de \u003Ccode>RealEstateListing\u003C/code>. Les pages agences ont du \u003Ccode>LocalBusiness\u003C/code> mais sans \u003Ccode>makesOffer\u003C/code>, sans \u003Ccode>areaServed\u003C/code>, sans \u003Ccode>knowsLanguage\u003C/code>.\u003C/p>\n\u003Cp>Deuxième étape : enrichir les fiches GBP via l'API Google Business Profile. Un script automatisé peut mettre à jour les 120 fiches en une passe :\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\"> { google } \u003C/span>\u003Cspan style=\"color:#F97583\">from\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> 'googleapis'\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\"> AgencyData\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FFAB70\">  locationId\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\">  languages\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\">  services\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\">  attributes\u003C/span>\u003Cspan style=\"color:#F97583\">:\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> { \u003C/span>\u003Cspan style=\"color:#FFAB70\">name\u003C/span>\u003Cspan style=\"color:#F97583\">:\u003C/span>\u003Cspan style=\"color:#79B8FF\"> string\u003C/span>\u003Cspan style=\"color:#E1E4E8\">; \u003C/span>\u003Cspan style=\"color:#FFAB70\">values\u003C/span>\u003Cspan style=\"color:#F97583\">:\u003C/span>\u003Cspan style=\"color:#79B8FF\"> string\u003C/span>\u003Cspan style=\"color:#E1E4E8\">[] }[];\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">}\u003C/span>\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\"> updateGBPAttributes\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#FFAB70\">agencies\u003C/span>\u003Cspan style=\"color:#F97583\">:\u003C/span>\u003Cspan style=\"color:#B392F0\"> AgencyData\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\"> mybusiness\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> google.\u003C/span>\u003Cspan style=\"color:#B392F0\">mybusinessbusinessinformation\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'v1'\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\">  for\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> (\u003C/span>\u003Cspan style=\"color:#F97583\">const\u003C/span>\u003Cspan style=\"color:#79B8FF\"> agency\u003C/span>\u003Cspan style=\"color:#F97583\"> of\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> agencies) {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    try\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">      // Mise à jour des attributs structurés\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">      await\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> mybusiness.locations.\u003C/span>\u003Cspan style=\"color:#B392F0\">patch\u003C/span>\u003Cspan style=\"color:#E1E4E8\">({\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        name: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">`locations/${\u003C/span>\u003Cspan style=\"color:#E1E4E8\">agency\u003C/span>\u003Cspan style=\"color:#9ECBFF\">.\u003C/span>\u003Cspan style=\"color:#E1E4E8\">locationId\u003C/span>\u003Cspan style=\"color:#9ECBFF\">}`\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        updateMask: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'attributes,serviceItems'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        requestBody: {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">          attributes: agency.attributes.\u003C/span>\u003Cspan style=\"color:#B392F0\">map\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#FFAB70\">attr\u003C/span>\u003Cspan style=\"color:#F97583\"> =>\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> ({\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">            name: attr.name,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">            values: attr.values,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">          })),\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">          serviceItems: agency.services.\u003C/span>\u003Cspan style=\"color:#B392F0\">map\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#FFAB70\">service\u003C/span>\u003Cspan style=\"color:#F97583\"> =>\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> ({\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">            structuredServiceItem: {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">              serviceTypeId: service,\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:#E1E4E8\">      console.\u003C/span>\u003Cspan style=\"color:#B392F0\">log\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">`Updated: ${\u003C/span>\u003Cspan style=\"color:#E1E4E8\">agency\u003C/span>\u003Cspan style=\"color:#9ECBFF\">.\u003C/span>\u003Cspan style=\"color:#E1E4E8\">locationId\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>\u003Cspan style=\"color:#F97583\">catch\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> (error) {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">      // Log pour audit — chaque fiche non mise à jour \u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">      // est une agence invisible pour l'agent\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      console.\u003C/span>\u003Cspan style=\"color:#B392F0\">error\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">`Failed: ${\u003C/span>\u003Cspan style=\"color:#E1E4E8\">agency\u003C/span>\u003Cspan style=\"color:#9ECBFF\">.\u003C/span>\u003Cspan style=\"color:#E1E4E8\">locationId\u003C/span>\u003Cspan style=\"color:#9ECBFF\">}`\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, error.message);\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:#6A737D\">// Données enrichies par agence\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">const\u003C/span>\u003Cspan style=\"color:#79B8FF\"> agencies\u003C/span>\u003Cspan style=\"color:#F97583\">:\u003C/span>\u003Cspan style=\"color:#B392F0\"> AgencyData\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:#E1E4E8\">  {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    locationId: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'abc123'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    languages: [\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'fr'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'en'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'es'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">],\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    services: [\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'residential_sales'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'property_management'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'rental'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">],\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    attributes: [\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      { name: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'has_wheelchair_accessible_entrance'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, values: [\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'true'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">] },\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      { name: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'requires_appointments'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, values: [\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'false'\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:#6A737D\">  // ... 119 autres agences\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\">updateGBPAttributes\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(agencies);\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>Troisième étape : exposer une capacité transactionnelle. Google a démontré à I/O que les agents finalisent des transactions. Si votre business ne propose aucun endpoint transactionnel, l'agent passera au concurrent qui en a un. Pour un réseau immobilier, ça signifie au minimum une prise de rendez-vous via un calendrier structuré (Cal.com, Calendly avec API, ou solution custom) dont l'URL est référencée dans le schema.org :\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\": \"RealEstateAgent\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  \"name\": \"Agence Bordeaux Centre\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  \"potentialAction\": {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    \"@type\": \"ReserveAction\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    \"target\": {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      \"@type\": \"EntryPoint\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      \"urlTemplate\": \"https://www.reseau-immo-exemple.fr/agences/bordeaux-centre/rdv?date={date}&#x26;service={service}\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      \"actionPlatform\": [\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        \"http://schema.org/DesktopWebPlatform\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        \"http://schema.org/MobileWebPlatform\"\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\">    \"result\": {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      \"@type\": \"Reservation\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      \"name\": \"Rendez-vous estimation immobilière\"\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\">  \"knowsLanguage\": [\"fr\", \"en\"],\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  \"areaServed\": {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    \"@type\": \"City\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    \"name\": \"Bordeaux\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    \"sameAs\": \"https://www.wikidata.org/wiki/Q1479\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  }\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">}\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">script\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>L'utilisation de \u003Ccode>potentialAction\u003C/code> avec \u003Ccode>ReserveAction\u003C/code> est documentée par Google comme un signal exploitable par les agents. Le \u003Ccode>urlTemplate\u003C/code> avec des variables permet à l'agent de construire dynamiquement l'URL de réservation.\u003C/p>\n\u003Ch2>Le paradoxe de l'attribution : vous convertissez sans le savoir\u003C/h2>\n\u003Cp>Les démos I/O révèlent un problème business fondamental : l'attribution disparaît. Quand un agent AI réserve un restaurant pour un utilisateur, le restaurateur voit une réservation arriver — mais d'où ? Le referrer HTTP sera probablement \u003Ccode>google.com\u003C/code> ou une variante, indifférenciable d'un clic Search classique. Ou pire, la transaction passera par une API partenaire sans aucun referrer lié au site du restaurateur.\u003C/p>\n\u003Ch3>Ce que vous pouvez mesurer aujourd'hui\u003C/h3>\n\u003Cp>Search Console reste votre meilleure source pour détecter les signaux précoces de ce shift. Surveillez spécifiquement :\u003C/p>\n\u003Cul>\n\u003Cli>\u003Cstrong>Impressions stables ou en hausse, clics en baisse\u003C/strong> : signe que votre contenu est consommé par l'AI sans générer de visite. Les \u003Ca href=\"/blog/google-serp-layout-shift-position-1-now-appears-halfway-down-the-page-via-sejournal-lorenbaker\">AI Overviews modifient déjà la position effective de vos résultats\u003C/a>.\u003C/li>\n\u003Cli>\u003Cstrong>Requêtes conversationnelles en croissance\u003C/strong> dans le rapport de performances : « meilleur plombier urgence Lyon samedi » au lieu de « plombier Lyon ».\u003C/li>\n\u003Cli>\u003Cstrong>Trafic direct en hausse inexpliquée\u003C/strong> : quand l'agent fournit votre numéro de téléphone ou votre adresse sans clic, l'utilisateur arrive en « direct » si jamais il visite votre site ensuite.\u003C/li>\n\u003C/ul>\n\u003Cp>La difficulté, c'est que ces signaux sont faibles et ambigus pris individuellement. C'est leur combinaison sur plusieurs semaines qui révèle la tendance. Un monitoring automatisé avec un outil comme Seogard, qui détecte les variations d'impressions et de comportement de crawl, permet de capter ces dérives avant qu'elles n'impactent le business.\u003C/p>\n\u003Ch2>Le SSR comme prérequis de lisibilité agentique\u003C/h2>\n\u003Cp>Un point technique absent des analyses business de ce sujet : les agents AI de Google crawlent et parsent votre site différemment d'un navigateur humain. Et probablement différemment de Googlebot classique.\u003C/p>\n\u003Cp>Si vos pages critiques (fiches produit, pages service, pages agences) dépendent de JavaScript client-side pour afficher le contenu et le structured data, vous êtes vulnérable. Le rendering JavaScript par Googlebot est documenté comme fonctionnel mais retardé. Pour un agent qui a besoin d'une réponse en temps réel, le délai est inacceptable.\u003C/p>\n\u003Ch3>Le test que vous devriez faire maintenant\u003C/h3>\n\u003Cp>Vérifiez ce que vos pages critiques exposent sans JavaScript :\u003C/p>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Récupérer le HTML brut (sans exécution JS) \u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># de vos pages transactionnelles\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">curl\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -s\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -A\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"Mozilla/5.0 (compatible; Googlebot/2.1)\"\u003C/span>\u003Cspan style=\"color:#79B8FF\"> \\\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  \"https://www.votre-site.fr/services/depannage-urgence\"\u003C/span>\u003Cspan style=\"color:#79B8FF\"> \\\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">  |\u003C/span>\u003Cspan style=\"color:#B392F0\"> grep\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -c\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"application/ld+json\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Si le résultat est 0, votre structured data est injecté côté client\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># L'agent AI ne le verra probablement pas en temps réel\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Vérifier aussi le contenu textuel visible\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">curl\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -s\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -A\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"Mozilla/5.0 (compatible; Googlebot/2.1)\"\u003C/span>\u003Cspan style=\"color:#79B8FF\"> \\\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  \"https://www.votre-site.fr/services/depannage-urgence\"\u003C/span>\u003Cspan style=\"color:#79B8FF\"> \\\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">  |\u003C/span>\u003Cspan style=\"color:#B392F0\"> python3\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -c\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">import sys\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">from html.parser import HTMLParser\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">class TextExtractor(HTMLParser):\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    def __init__(self):\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">        super().__init__()\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">        self.text = []\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">        self.skip = False\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    def handle_starttag(self, tag, attrs):\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">        if tag in ('script', 'style', 'noscript'):\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">            self.skip = True\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    def handle_endtag(self, tag):\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">        if tag in ('script', 'style', 'noscript'):\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">            self.skip = False\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    def handle_data(self, data):\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">        if not self.skip and data.strip():\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">            self.text.append(data.strip())\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">p = TextExtractor()\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">p.feed(sys.stdin.read())\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">content = ' '.join(p.text)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">print(f'Content length: {len(content)} chars')\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">print(f'First 500 chars: {content[:500]}')\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">\"\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>Si le contenu visible sans JS est vide ou squelettique, vous avez un problème critique. Les articles sur les migrations SSR — notamment les risques avec \u003Ca href=\"/blog/migration-next-js-pages-router-vers-app-router-les-metadata-ignorees-sur-les-pages-client\">Next.js App Router et les metadata ignorées sur les pages client\u003C/a> ou \u003Ca href=\"/blog/migration-angular-17-vers-ssr-provideserverrendering-mal-configure-et-hydration-mismatch-invisible\">Angular SSR mal configuré\u003C/a> — documentent en détail les pièges techniques.\u003C/p>\n\u003Ch2>Préparer l'ère agentique : au-delà du SEO classique\u003C/h2>\n\u003Cp>Le shift démontré à Google I/O n'est pas un ajustement marginal. C'est un changement de paradigme comparable au passage du desktop au mobile. Les business qui s'adapteront en premier capteront un avantage disproportionné, comme ceux qui ont adopté le responsive design avant le mobile-first indexing.\u003C/p>\n\u003Ch3>Quatre actions concrètes, par ordre de priorité\u003C/h3>\n\u003Cp>\u003Cstrong>1. Audit de lisibilité machine complète.\u003C/strong> Pas seulement le schema.org, mais l'ensemble de votre empreinte numérique : GBP, APIs exposées, contenu SSR, cohérence des données entre sources. Screaming Frog pour le crawl technique, l'outil de test des résultats enrichis de Google pour la validation schema, et un diff automatisé entre vos données GBP et votre site pour détecter les incohérences (adresses différentes, horaires contradictoires, services manquants).\u003C/p>\n\u003Cp>\u003Cstrong>2. Adoption des types schema.org transactionnels.\u003C/strong> \u003Ccode>ReserveAction\u003C/code>, \u003Ccode>OrderAction\u003C/code>, \u003Ccode>BuyAction\u003C/code> — ces types existent dans la spec depuis des années mais sont largement sous-utilisés. Google les a explicitement mentionnés dans la documentation \u003Ca href=\"https://developers.google.com/search/docs/appearance/structured-data/action\">Structured Data pour les actions\u003C/a> et les démos I/O montrent qu'ils deviennent fonctionnels, pas juste déclaratifs.\u003C/p>\n\u003Cp>\u003Cstrong>3. Stratégie de contenu pour les requêtes agentiques.\u003C/strong> Les agents décomposent les requêtes complexes en sous-requêtes factuelles. « Meilleur restaurant italien à Marseille pour un anniversaire, budget 50€/personne, terrasse, accessible PMR » devient cinq filtres distincts. Votre contenu et vos données structurées doivent répondre à chaque filtre individuellement. L'article sur les \u003Ca href=\"/blog/the-new-rules-of-search-key-aeo-content-marketing-trends-for-2026-via-sejournal-hethr-campbell\">tendances AEO pour 2026\u003C/a> approfondit cette stratégie de contenu.\u003C/p>\n\u003Cp>\u003Cstrong>4. Monitoring des signaux de transition.\u003C/strong> Le passage d'un modèle SERP à un modèle agentique ne se fera pas en un jour. Il se fait progressivement, requête par requête, vertical par vertical. \u003Ca href=\"/blog/google-begins-rolling-out-may-2026-core-update-via-sejournal-mattgsouthern\">Le core update de mai 2026\u003C/a> coïncide avec les annonces I/O — ce n'est pas un hasard. Surveillez vos impressions Search Console par catégorie de requête, votre taux de clic par position (un CTR qui chute en position 1-3 signale une interception agentique), et le comportement de crawl sur vos pages transactionnelles.\u003C/p>\n\u003Ch3>Le trade-off à anticiper\u003C/h3>\n\u003Cp>Ce shift vers l'agentique comporte un risque structurel : la dépendance accrue envers Google comme intermédiaire. Aujourd'hui, même si Google domine le search, l'utilisateur arrive sur votre site et vous contrôlez l'expérience. Dans le modèle agentique, Google contrôle aussi la transaction. Le restaurateur qui reçoit une réservation via l'agent Google n'a pas capté l'email du client, n'a pas présenté sa carte de fidélité, n'a pas eu l'opportunité de faire de l'upsell.\u003C/p>\n\u003Cp>C'est un arbitrage : accepter de jouer dans l'écosystème agentique pour ne pas disparaître, tout en maintenant des canaux directs (email, app, fidélité) pour les clients existants. La \u003Ca href=\"/blog/google-s-ai-search-guidance-is-naive-and-self-serving\">guidance de Google sur l'AI search, qualifiée de naïve par certains\u003C/a>, ne mentionne évidemment pas ce trade-off.\u003C/p>\n\u003Ch2>Ce que les Googlers ont dit off-stage\u003C/h2>\n\u003Cp>Les démos sur scène sont calibrées pour impressionner. Ce qui se dit dans les sessions techniques et les couloirs est souvent plus révélateur. Comme documenté dans \u003Ca href=\"/blog/velocity-what-the-googlers-not-on-stage-said-at-i-o-2026\">les échanges avec les Googlers hors scène à I/O 2026\u003C/a>, plusieurs ingénieurs ont confirmé que le Merchant Center et Google Business Profile deviennent les « sources de vérité » pour les agents. Le site web reste un signal, mais un signal parmi d'autres — pas le signal principal.\u003C/p>\n\u003Cp>Cette hiérarchie est cohérente avec l'architecture technique : un agent qui doit répondre en temps réel ne peut pas crawler, renderer et parser un site web à chaque requête. Il s'appuie sur des données pré-indexées, structurées, et accessibles via API. Si vos données business les plus critiques (prix, disponibilité, localisation, services) ne sont pas dans ces sources structurées, elles n'existent pas pour l'agent.\u003C/p>\n\u003Cp>Le \u003Ca href=\"/blog/all-you-need-to-know-about-cloudflare-s-agent-readiness-score-via-sejournal-slobodanmanic\">Cloudflare Agent Readiness Score\u003C/a> est un indicateur émergent de cette tendance : l'infrastructure elle-même commence à se noter sur sa capacité à servir des agents AI, pas seulement des navigateurs.\u003C/p>\n\u003Ch2>L'enjeu réel derrière les démos\u003C/h2>\n\u003Cp>Les démos Google I/O 2026 ne montrent pas un futur hypothétique. Elles montrent un présent en déploiement progressif. Le problème de visibilité business qu'elles révèlent est technique avant d'être stratégique : si votre empreinte numérique n'est pas structurée, cohérente et transactionnelle à chaque couche, vous serez invisible pour le prochain canal d'acquisition dominant. Un outil de monitoring comme Seogard qui vérifie en continu la cohérence de vos structured data, la disponibilité de votre SSR et la stabilité de vos signaux techniques est le filet de sécurité minimal dans cette transition. Le SEO ne meurt pas — il mute en ingénierie de la lisibilité machine.\u003C/p>",null,12,[18,19,20,21,22],"google i/o","ai search","business visibility","structured data","answer engine optimization","Google I/O 2026 : le problème de visibilité business que les démos révèlent","Sun May 31 2026 16:03:11 GMT+0000 (Coordinated Universal Time)",[26,43,58],{"_id":27,"slug":28,"__v":6,"author":7,"canonical":29,"category":10,"createdAt":30,"date":31,"description":32,"image":15,"imageAlt":15,"readingTime":16,"tags":33,"title":41,"updatedAt":42},"6a1a7d89aa6b273b0ccd1780","google-serp-layout-shift-position-1-now-appears-halfway-down-the-page-via-sejournal-lorenbaker","https://seogard.io/blog/google-serp-layout-shift-position-1-now-appears-halfway-down-the-page-via-sejournal-lorenbaker","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.",[34,35,36,37,38,39,40],"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)",{"_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},"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.",[51,52,53,54,55],"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":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},"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.",[66,67,68,69,70],"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)"]