get_page_fix
Tool MCP get_page_fix : lire le dernier correctif d'une page. Points à corriger triés par gravité avec leur correction, blocs JSON-LD prêts à coller, liens internes à ajouter et ce qu'une IA comprend de la page.
Mis à jour le 2026-10-08
get_page_fix renvoie le dernier correctif d'une page, lancé avec run_page_fix. Une fois COMPLETED, c'est la liste des points à corriger sur la page : chaque problème trié par gravité avec sa correction, les blocs JSON-LD prêts à coller, les liens internes à ajouter, ce qui disparaît sans JavaScript et ce qu'une IA comprend de la page.
Quand l'utiliser
Interrogez-le juste après run_page_fix, avec la même pageUrl, jusqu'à ce que status vaille COMPLETED ou FAILED. La plupart des correctifs prennent moins d'une minute. Rappelez-le plus tard pour relire le dernier résultat d'une page sans lancer de nouveau correctif : c'est un tool en lecture, il ne change rien.
Input
| Champ | Type | Défaut | Description |
|---|---|---|---|
projectId |
string (CUID) | requis | Projet visé. |
pageUrl |
string (URL) | requis | URL de la page, la même que pour run_page_fix. Rapprochée de l'URL crawlée, comme dans run_page_fix. |
include.raw |
boolean | false |
Ajoute les lectures brutes : robots.txt par robot, codes HTTP, JSON-LD publié, liens entrants. |
Réponse
Pendant le correctif
{
"success": true,
"fixId": "cmg8k2x1p0004l70f9d3h2a1b",
"pageUrl": "https://example.com/services/seo-audit",
"status": "RUNNING",
"createdAt": "2026-10-08T09:12:04.000Z",
"completedAt": null
}
status passe par PENDING, puis RUNNING, puis COMPLETED ou FAILED. Un correctif FAILED porte une chaîne error : relancez run_page_fix. Un correctif COMPLETED produit par une version antérieure du tool ne porte qu'un message qui demande de le relancer.
Terminé
{
"success": true,
"fixId": "cmg8k2x1p0004l70f9d3h2a1b",
"pageUrl": "https://example.com/services/seo-audit",
"status": "COMPLETED",
"createdAt": "2026-10-08T09:12:04.000Z",
"completedAt": "2026-10-08T09:12:41.000Z",
"pageType": "SERVICE",
"understanding": {
"who": "Example, a technical SEO agency",
"what": "Technical SEO audits",
"forWhom": "B2B SaaS companies",
"where": null
},
"issues": [
{
"check": "robots-page-blocked",
"level": "BLOCKING",
"title": "AI robots blocked from this page by robots.txt",
"howToFix": "Find the Disallow rule that matches this path in robots.txt and remove it, or add an Allow rule for these robots.",
"details": { "bots": ["OAI-SearchBot", "ChatGPT-User"] }
},
{
"check": "jsonld-missing",
"level": "AI_IMPACT",
"title": "No structured data for this kind of page",
"howToFix": "Add the suggested JSON-LD block below to the page, inside the <head> or before </body>, then fill in the fields listed as missing.",
"details": { "type": "Service" }
},
{
"check": "ai-facts-missing",
"level": "AI_IMPACT",
"title": "Facts about your business an AI cannot find here",
"howToFix": "State these facts plainly on the page: in the text, a short list or a table. How you phrase them is up to you.",
"details": { "facts": [{ "dimension": "area", "quote": "remote audits for clients across Europe" }] }
},
{
"check": "ai-topics-missing",
"level": "AI_IMPACT",
"title": "What engines search for that the page does not cover",
"howToFix": "Give this information on the page. We do not suggest wording: only what is missing.",
"details": {
"editorial": false,
"topics": [{ "label": "prices", "queries": ["technical seo audit cost saas"] }]
}
},
{
"check": "not-in-sitemap",
"level": "SEO_HYGIENE",
"title": "Missing from the sitemap",
"howToFix": "Add the page to your XML sitemap (most CMS do it once the page is published and indexable).",
"details": null
}
],
"jsonLdToAdd": [
{
"type": "Service",
"code": "{\n \"@context\": \"https://schema.org\",\n \"@type\": \"Service\",\n \"name\": \"Technical SEO audit for B2B SaaS\",\n \"description\": \"A full technical SEO audit of your SaaS site, delivered in two weeks.\",\n \"provider\": {\n \"@type\": \"Organization\",\n \"name\": \"Example\",\n \"url\": \"https://example.com\"\n },\n \"areaServed\": \"…\"\n}",
"toComplete": ["areaServed"]
},
{
"type": "BreadcrumbList",
"code": "{\n \"@context\": \"https://schema.org\",\n \"@type\": \"BreadcrumbList\",\n \"itemListElement\": [\n {\n \"@type\": \"ListItem\",\n \"position\": 1,\n \"name\": \"Example\",\n \"item\": \"https://example.com/\"\n },\n {\n \"@type\": \"ListItem\",\n \"position\": 2,\n \"name\": \"Technical SEO audit for B2B SaaS\",\n \"item\": \"https://example.com/services/seo-audit\"\n }\n ]\n}",
"toComplete": []
}
],
"linksToAdd": [
{ "from": "https://example.com/blog/technical-seo-checklist", "anchor": "Technical SEO audit for B2B SaaS" }
],
"missingWithoutJs": { "headings": ["Pricing"], "prices": ["€1,200"], "jsonLdTypes": [] }
}
Champs d'un correctif terminé :
pageType: le genre de page (HOME,ARTICLE,PRODUCT,SERVICE,CATEGORY,LOCAL,HELP,UTILITY,OTHER). Il décide du type JSON-LD attendu et de la vérification de fraîcheur.understanding: ce qu'une IA comprend de la page seule. Chaque champ vautnullquand la page ne le dit pas.nullen entier pour les pages utilitaires.issues: triés parlevel, le plus grave d'abord :BLOCKING(les IA ne peuvent ni lire ni indexer la page),AI_IMPACT,CONSISTENCY,SEO_HYGIENE(Google seulement).checkest un code machine stable,titleethowToFixsont en anglais,detailsporte les faits du problème (robots bloqués, champs manquants, URL en doublon, recherches) ounull. Sur un problème de title ou de meta description (title-*,meta-*),details.suggestionpropose une nouvelle balise prête à coller, dans la langue de la page et à la bonne longueur, tirée de ce que la page dit déjà.jsonLdToAdd: blocs JSON-LD prêts à coller.codeest le bloc complet. « … » marque une valeur que ni la page ni le projet ne donnent : les champs concernés sont listés danstoCompleteet doivent être remplis à la main avant publication.linksToAdd: pages proches du site qui ne pointent pas encore vers celle-ci, avec l'ancre à utiliser. Vide pour la page d'accueil.missingWithoutJs: ce qu'un visiteur voit mais qu'un robot lisant le HTML brut ne voit pas : titres, prix, types JSON-LD.nullquand la page n'a pas pu être rendue.googleSearch(à tout statut) : la page dans la recherche Google sur les 28 derniers jours, depuis la Search Console.clicks,impressions,position,previousClicks(les 28 jours d'avant) etclickShare(% des clics Google du site), plus les signaux :push(positions 4 à 20 avec du volume, ou un taux de clic très en dessous de sa position),declining(clics en baisse de 30 % ou plus),protect(la page rapporte du trafic : la corriger, jamais la refondre) etcannibalized(requêtes hors marque où d'autres pages du site se partagent les impressions,{ query, urls }).nullsans Search Console connectée ou sans données pour la page.verification:null, sauf si ce correctif en revérifie un précédent. Mentionable revérifie après chaque crawl du site tout correctif pas encore appliqué en entier :
{
"verification": {
"applied": "PARTIAL",
"fixedPoints": ["title-long", "jsonld-missing", "link:https://example.com/blog/technical-seo-checklist"],
"totalPoints": 5
}
}
fixedPoints liste les points du correctif précédent corrigés depuis : un code check, ou link: suivi de la page d'où un lien était suggéré. applied vaut FULL (tout est corrigé), PARTIAL ou NONE. Les points corrigés sont consignés seuls au journal d'actions : inutile d'appeler create_action_log pour eux.
effect(tous les statuts) :nulltant que la page n'a pas été corrigée (cochée « Faite » au plan, ou correctif vu appliqué, même en partie, à un recrawl). Ensuite, les réponses des prompts rattachés à la page, 4 semaines avant le correctif contre les semaines écoulées depuis (jusqu'à 4), comparées aux autres prompts du projet sur les mêmes dates. Citations et mentions bougent beaucoup d'un mois à l'autre d'elles-mêmes :effectest l'écart de la page moins celui des autres prompts.
{
"effect": {
"fixedAt": "2026-09-02T00:00:00.000Z",
"daysSinceFix": 28,
"windowDays": 28,
"scans": { "before": 28, "after": 28 },
"ready": true,
"prompts": 4,
"otherPrompts": 31,
"mentionRate": { "before": 18.5, "after": 41.2, "change": 22.7, "others": 3.1, "effect": 19.6 },
"pageCitationRate": { "before": 6.0, "after": 19.4, "change": 13.4, "others": 0.8, "effect": 12.6 },
"byEngine": [
{
"llm": "PERPLEXITY",
"mentionRate": { "before": 25.0, "after": 60.7, "change": 35.7, "others": 2.0, "effect": 33.7 },
"pageCitationRate": { "before": 10.7, "after": 39.3, "change": 28.6, "others": 1.1, "effect": 27.5 },
"usualDelayDays": [1, 7]
}
],
"googleSearch": { "days": 26, "before": { "impressions": 1840, "clicks": 52 }, "after": { "impressions": 2410, "clicks": 71 } }
}
}
mentionRate est la part des réponses qui nomment la marque, pageCitationRate la part qui cite cette page précise, en % (0 à 100). change est l'écart de la page en points, others celui des autres prompts (null s'il n'y en a pas), effect = change − others. after, change, others et effect restent null tant que le projet n'a pas été scanné au moins 3 jours de chaque côté du correctif (ready: false, décompte dans scans) : trop tôt pour lire quoi que ce soit. windowDays est la fenêtre de mesure de chaque côté : 28 jours, plus quand les scans sont espacés (45 jours pour un scan toutes les deux semaines, 90 pour un scan mensuel). prompts: 0 : aucun prompt n'est rattaché à la page. usualDelayDays est le délai habituel du moteur pour prendre en compte un changement (null s'il est inconnu) : Perplexity en quelques jours, ChatGPT en 1 à 3 semaines, les AI Overviews de Google en 4 à 8 semaines. googleSearch compare les impressions et clics Search Console sur autant de jours avant qu'après, null sans Search Console ou sous 7 jours de données.
Avec include.raw: true, un objet raw s'ajoute :
{
"raw": {
"access": {
"robots": [
{ "bot": "OAI-SearchBot", "allowed": false },
{ "bot": "PerplexityBot", "allowed": true }
],
"browserStatus": 200,
"botStatus": 200,
"xRobotsTag": null
},
"publishedJsonLd": [{ "@type": "Organization", "name": "Example" }],
"inboundLinks": [
{ "url": "https://example.com/services", "anchor": "SEO audit", "position": "Content" }
]
}
}
botStatus est la réponse de la page à une requête faite en robot de recherche IA. Un 403 ou un 503 à cet endroit alors que browserStatus vaut 200 désigne un pare-feu.
Erreurs
error |
Signification |
|---|---|
fix_not_found |
Aucun correctif n'existe encore pour cette page. Lancez-en un avec run_page_fix. |
Les erreurs d'accès sont levées comme sur tous les autres tools : Project not found quand le projet n'est pas dans votre workspace ou votre périmètre de membre, Project not in API key scope quand la clé est restreinte à d'autres projets.
Conseils et patterns
- Corrigez dans l'ordre. Un problème
BLOCKINGrend inutile tout ce qui suit : une IA qui ne peut pas lire la page ne verra pas ses données structurées. - Remplissez les « … » d'abord. Ne publiez jamais un bloc qui garde une valeur à compléter. Demandez à l'utilisateur les valeurs listées dans
toComplete. - Des faits, pas de la rédaction.
ai-facts-missingetai-topics-missingdisent ce qui manque, jamais comment le formuler. Sur une page business, donnez l'information simplement ; sur une page éditoriale, traitez chaque sujet dans sa propre section. - Gardez la réponse par défaut. N'ajoutez
include.rawque pour diagnostiquer un problème d'accès : c'est la partie la plus lourde du résultat.
Tools liés
- run_page_fix : lancer un correctif.
- get_recommendation : le plan d'un prompt et ses pages à corriger.
- list_ai_crawler_pages : les pages que les robots IA lisent sans les citer.
- create_action_log : logger les autres changements. Les corrections détectées par une vérification sont consignées seules.