[{"data":1,"prerenderedAt":1789},["ShallowReactive",2],{"i-ic:outline-arrow-upward":3,"Footer_afPiwGMwNiEyV4syWzw87ovzxHAgs4iwKtCn4zqBf8E":8,"\u002Farticles\u002Fis-it-agent-ready":16,"i-material-symbols:home":1762,"i-material-symbols:search":1764,"Brand_bAcjTzQpW6OVpFK319jfMki97vH1GrZiqHmeI7Xg4o":1766,"i-material-symbols:ios-share":1771,"AppImg_IyX8AyXnvzxMhkQHFSbpXBHOtGi2gizwCEtOpbCcVEk":1773,"ArticleDetails_yOduvJLo4q585gTxkZtkwKDAThRpmA0mb0TgdwyiM":1778},{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":7},0,24,false,"\u003Cpath fill=\"currentColor\" d=\"m4 12l1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8z\"\u002F>",["Island",9],{"key":10,"result":11},"Footer_afPiwGMwNiEyV4syWzw87ovzxHAgs4iwKtCn4zqBf8E",{"head":12},{"style":13},[14],{"innerHTML":15},":where(.i-mdi\\:github){display:inline-block;width:1em;height:1em;background-color:currentColor;-webkit-mask-image:var(--svg);mask-image:var(--svg);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;--svg:url(\"data:image\u002Fsvg+xml,%3Csvg xmlns='http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='black' d='M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5c.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34c-.46-1.16-1.11-1.47-1.11-1.47c-.91-.62.07-.6.07-.6c1 .07 1.53 1.03 1.53 1.03c.87 1.52 2.34 1.07 2.91.83c.09-.65.35-1.09.63-1.34c-2.22-.25-4.55-1.11-4.55-4.92c0-1.11.38-2 1.03-2.71c-.1-.25-.45-1.29.1-2.64c0 0 .84-.27 2.75 1.02c.79-.22 1.65-.33 2.5-.33s1.71.11 2.5.33c1.91-1.29 2.75-1.02 2.75-1.02c.55 1.35.2 2.39.1 2.64c.65.71 1.03 1.6 1.03 2.71c0 3.82-2.34 4.66-4.57 4.91c.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2'\u002F%3E%3C\u002Fsvg%3E\")}",{"id":17,"title":18,"author":19,"body":22,"description":1754,"extension":1755,"meta":1756,"navigation":236,"path":1757,"publicationDate":1758,"seo":1759,"stem":1760,"__hash__":1761},"articles\u002Farticles\u002Fis-it-agent-ready.md","Agent-ready à 100 %, les checks content qu’on a passés sur Double Slash",{"name":20,"url":21},"@patrickfaramaz ","https:\u002F\u002Ftwitter.com\u002Fpatrickfaramaz",{"type":23,"value":24,"toc":1736},"minimark",[25,29,45,48,64,74,97,103,106,128,135,140,162,183,202,265,276,279,283,287,302,325,335,342,344,348,352,370,395,406,433,444,458,460,464,468,493,515,521,558,565,587,594,605,631,641,644,646,650,654,684,702,709,721,728,735,737,743,747,763,774,796,834,844,846,850,854,884,901,904,924,929,937,947,958,972,974,978,982,1007,1024,1031,1251,1257,1273,1280,1282,1286,1290,1321,1337,1344,1432,1444,1454,1456,1460,1589,1591,1595,1601,1611,1614,1616,1620,1647,1649,1653,1656,1673,1681,1684,1686,1690,1732],[26,27,28],"p",{},"Le web a appris à parler aux navigateurs, puis aux moteurs de recherche. Il doit maintenant parler aux agents IA.",[26,30,31,32,39,40,44],{},"En avril 2026, Cloudflare a lancé ",[33,34,38],"a",{"href":35,"rel":36},"https:\u002F\u002Fisitagentready.com\u002F",[37],"nofollow","isitagentready.com"," pour mesurer ça. Le constat global n’est pas flatteur : beaucoup de sites ont un ",[41,42,43],"code",{},"robots.txt",", très peu déclarent des Content Signals, encore moins servent du Markdown aux agents, et des briques comme l’API Catalog restent rares.",[26,46,47],{},"Cloudflare lance évidemment ce service pour mettre en avant que sur le dashboard Cloudflare, plusieurs éléments peuvent se configurer en un clic !",[26,49,50,54,55,58,59,63],{},[51,52,53],"strong",{},"Point important :"," Double Slash est un ",[51,56,57],{},"site de contenu"," (podcast + blog). On s’est donc concentré sur les indicateurs du profil ",[60,61,62],"em",{},"Content Site",". Pas d’auth \u002F connexion agent, pas d’e-commerce. Ces checks existent dans le scanner (OAuth, Auth.md, x402, UCP, ACP, etc.), mais ils ne correspondent pas à ce qu’on est. Les viser pour “gonfler” un score n’aurait aucun sens.",[26,65,66,67,69,70,73],{},"Le profil content, c’est : ",[41,68,43],{},", sitemap, en-têtes ",[41,71,72],{},"Link",", DNS-AID, négociation Markdown, règles bots IA, Content Signals, API Catalog, WebMCP.",[26,75,76,77,80,81,84,85,90,91,96],{},"Sur double-slash.dev, on est à ",[51,78,79],{},"100 %"," sur ce périmètre, niveau ",[60,82,83],{},"Agent-Integrated",". Voici ce que chaque check vérifie, quoi mettre en place, et pourquoi ça compte, d’après le ",[33,86,89],{"href":87,"rel":88},"https:\u002F\u002Fblog.cloudflare.com\u002Fagent-readiness\u002F",[37],"blog Cloudflare Agent Readiness",", le ",[33,92,95],{"href":93,"rel":94},"https:\u002F\u002Fisitagentready.com\u002Fdouble-slash.dev?checks=robotsTxt%2Csitemap%2ClinkHeaders%2CdnsAid%2CmarkdownNegotiation%2CrobotsTxtAiRules%2CcontentSignals%2CapiCatalog%2CwebMcp",[37],"scan réel",", et les specs associées.",[98,99],"img",{"align":100,"alt":101,"src":102},"center","Agent qui aime un site web","\u002Fassets\u002Farticles\u002Fbot-ai-web.jpg",[26,104,105],{},"Pour chaque check, on ajoute trois indicateurs (évaluation éditoriale, pas un score officiel du scanner) :",[107,108,109,116,122],"ul",{},[110,111,112,115],"li",{},[51,113,114],{},"Difficulté"," : effort pour le mettre en place sur un site content type Nuxt \u002F CMS \u002F CDN.",[110,117,118,121],{},[51,119,120],{},"Navigateur"," : s’il faut une API navigateur native, ou si c’est purement serveur \u002F DNS \u002F lu par les agents.",[110,123,124,127],{},[51,125,126],{},"Maturité"," : standard établi, pratique émergente, ou early stage (draft \u002F incubation \u002F adoption encore faible).",[129,130,132,133],"h2",{"id":131},"_1-robotstxt","1. ",[41,134,43],{},[26,136,137],{},[51,138,139],{},"Indicateurs",[107,141,142,148,155],{},[110,143,144,145],{},"Difficulté : ",[51,146,147],{},"facile",[110,149,150,151,154],{},"Navigateur : ",[51,152,153],{},"100 % (pas besoin d’API)"," (fichier lu par crawlers et agents, pas une API web)",[110,156,157,158,161],{},"Maturité : ",[51,159,160],{},"établie"," (convention depuis 1994, écosystème RFC 9309)",[26,163,164,167,170,171,174,175,178,179,182],{},[51,165,166],{},"Ce que le test vérifie",[168,169],"br",{},"\nUn fichier ",[41,172,173],{},"\u002Frobots.txt"," en HTTP 200, en ",[41,176,177],{},"text\u002Fplain",", avec au moins une directive ",[41,180,181],{},"User-agent:"," valide.",[26,184,185,188,190,191,193,194,197,198,201],{},[51,186,187],{},"À mettre en place",[168,189],{},"\nUn ",[41,192,43],{}," qui dit qui peut crawler quoi, et qui pointe vers la sitemap. Chez nous, il est généré via ",[51,195,196],{},"nuxt-robots"," (le commentaire ",[41,199,200],{},"# START nuxt-robots"," apparaît dans le fichier). Extrait du scan :",[203,204,209],"pre",{"className":205,"code":206,"language":207,"meta":208,"style":208},"language-txt shiki shiki-themes synthwave-84","User-agent: *\nAllow: \u002F\nContent-Signal: ai-train=no, search=yes, ai-input=yes\n\nUser-agent: OAI-SearchBot\nAllow: \u002F\nContent-Signal: ai-train=no, search=yes, ai-input=yes\n\nSitemap: https:\u002F\u002Fdouble-slash.dev\u002Fsitemap.xml\n","txt","",[41,210,211,219,225,231,238,244,249,254,259],{"__ignoreMap":208},[212,213,216],"span",{"class":214,"line":215},"line",1,[212,217,218],{},"User-agent: *\n",[212,220,222],{"class":214,"line":221},2,[212,223,224],{},"Allow: \u002F\n",[212,226,228],{"class":214,"line":227},3,[212,229,230],{},"Content-Signal: ai-train=no, search=yes, ai-input=yes\n",[212,232,234],{"class":214,"line":233},4,[212,235,237],{"emptyLinePlaceholder":236},true,"\n",[212,239,241],{"class":214,"line":240},5,[212,242,243],{},"User-agent: OAI-SearchBot\n",[212,245,247],{"class":214,"line":246},6,[212,248,224],{},[212,250,252],{"class":214,"line":251},7,[212,253,230],{},[212,255,257],{"class":214,"line":256},8,[212,258,237],{"emptyLinePlaceholder":236},[212,260,262],{"class":214,"line":261},9,[212,263,264],{},"Sitemap: https:\u002F\u002Fdouble-slash.dev\u002Fsitemap.xml\n",[26,266,267,270,272,273,275],{},[51,268,269],{},"Pourquoi",[168,271],{},"\nPour un agent, le ",[41,274,43],{}," joue deux rôles : les règles de crawl, et le lien vers les sitemaps. C’est le premier fichier qu’un bot bien élevé lit. Sans lui, pas de politique claire, pas de fil d’Ariane. Cloudflare Radar estime qu’environ 78 % des sites en ont un, mais la plupart sont encore écrits pour Googlebot, pas pour l’IA.",[277,278],"hr",{},[129,280,282],{"id":281},"_2-sitemap","2. Sitemap",[26,284,285],{},[51,286,139],{},[107,288,289,293,297],{},[110,290,144,291],{},[51,292,147],{},[110,294,150,295],{},[51,296,153],{},[110,298,157,299,301],{},[51,300,160],{}," (sitemaps XML classiques, largement supportées par les crawlers)",[26,303,304,306,308,309,312,313,316,317,320,321,324],{},[51,305,166],{},[168,307],{},"\nUne sitemap XML joignable, idéalement annoncée par une ligne ",[41,310,311],{},"Sitemap:"," dans le robots (sinon ",[41,314,315],{},"\u002Fsitemap.xml"," à la racine). Sur Double Slash : directive trouvée, puis ",[41,318,319],{},"GET \u002Fsitemap.xml"," en 200 avec ",[41,322,323],{},"content-type: text\u002Fxml",".",[26,326,327,329,331,332,334],{},[51,328,187],{},[168,330],{},"\nUne sitemap à jour (épisodes, articles, pages utiles) + la référence dans ",[41,333,43],{},". Du XML classique suffit.",[26,336,337,339,341],{},[51,338,269],{},[168,340],{},"\nLa sitemap donne à l’agent la liste des URLs à lire. Il n’a pas à tout découvrir en suivant des liens dans le HTML. Sur un podcast avec des années d’épisodes et d’articles, ça évite les trous : nouveaux numéros, archives, pages de soutien, index LLM, etc.",[277,343],{},[129,345,347],{"id":346},"_3-link-headers-rfc-8288","3. Link headers (RFC 8288)",[26,349,350],{},[51,351,139],{},[107,353,354,360,365],{},[110,355,144,356,359],{},[51,357,358],{},"facile à moyenne"," (selon que tu touches le serveur, le CDN, ou le framework)",[110,361,150,362,364],{},[51,363,153],{}," (en-tête HTTP. Les agents le lisent sans API JS)",[110,366,157,367,369],{},[51,368,160],{}," (RFC 8288, Web Linking, usage “agent-useful” encore peu répandu)",[26,371,372,374,376,377,380,381,384,385,384,388,384,391,394],{},[51,373,166],{},[168,375],{},"\nDes en-têtes HTTP ",[41,378,379],{},"Link:"," utiles aux agents : ",[41,382,383],{},"api-catalog",", ",[41,386,387],{},"describedby",[41,389,390],{},"sitemap",[41,392,393],{},"alternate",", etc.",[26,396,397,399,401,402,405],{},[51,398,187],{},[168,400],{},"\nCes liens dans la réponse HTTP, pas seulement dans le ",[41,403,404],{},"\u003Chead>",". Sur la home, le scan lit :",[203,407,411],{"className":408,"code":409,"language":410,"meta":208,"style":208},"language-http shiki shiki-themes synthwave-84","Link: \u003C\u002Fllms.txt>; rel=\"describedby\"; type=\"text\u002Fmarkdown\"; title=\"Site index for LLMs\",\n      \u003C\u002F.well-known\u002Fapi-catalog>; rel=\"api-catalog\"; type=\"application\u002Flinkset+json\",\n      \u003C\u002Fsitemaps.xml>; rel=\"sitemap\"; type=\"application\u002Fxml\",\n      \u003C\u002Fpodcast-rss-feed.xml>; rel=\"alternate\"; type=\"application\u002Frss+xml\"; title=\"Podcast RSS feed\"\n","http",[41,412,413,418,423,428],{"__ignoreMap":208},[212,414,415],{"class":214,"line":215},[212,416,417],{},"Link: \u003C\u002Fllms.txt>; rel=\"describedby\"; type=\"text\u002Fmarkdown\"; title=\"Site index for LLMs\",\n",[212,419,420],{"class":214,"line":221},[212,421,422],{},"      \u003C\u002F.well-known\u002Fapi-catalog>; rel=\"api-catalog\"; type=\"application\u002Flinkset+json\",\n",[212,424,425],{"class":214,"line":227},[212,426,427],{},"      \u003C\u002Fsitemaps.xml>; rel=\"sitemap\"; type=\"application\u002Fxml\",\n",[212,429,430],{"class":214,"line":233},[212,431,432],{},"      \u003C\u002Fpodcast-rss-feed.xml>; rel=\"alternate\"; type=\"application\u002Frss+xml\"; title=\"Podcast RSS feed\"\n",[26,434,435,436,384,438,440,441,443],{},"Les relations ",[41,437,387],{},[41,439,383],{}," et ",[41,442,393],{}," sont validées (4 liens au total).",[26,445,446,448,450,451,453,454,457],{},[51,447,269],{},[168,449],{},"\nContrairement à un lien noyé dans le markup, le header ",[41,452,72],{}," fait partie de la réponse HTTP. Un agent peut découvrir ",[41,455,456],{},"llms.txt",", le catalogue et le flux RSS sans télécharger ni parser tout le HTML. Moins de tokens, moins d’erreurs, découverte plus prévisible.",[277,459],{},[129,461,463],{"id":462},"_4-dns-aid","4. DNS-AID",[26,465,466],{},[51,467,139],{},[107,469,470,476,481],{},[110,471,144,472,475],{},[51,473,474],{},"moyenne"," (records DNS + DNSSEC \u002F DS chez le registrar)",[110,477,150,478,480],{},[51,479,153],{}," (découverte DNS avant HTTP)",[110,482,157,483,486,487,492],{},[51,484,485],{},"early stage"," Internet-Draft individuel (",[33,488,491],{"href":489,"rel":490},"https:\u002F\u002Fdatatracker.ietf.org\u002Fdoc\u002Fdraft-mozleywilliams-dnsop-dnsaid\u002F",[37],"draft-mozleywilliams-dnsop-dnsaid",", maj. mai 2026), pas encore RFC. En dessous, SVCB\u002FHTTPS (RFC 9460) est déjà standard.",[26,494,495,497,499,500,503,504,384,507,510,511,514],{},[51,496,166],{},[168,498],{},"\nDes enregistrements DNS SVCB\u002FHTTPS sous ",[41,501,502],{},"_index._agents.\u003Cdomaine>"," (et éventuellement ",[41,505,506],{},"_a2a._agents",[41,508,509],{},"_mcp._agents","), avec DNSSEC si possible. Le scanner passe par DNS-over-HTTPS et regarde notamment le flag ",[41,512,513],{},"AD=true"," (Authenticated Data).",[26,516,517,520],{},[51,518,519],{},"Ce qu’on a sur Double Slash"," (d’après le scan) :",[107,522,523,539,545,551],{},[110,524,525,528,529,384,532,384,535,538],{},[41,526,527],{},"_index._agents.double-slash.dev"," → SVCB, priorité 1, cible ",[41,530,531],{},"double-slash.dev",[41,533,534],{},"alpn=h2,http\u002F1.1",[41,536,537],{},"port=443",", DNSSEC OK",[110,540,541,544],{},[41,542,543],{},"_a2a._agents.double-slash.dev"," → même schéma",[110,546,547,548,550],{},"pas de ",[41,549,509],{}," (NXDOMAIN) cohérent si on n’expose pas de serveur MCP public dédié",[110,552,553,554,557],{},"zone signée côté OVH (",[41,555,556],{},"dns17.ovh.net"," apparaît dans les réponses DNS)",[26,559,560,562,564],{},[51,561,187],{},[168,563],{},"\nChez le DNS autoritaire :",[566,567,568,575,584],"ol",{},[110,569,570,571,574],{},"publier au minimum ",[41,572,573],{},"_index._agents"," en mode service (priorité ≥ 1), pas en alias (priorité 0).",[110,576,577,578,440,581,324],{},"inclure ",[41,579,580],{},"alpn",[41,582,583],{},"port",[110,585,586],{},"activer DNSSEC et publier le DS chez le registrar, sinon la chaîne de confiance est cassée.",[26,588,589,591,593],{},[51,590,269],{},[168,592],{},"\nLa résolution DNS est déjà sur le chemin critique. Annoncer que le domaine est agent-aware avant le premier HTTP ne coûte presque rien. Avec DNSSEC, ce n’est plus un simple hint : la réponse est authentifiée. Sans DNSSEC, le record reste au mieux une indication. isitagentready.com en fait un check de discoverability à part entière.",[26,595,596,599,601,602,604],{},[51,597,598],{},"Pour les nuls",[168,600],{},"\nQuand tu tapes ",[41,603,531],{}," dans un navigateur, ton appareil pose d’abord une question au DNS : « où est ce site ? ». Le DNS répond avec l’adresse du serveur. DNS-AID réutilise ce même premier échange pour dire aussi : « et au fait, ce domaine est pensé pour les agents IA ».",[26,606,607,608,610,611,613,614,616,617,620,621,384,623,626,627,630],{},"Concrètement, on ajoute des enregistrements DNS spéciaux, pas sur ",[41,609,531],{}," tout seul, mais sur des noms du type ",[41,612,527],{},". Ce sont des records SVCB (ou HTTPS) : ils pointent vers le site (",[41,615,531],{},"), indiquent le port (",[41,618,619],{},"443",") et les protocoles HTTP acceptés (",[41,622,129],{},[41,624,625],{},"http\u002F1.1","). Un agent peut donc découvrir ça ",[51,628,629],{},"avant"," même de faire une requête HTTP vers la homepage.",[26,632,633,634,637,638,640],{},"DNSSEC, c’est la signature de la zone DNS. Sans ça, n’importe qui pourrait théoriquement fabriquer une fausse réponse. Avec DNSSEC (et le DS bien publié chez le registrar), le validateur peut vérifier que la réponse vient bien de la vraie zone. Sur isitagentready.com, le check DNS-AID regarde justement ces records ",[41,635,636],{},"_agents"," et si la réponse est authentifiée (",[41,639,513],{},").",[26,642,643],{},"En résumé : le DNS sert déjà à trouver le site. DNS-AID y ajoute une petite étiquette « agent-ready », lisible tout de suite, sans scraper la page. C’est encore early stage (Internet-Draft, pas encore une RFC figée), mais le mécanisme en dessous (SVCB\u002FHTTPS) existe déjà.",[277,645],{},[129,647,649],{"id":648},"_5-négociation-markdown","5. Négociation Markdown",[26,651,652],{},[51,653,139],{},[107,655,656,665,678],{},[110,657,144,658,660,661,664],{},[51,659,474],{}," (négociation à l’origine, règles CDN, ou fallback ",[41,662,663],{},"\u002Findex.md",")",[110,666,150,667,669,670,673,674,677],{},[51,668,153],{}," ce sont les ",[51,671,672],{},"clients \u002F agents"," qui envoient ",[41,675,676],{},"Accept: text\u002Fmarkdown"," (les navigateurs grand public ne le font pas par défaut)",[110,679,157,680,683],{},[51,681,682],{},"émergente"," la négociation HTTP est ancienne, “Markdown for Agents” (Cloudflare, fév. 2026) et l’usage réel par les agents sont encore récents (~3,9 % des sites au scan Radar cité par Cloudflare).",[26,685,686,688,690,691,693,694,697,698,701],{},[51,687,166],{},[168,689],{},"\nQuand le client envoie ",[41,692,676],{},", le serveur répond en ",[41,695,696],{},"text\u002Fmarkdown",". Chez nous : ",[41,699,700],{},"text\u002Fmarkdown; charset=utf-8"," sur la home.",[26,703,704,706,708],{},[51,705,187],{},[168,707],{},"\nDeux approches dans l’esprit “Markdown for Agents” :",[566,710,711,714],{},[110,712,713],{},"négociation de contenu à l’origine ou au CDN.",[110,715,716,717,720],{},"fallback URL (comme Cloudflare Docs) : chaque page aussi en ",[41,718,719],{},"\u002Fchemin\u002Findex.md",", pour les agents qui ne négocient pas encore correctement.",[26,722,723,724,727],{},"Cloudflare a mesuré sur un article de blog : 16 180 tokens en HTML contre 3 150 en markdown, environ 80 % de tokens en moins. Leur produit convertit à la volée, on peut aussi le faire soi-même à l’origine. Des agents de coding (Claude Code, OpenCode, Cursor selon leurs docs) envoient déjà cet ",[41,725,726],{},"Accept"," sur une partie de leurs requêtes.",[26,729,730,732,734],{},[51,731,269],{},[168,733],{},"\nLe HTML du web “humain” est bruyant : navigation, scripts, layout. Pour un LLM, chaque balise inutile coûte du contexte. Servir le markdown à la source évite une conversion HTML→MD approximative côté agent, réduit le coût et accélère la lecture. Sur un site content, après robots + sitemap, c’est souvent le levier le plus concret.",[277,736],{},[129,738,740,741],{"id":739},"_6-règles-bots-ia-dans-robotstxt","6. Règles bots IA dans ",[41,742,43],{},[26,744,745],{},[51,746,139],{},[107,748,749,753,757],{},[110,750,144,751],{},[51,752,147],{},[110,754,150,755],{},[51,756,153],{},[110,758,157,759,762],{},[51,760,761],{},"mécanisme établi, usage IA émergent"," (même fichier robots, user-agents et politiques IA encore en train de se stabiliser)",[26,764,765,767,769,770,773],{},[51,766,166],{},[168,768],{},"\nDes politiques pour des user-agents IA connus (GPTBot, ChatGPT-User, OAI-SearchBot, Google-Extended, Claude, Perplexity, Bytespider, etc.). Une règle explicite ou un wildcard ",[41,771,772],{},"*"," cohérent peut suffire, le scanner remonte aussi quels bots ont une règle nommée.",[26,775,776,779,781,782,785,786,789,790,792,793,324],{},[51,777,778],{},"Sur Double Slash",[168,780],{},"\nRègle explicite pour ",[41,783,784],{},"OAI-SearchBot"," (",[41,787,788],{},"Allow: \u002F","), plus le wildcard ",[41,791,772],{}," qui autorise le reste. Message du check : ",[60,794,795],{},"Found rules for AI bots: oai-searchbot",[26,797,798,800,802,803,806,807,384,810,384,813,384,816,384,819,384,822,384,825,384,828,384,831,394],{},[51,799,187],{},[168,801],{},"\nDécider une politique, puis l’écrire : blocs dédiés si les droits diffèrent selon les bots, sinon un ",[41,804,805],{},"User-agent: *"," clair. Le scanner évalue notamment ",[41,808,809],{},"gptbot",[41,811,812],{},"chatgpt-user",[41,814,815],{},"oai-searchbot",[41,817,818],{},"google-extended",[41,820,821],{},"ccbot",[41,823,824],{},"anthropic-ai",[41,826,827],{},"claude-web",[41,829,830],{},"bytespider",[41,832,833],{},"perplexitybot",[26,835,836,838,840,841,843],{},[51,837,269],{},[168,839],{},"\nLes bots IA ne sont pas un Googlebot de plus. Sans règles, on dépend de comportements par défaut opaques. Avec des règles, on peut autoriser la recherche conversationnelle et restreindre un crawler d’entraînement, chemin par chemin. Le ",[41,842,43],{}," reste le contrat de premier niveau : les bots bien élevés le respectent encore.",[277,845],{},[129,847,849],{"id":848},"_7-content-signals","7. Content Signals",[26,851,852],{},[51,853,139],{},[107,855,856,863,867],{},[110,857,144,858,860,861,664],{},[51,859,147],{}," (quelques lignes dans ",[41,862,43],{},[110,864,150,865],{},[51,866,153],{},[110,868,157,869,871,872,877,878,883],{},[51,870,682],{}," déployé en prod via Cloudflare \u002F ",[33,873,876],{"href":874,"rel":875},"https:\u002F\u002Fcontentsignals.org\u002F",[37],"contentsignals.org",". Vocabulaire AI preferences encore en Internet-Draft côté IETF (",[33,879,882],{"href":880,"rel":881},"https:\u002F\u002Fdatatracker.ietf.org\u002Fdoc\u002Fdraft-ietf-aipref-vocab\u002F",[37],"draft-ietf-aipref-vocab","). Adoption encore faible (~4 % selon Radar \u002F blog Agent Readiness).",[26,885,886,888,890,891,894,895,785,897,900],{},[51,887,166],{},[168,889],{},"\nDes directives ",[41,892,893],{},"Content-Signal:"," dans le ",[41,896,43],{},[33,898,876],{"href":874,"rel":899},[37],", aussi côté Cloudflare AI Crawl Control).",[26,902,903],{},"Trois axes indépendants, tels que décrits par Cloudflare :",[107,905,906,912,918],{},[110,907,908,911],{},[41,909,910],{},"search",": le contenu peut apparaître dans les résultats \u002F la découverte type search",[110,913,914,917],{},[41,915,916],{},"ai-input",": le contenu peut servir d’entrée pour l’inférence, le grounding, l’usage agentique",[110,919,920,923],{},[41,921,922],{},"ai-train",": le contenu peut entrer dans des corpus d’entraînement de modèles",[26,925,926,928],{},[51,927,778],{}," (2 directives détectées) :",[203,930,931],{"className":205,"code":230,"language":207,"meta":208,"style":208},[41,932,933],{"__ignoreMap":208},[212,934,935],{"class":214,"line":215},[212,936,230],{},[26,938,939,940,942,943,946],{},"…sous ",[41,941,805],{}," et sous ",[41,944,945],{},"User-agent: OAI-SearchBot",". En clair : oui à la découverte et à l’usage comme contexte de réponse, non à l’entraînement.",[26,948,949,951,953,954,957],{},[51,950,187],{},[168,952],{},"\nAjouter la ligne sous chaque groupe ",[41,955,956],{},"User-agent"," concerné. On peut aussi cibler bot par bot (exemples sur contentsignals.org avec des mixes search\u002Ftrain\u002Finput différents).",[26,959,960,962,964,967,968,971],{},[51,961,269],{},[168,963],{},[41,965,966],{},"Allow"," \u002F ",[41,969,970],{},"Disallow"," répondent à “peux-tu crawler ?”. Content Signals répondent à “à quoi as-tu le droit d’utiliser ce que tu as lu ?”. Pour un podcast ou un média, c’est la nuance qui compte : rester trouvable et citable sans offrir le catalogue comme dataset d’entraînement. Radar place encore cette déclaration autour de ~4 % des sites.",[277,973],{},[129,975,977],{"id":976},"_8-api-catalog-rfc-9727","8. API Catalog (RFC 9727)",[26,979,980],{},[51,981,139],{},[107,983,984,991,995],{},[110,985,144,986,988,989,664],{},[51,987,358],{}," (un well-known JSON + éventuellement le header ",[41,990,72],{},[110,992,150,993],{},[51,994,153],{},[110,996,157,997,1000,1001,1006],{},[51,998,999],{},"standard publié, adoption early"," ",[33,1002,1005],{"href":1003,"rel":1004},"https:\u002F\u002Fwww.rfc-editor.org\u002Frfc\u002Frfc9727.html",[37],"RFC 9727"," (IETF). Cloudflare note que ce genre de signal reste encore extrêmement rare sur le web.",[26,1008,1009,1011,1013,1016,1017,1020,1021,324],{},[51,1010,166],{},[168,1012],{},[41,1014,1015],{},"GET \u002F.well-known\u002Fapi-catalog"," qui renvoie un document Linkset (",[41,1018,1019],{},"application\u002Flinkset+json",", RFC 9264), conforme à l’esprit de la ",[33,1022,1005],{"href":1003,"rel":1023},[37],[26,1025,1026,1028,1030],{},[51,1027,778],{},[168,1029],{},"\nUne entrée de linkset, content-type correct. Contenu réel :",[203,1032,1036],{"className":1033,"code":1034,"language":1035,"meta":208,"style":208},"language-json shiki shiki-themes synthwave-84","{\n  \"linkset\": [\n    {\n      \"anchor\": \"https:\u002F\u002Fdouble-slash.dev\u002F\",\n      \"describedby\": [\n        {\n          \"href\": \"https:\u002F\u002Fdouble-slash.dev\u002Fllms.txt\",\n          \"type\": \"text\u002Fmarkdown\",\n          \"title\": \"Site index for LLMs\"\n        }\n      ],\n      \"sitemap\": [\n        {\n          \"href\": \"https:\u002F\u002Fdouble-slash.dev\u002Fsitemap.xml\",\n          \"type\": \"application\u002Fxml\"\n        }\n      ],\n      \"alternate\": [\n        {\n          \"href\": \"https:\u002F\u002Fdouble-slash.dev\u002Fpodcast-rss-feed.xml\",\n          \"type\": \"application\u002Frss+xml\",\n          \"title\": \"Podcast RSS feed\"\n        }\n      ]\n    }\n  ]\n}\n","json",[41,1037,1038,1044,1053,1058,1073,1080,1085,1097,1109,1119,1125,1131,1139,1144,1156,1166,1171,1176,1184,1189,1201,1213,1223,1228,1233,1239,1245],{"__ignoreMap":208},[212,1039,1040],{"class":214,"line":215},[212,1041,1043],{"class":1042},"soy-K","{\n",[212,1045,1046,1050],{"class":214,"line":221},[212,1047,1049],{"class":1048},"sfE7D","  \"linkset\"",[212,1051,1052],{"class":1042},": [\n",[212,1054,1055],{"class":214,"line":227},[212,1056,1057],{"class":1042},"    {\n",[212,1059,1060,1063,1066,1070],{"class":214,"line":233},[212,1061,1062],{"class":1048},"      \"anchor\"",[212,1064,1065],{"class":1042},": ",[212,1067,1069],{"class":1068},"sFl1-","\"https:\u002F\u002Fdouble-slash.dev\u002F\"",[212,1071,1072],{"class":1042},",\n",[212,1074,1075,1078],{"class":214,"line":240},[212,1076,1077],{"class":1048},"      \"describedby\"",[212,1079,1052],{"class":1042},[212,1081,1082],{"class":214,"line":246},[212,1083,1084],{"class":1042},"        {\n",[212,1086,1087,1090,1092,1095],{"class":214,"line":251},[212,1088,1089],{"class":1048},"          \"href\"",[212,1091,1065],{"class":1042},[212,1093,1094],{"class":1068},"\"https:\u002F\u002Fdouble-slash.dev\u002Fllms.txt\"",[212,1096,1072],{"class":1042},[212,1098,1099,1102,1104,1107],{"class":214,"line":256},[212,1100,1101],{"class":1048},"          \"type\"",[212,1103,1065],{"class":1042},[212,1105,1106],{"class":1068},"\"text\u002Fmarkdown\"",[212,1108,1072],{"class":1042},[212,1110,1111,1114,1116],{"class":214,"line":261},[212,1112,1113],{"class":1048},"          \"title\"",[212,1115,1065],{"class":1042},[212,1117,1118],{"class":1068},"\"Site index for LLMs\"\n",[212,1120,1122],{"class":214,"line":1121},10,[212,1123,1124],{"class":1042},"        }\n",[212,1126,1128],{"class":214,"line":1127},11,[212,1129,1130],{"class":1042},"      ],\n",[212,1132,1134,1137],{"class":214,"line":1133},12,[212,1135,1136],{"class":1048},"      \"sitemap\"",[212,1138,1052],{"class":1042},[212,1140,1142],{"class":214,"line":1141},13,[212,1143,1084],{"class":1042},[212,1145,1147,1149,1151,1154],{"class":214,"line":1146},14,[212,1148,1089],{"class":1048},[212,1150,1065],{"class":1042},[212,1152,1153],{"class":1068},"\"https:\u002F\u002Fdouble-slash.dev\u002Fsitemap.xml\"",[212,1155,1072],{"class":1042},[212,1157,1159,1161,1163],{"class":214,"line":1158},15,[212,1160,1101],{"class":1048},[212,1162,1065],{"class":1042},[212,1164,1165],{"class":1068},"\"application\u002Fxml\"\n",[212,1167,1169],{"class":214,"line":1168},16,[212,1170,1124],{"class":1042},[212,1172,1174],{"class":214,"line":1173},17,[212,1175,1130],{"class":1042},[212,1177,1179,1182],{"class":214,"line":1178},18,[212,1180,1181],{"class":1048},"      \"alternate\"",[212,1183,1052],{"class":1042},[212,1185,1187],{"class":214,"line":1186},19,[212,1188,1084],{"class":1042},[212,1190,1192,1194,1196,1199],{"class":214,"line":1191},20,[212,1193,1089],{"class":1048},[212,1195,1065],{"class":1042},[212,1197,1198],{"class":1068},"\"https:\u002F\u002Fdouble-slash.dev\u002Fpodcast-rss-feed.xml\"",[212,1200,1072],{"class":1042},[212,1202,1204,1206,1208,1211],{"class":214,"line":1203},21,[212,1205,1101],{"class":1048},[212,1207,1065],{"class":1042},[212,1209,1210],{"class":1068},"\"application\u002Frss+xml\"",[212,1212,1072],{"class":1042},[212,1214,1216,1218,1220],{"class":214,"line":1215},22,[212,1217,1113],{"class":1048},[212,1219,1065],{"class":1042},[212,1221,1222],{"class":1068},"\"Podcast RSS feed\"\n",[212,1224,1226],{"class":214,"line":1225},23,[212,1227,1124],{"class":1042},[212,1229,1230],{"class":214,"line":5},[212,1231,1232],{"class":1042},"      ]\n",[212,1234,1236],{"class":214,"line":1235},25,[212,1237,1238],{"class":1042},"    }\n",[212,1240,1242],{"class":214,"line":1241},26,[212,1243,1244],{"class":1042},"  ]\n",[212,1246,1248],{"class":214,"line":1247},27,[212,1249,1250],{"class":1042},"}\n",[26,1252,1253,1254,324],{},"Le même catalogue est aussi annoncé via ",[41,1255,1256],{},"Link: … rel=\"api-catalog\"",[26,1258,1259,1261,1263,1264,1267,1268,1270,1271,324],{},[51,1260,187],{},[168,1262],{},"\nServir ",[41,1265,1266],{},"\u002F.well-known\u002Fapi-catalog"," en linkset JSON, lister les ressources machine utiles (",[41,1269,456],{},", sitemap, RSS…), et idéalement répéter la découverte via le header ",[41,1272,72],{},[26,1274,1275,1277,1279],{},[51,1276,269],{},[168,1278],{},"\nAvant d’utiliser une ressource machine, un agent doit savoir qu’elle existe et où elle vit. Sans catalogue, il scrape une homepage ou une doc humaine. Avec un well-known unique, la découverte est automatisable. Ce n’est pas réservé aux plateformes SaaS : un podcast qui expose index LLM + sitemap + RSS a déjà de quoi remplir un linkset utile. Cloudflare note que ce signal reste encore extrêmement rare.",[277,1281],{},[129,1283,1285],{"id":1284},"_9-webmcp","9. WebMCP",[26,1287,1288],{},[51,1289,139],{},[107,1291,1292,1298,1316],{},[110,1293,144,1294,1297],{},[51,1295,1296],{},"moyenne à élevée"," (JS client, schemas d’outils, descriptions pensées pour un agent)",[110,1299,150,1300,1303,1304,1307,1308,1311,1312,1315],{},[51,1301,1302],{},"early \u002F expérimental"," API native en incubation (W3C WebML CG). Chrome : origin trial \u002F flag (",[41,1305,1306],{},"chrome:\u002F\u002Fflags\u002F#enable-webmcp-testing",", autour de Chrome 149–150+), Edge à partir d’environ 150. Firefox et Safari : pas de support natif annoncé. L’API a aussi bougé (",[41,1309,1310],{},"navigator.modelContext"," → ",[41,1313,1314],{},"document.modelContext"," en 2026).",[110,1317,157,1318,1320],{},[51,1319,485],{}," (incubation, surface encore instable, le scanner isitagentready détecte déjà l’enregistrement impératif)",[26,1322,1323,1325,1327,1328,967,1330,1332,1333,1336],{},[51,1324,166],{},[168,1326],{},"\nDes tools enregistrés via l’API navigateur WebMCP (",[41,1329,1310],{},[41,1331,1314],{},"). Pas un fichier ",[41,1334,1335],{},".well-known"," : le scanner charge la page et inspecte ce qui est déclaré.",[26,1338,1339,1341,1343],{},[51,1340,778],{},[168,1342],{},"\nCinq tools détectés, chacun avec un schéma :",[1345,1346,1347,1363],"table",{},[1348,1349,1350],"thead",{},[1351,1352,1353,1357,1360],"tr",{},[1354,1355,1356],"th",{},"Tool",[1354,1358,1359],{},"Titre",[1354,1361,1362],{},"Rôle",[1364,1365,1366,1380,1393,1406,1419],"tbody",{},[1351,1367,1368,1374,1377],{},[1369,1370,1371],"td",{},[41,1372,1373],{},"search_content",[1369,1375,1376],{},"Rechercher sur Double Slash",[1369,1378,1379],{},"chercher épisodes et articles",[1351,1381,1382,1387,1390],{},[1369,1383,1384],{},[41,1385,1386],{},"list_episodes",[1369,1388,1389],{},"Lister les épisodes",[1369,1391,1392],{},"du plus récent au plus ancien",[1351,1394,1395,1400,1403],{},[1369,1396,1397],{},[41,1398,1399],{},"open_page",[1369,1401,1402],{},"Ouvrir une page",[1369,1404,1405],{},"naviguer vers un chemin du site",[1351,1407,1408,1413,1416],{},[1369,1409,1410],{},[41,1411,1412],{},"play_episode",[1369,1414,1415],{},"Lire un épisode",[1369,1417,1418],{},"lancer le player",[1351,1420,1421,1426,1429],{},[1369,1422,1423],{},[41,1424,1425],{},"control_player",[1369,1427,1428],{},"Contrôler le lecteur",[1369,1430,1431],{},"play \u002F pause \u002F statut",[26,1433,1434,1436,1438,1439,967,1441,1443],{},[51,1435,187],{},[168,1437],{},"\nDu JavaScript côté client qui, au chargement, enregistre ces tools auprès de ",[41,1440,1310],{},[41,1442,1314],{},". Descriptions rédigées pour un agent : verbe d’action, paramètres attendus, périmètre du site. Prévoir un fallback si l’API n’existe pas (la plupart des navigateurs grand public ne l’exposent pas encore).",[26,1445,1446,1448,1450,1451,1453],{},[51,1447,269],{},[168,1449],{},"\nMarkdown et sitemap, c’est consommer. WebMCP, c’est agir dans le navigateur : chercher, ouvrir, lancer un épisode, contrôler le player, sans sélecteurs CSS fragiles ni scraping du DOM. Pour un podcast, c’est la différence entre une page indexée quelque part et une expérience réellement utilisable par un agent. Ce check est distinct d’une MCP Server Card en ",[41,1452,1335],{}," (autre check, plutôt niveau suivant).",[277,1455],{},[129,1457,1459],{"id":1458},"tableau-récap","Tableau récap",[1345,1461,1462,1475],{},[1348,1463,1464],{},[1351,1465,1466,1469,1471,1473],{},[1354,1467,1468],{},"Check",[1354,1470,114],{},[1354,1472,120],{},[1354,1474,126],{},[1364,1476,1477,1491,1502,1515,1528,1540,1552,1563,1575],{},[1351,1478,1479,1483,1486,1488],{},[1369,1480,1481],{},[41,1482,43],{},[1369,1484,1485],{},"Facile",[1369,1487,153],{},[1369,1489,1490],{},"Établie",[1351,1492,1493,1496,1498,1500],{},[1369,1494,1495],{},"Sitemap",[1369,1497,1485],{},[1369,1499,153],{},[1369,1501,1490],{},[1351,1503,1504,1507,1510,1512],{},[1369,1505,1506],{},"Link headers",[1369,1508,1509],{},"Facile → moyenne",[1369,1511,153],{},[1369,1513,1514],{},"Établie (usage agent encore rare)",[1351,1516,1517,1520,1523,1525],{},[1369,1518,1519],{},"DNS-AID",[1369,1521,1522],{},"Moyenne",[1369,1524,153],{},[1369,1526,1527],{},"Early stage (I-D)",[1351,1529,1530,1533,1535,1537],{},[1369,1531,1532],{},"Markdown",[1369,1534,1522],{},[1369,1536,153],{},[1369,1538,1539],{},"Émergente",[1351,1541,1542,1545,1547,1549],{},[1369,1543,1544],{},"Règles bots IA",[1369,1546,1485],{},[1369,1548,153],{},[1369,1550,1551],{},"Mécanisme établi \u002F usage IA émergent",[1351,1553,1554,1557,1559,1561],{},[1369,1555,1556],{},"Content Signals",[1369,1558,1485],{},[1369,1560,153],{},[1369,1562,1539],{},[1351,1564,1565,1568,1570,1572],{},[1369,1566,1567],{},"API Catalog",[1369,1569,1509],{},[1369,1571,153],{},[1369,1573,1574],{},"RFC publiée \u002F adoption early",[1351,1576,1577,1580,1583,1586],{},[1369,1578,1579],{},"WebMCP",[1369,1581,1582],{},"Moyenne → élevée",[1369,1584,1585],{},"Chrome\u002FEdge expérimental",[1369,1587,1588],{},"Early stage",[277,1590],{},[129,1592,1594],{"id":1593},"comment-lire-le-100-content","Comment lire le 100 % content",[26,1596,1597,1598,1600],{},"Le 100 % sur le profil ",[60,1599,62],{}," signifie que tous les checks sélectionnés pour un site éditorial passent. Pas que tous les standards agent du web sont présents sur le domaine.",[26,1602,1603,1604,1606,1607,1610],{},"Sur un scan plus large, Double Slash est au niveau 4 (",[60,1605,83],{},"). Le palier 5 (",[60,1608,1609],{},"Agent-Native",") irait chercher Auth.md, MCP Server Card, A2A Agent Card, Agent Skills, utile si on expose un vrai serveur d’outils ou de l’auth agent-to-agent. Pour un podcast + blog, ce n’est pas le premier chantier.",[26,1612,1613],{},"Les checks commerce (x402, UCP, ACP…) restent neutres : ce n’est pas une boutique. Web Bot Auth est surtout pertinent si le site fait lui-même des requêtes signées en tant que bot, pas le cœur d’un site content.",[277,1615],{},[129,1617,1619],{"id":1618},"ordre-de-mise-en-place","Ordre de mise en place",[566,1621,1622,1627,1630,1633,1642,1645],{},[110,1623,1624,1626],{},[41,1625,43],{}," + sitemap",[110,1628,1629],{},"Content Signals + règles bots IA",[110,1631,1632],{},"Négociation Markdown",[110,1634,1635,1636,1638,1639,1641],{},"En-têtes ",[41,1637,72],{}," + ",[41,1640,456],{}," + API Catalog",[110,1643,1644],{},"DNS-AID + DNSSEC",[110,1646,1579],{},[277,1648],{},[129,1650,1652],{"id":1651},"en-bref","En bref",[26,1654,1655],{},"Être agent-ready sur un site de contenu, c’est trois choses mesurables :",[566,1657,1658,1667,1670],{},[110,1659,1660,1661,1663,1664,1666],{},"être trouvable : ",[41,1662,43],{},", sitemap, ",[41,1665,72],{},", DNS-AID.",[110,1668,1669],{},"être lisible à bas coût, avec une licence d’usage claire : Markdown, Content Signals, règles bots.",[110,1671,1672],{},"être actionnable : API Catalog pour les ressources machine, WebMCP pour les gestes dans le navigateur.",[26,1674,1675,1676,1680],{},"C’est ce que le profil Content de ",[33,1677,1679],{"href":93,"rel":1678},[37],"Is It Agent Ready"," mesure, et ce qu’on a verrouillé à 100 % sur Double Slash, sans tirer vers l’auth ni le commerce.",[26,1682,1683],{},"Une partie des briques (robots, sitemap, Link) est du socle web classique. Une autre (Content Signals, Markdown for Agents, DNS-AID, WebMCP) est encore early : utile à adopter tôt, mais à présenter pour ce qu’elle est, des standards et pratiques en train de se fixer.",[277,1685],{},[129,1687,1689],{"id":1688},"sources","Sources",[107,1691,1692,1697,1704,1709,1714,1720,1727],{},[110,1693,1694],{},[33,1695,89],{"href":87,"rel":1696},[37],[110,1698,1699],{},[33,1700,1703],{"href":1701,"rel":1702},"https:\u002F\u002Fblog.cloudflare.com\u002Fmarkdown-for-agents\u002F",[37],"Markdown for Agents",[110,1705,1706],{},[33,1707,1005],{"href":1003,"rel":1708},[37],[110,1710,1711],{},[33,1712,876],{"href":874,"rel":1713},[37],[110,1715,1716],{},[33,1717,1719],{"href":489,"rel":1718},[37],"draft DNS-AID",[110,1721,1722],{},[33,1723,1726],{"href":1724,"rel":1725},"https:\u002F\u002Fdeveloper.chrome.com\u002Fdocs\u002Fai\u002Fwebmcp\u002Fimperative-api",[37],"Chrome WebMCP – Imperative API",[110,1728,1729,1730],{},"Rapport de scan de ",[41,1731,531],{},[1733,1734,1735],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .soy-K, html code.shiki .soy-K{--shiki-default:#BBBBBB}html pre.shiki code .sfE7D, html code.shiki .sfE7D{--shiki-default:#72F1B8}html pre.shiki code .sFl1-, html code.shiki .sFl1-{--shiki-default:#FF8B39}",{"title":208,"searchDepth":221,"depth":221,"links":1737},[1738,1740,1741,1742,1743,1744,1746,1747,1748,1749,1750,1751,1752,1753],{"id":131,"depth":221,"text":1739},"1. robots.txt",{"id":281,"depth":221,"text":282},{"id":346,"depth":221,"text":347},{"id":462,"depth":221,"text":463},{"id":648,"depth":221,"text":649},{"id":739,"depth":221,"text":1745},"6. Règles bots IA dans robots.txt",{"id":848,"depth":221,"text":849},{"id":976,"depth":221,"text":977},{"id":1284,"depth":221,"text":1285},{"id":1458,"depth":221,"text":1459},{"id":1593,"depth":221,"text":1594},{"id":1618,"depth":221,"text":1619},{"id":1651,"depth":221,"text":1652},{"id":1688,"depth":221,"text":1689},"On a scanné double-slash.dev avec Is It Agent Ready (profil site de contenu, sans auth ni e-commerce). Voici ce que chaque check mesure, quoi mettre en place, et pourquoi ça compte.","md",{},"\u002Farticles\u002Fis-it-agent-ready","2026-09-17",{"title":18,"description":1754},"articles\u002Fis-it-agent-ready","vEXtSo0tRf9LlaF0fBiZV0kmIkfegJ4WSF833djwkdU",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":1763},"\u003Cpath fill=\"currentColor\" d=\"M4 21V9l8-6l8 6v12h-6v-7h-4v7z\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":1765},"\u003Cpath fill=\"currentColor\" d=\"m19.6 21l-6.3-6.3q-.75.6-1.725.95T9.5 16q-2.725 0-4.612-1.888T3 9.5t1.888-4.612T9.5 3t4.613 1.888T16 9.5q0 1.1-.35 2.075T14.7 13.3l6.3 6.3zM9.5 14q1.875 0 3.188-1.312T14 9.5t-1.312-3.187T9.5 5T6.313 6.313T5 9.5t1.313 3.188T9.5 14\"\u002F>",["Island",1767],{"key":1768,"result":1769},"Brand_bAcjTzQpW6OVpFK319jfMki97vH1GrZiqHmeI7Xg4o",{"head":1770},{},{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":1772},"\u003Cpath fill=\"currentColor\" d=\"M6 22q-.825 0-1.412-.587T4 20V10q0-.825.588-1.412T6 8h3v2H6v10h12V10h-3V8h3q.825 0 1.413.588T20 10v10q0 .825-.587 1.413T18 22zm5-6V4.825l-1.6 1.6L8 5l4-4l4 4l-1.4 1.425l-1.6-1.6V16z\"\u002F>",["Island",1774],{"key":1775,"result":1776},"AppImg_IyX8AyXnvzxMhkQHFSbpXBHOtGi2gizwCEtOpbCcVEk",{"head":1777},{},["Island",1779],{"key":1780,"result":1781},"ArticleDetails_yOduvJLo4q585gTxkZtkwKDAThRpmA0mb0TgdwyiM",{"head":1782},{"script":1783},[1784],{"key":1785,"tagPosition":1786,"tagPriority":1787,"innerHTML":1788},":Rq3LAwVg9E:","bodyClose","critical","document.querySelectorAll('[data-prehydrate-id*=\":Rq3LAwVg9E:\"]').forEach(e=>{let t=window._nuxtTimeNow||=Date.now(),n=(e,t)=>t>0?e[0].toUpperCase()+e.slice(1):e,r=e.getAttribute(`datetime`);if(!r)return;let i=new Date(r);if(Number.isNaN(i.getTime()))return;let a={};for(let t of e.getAttributeNames())if(t.startsWith(`data-`)){let r=t.slice(5).split(`-`).map(n).join(``);r===`relativeStyle`&&(r=`style`);let i=e.getAttribute(t);a[r]=i===`true`||i!==`false`&&i}if(a.relative){let n=(i.getTime()-t)\u002F1e3,r=[{unit:`second`,seconds:1,threshold:60},{unit:`minute`,seconds:60,threshold:60},{unit:`hour`,seconds:3600,threshold:24},{unit:`day`,seconds:86400,threshold:30},{unit:`month`,seconds:2592e3,threshold:12},{unit:`year`,seconds:31536e3,threshold:1\u002F0}],{unit:o,seconds:s}=r.find(({seconds:e,threshold:t})=>Math.abs(n\u002Fe)\u003Ct)||r[r.length-1],c=n\u002Fs;e.textContent=new Intl.RelativeTimeFormat(a.locale,a).format(Math.round(c),o)}else e.textContent=new Intl.DateTimeFormat(a.locale,a).format(i)})",1792753722427]