{
 "titre": "Relevé de conformité du groupe Tero",
 "date": "2026-10-21",
 "genere_le": "2026-10-21 18:36 UTC",
 "sources": {
  "raw": "aeo-2026-10-21/fondations/raw/<domaine>.json et <domaine>.home.html (24 domaines)",
  "tableaux": [
   "fondations/TABLEAU-DOMAINES.md",
   "fondations/PLAN-FONDATIONS.md",
   "citations/TABLEAU.md",
   "agentique/TABLEAU-TACHES.md"
  ],
  "script_releve": "fondations/scripts/audit_domain.py",
  "script_build": "assets/conformite/build.py"
 },
 "chiffres_du_jour": [
  {
   "id": "web",
   "valeur": 0,
   "total": 25,
   "libelle": "requête web où un domaine Tero entre dans le top 10",
   "source": "citations/TABLEAU.md › synthèse chiffrée"
  },
  {
   "id": "claude",
   "valeur": 6,
   "total": 23,
   "libelle": "requêtes où Claude nomme Tero spontanément",
   "source": "citations/TABLEAU.md › synthèse chiffrée"
  },
  {
   "id": "agents",
   "valeur": 0,
   "total": 13,
   "libelle": "tâches qu'un agent navigateur peut mener de bout en bout",
   "source": "agentique/TABLEAU-TACHES.md › faisabilité = 3"
  }
 ],
 "formule": {
  "score_domaine": "score = arrondi(100 × critères réussis ÷ critères mesurés) ; un critère « non relevé » sort du dénominateur ; 13 critères, poids égaux.",
  "score_groupe": "score d'un pilier = arrondi(100 × somme des réussis ÷ somme des mesurés) sur les domaines du pilier (pas une moyenne de scores).",
  "seuils": {
   "fraicheur_jours": 90,
   "rendu_sans_js_mots_min": 100,
   "faits_chiffres_min": 2
  },
  "verdicts": [
   "réussi",
   "échoué",
   "non relevé"
  ]
 },
 "criteres": [
  {
   "id": "robots_ia",
   "label": "Robots IA autorisés",
   "chantiers": [
    1,
    2
   ],
   "regle": "13-seo-et-geo-regle",
   "definition": "robots.txt valide sans interdiction des bots IA (GPTBot, ClaudeBot, PerplexityBot) et accueil servi en 200 à ces User-Agents. Un 403 compte comme échec, avec la réserve Cloudflare (IP non vérifiée)."
  },
  {
   "id": "llms_txt",
   "label": "llms.txt présent",
   "chantiers": [
    4
   ],
   "regle": "13-seo-et-geo-regle",
   "definition": "/llms.txt répond 200 avec un contenu texte non vide."
  },
  {
   "id": "sitemap_valide",
   "label": "Sitemap valide",
   "chantiers": [
    2,
    10
   ],
   "regle": "13-seo-et-geo-regle",
   "definition": "un sitemap lisible avec au moins une URL, et chaque sitemap déclaré dans robots.txt répond 200."
  },
  {
   "id": "jsonld_metier",
   "label": "JSON-LD métier",
   "chantiers": [
    5
   ],
   "regle": "13-seo-et-geo-regle",
   "definition": "l'accueil porte au moins un type schema.org métier (LocalBusiness, Hotel, Restaurant, EventVenue, SportsEvent, FAQPage…), pas seulement Organization/WebPage/Article."
  },
  {
   "id": "organization",
   "label": "Organization correcte",
   "chantiers": [
    5
   ],
   "regle": "13-seo-et-geo-regle",
   "definition": "un nœud Organization existe, son name correspond à la marque ou au domaine, sa description n'est pas le texte par défaut de WordPress."
  },
  {
   "id": "title_h1",
   "label": "Title et H1",
   "chantiers": [
    6
   ],
   "regle": "6-structure-et-composition",
   "definition": "title non vide et exactement un H1 non vide."
  },
  {
   "id": "hreflang",
   "label": "hreflang",
   "chantiers": [
    9
   ],
   "regle": "14-langues-fr-nl-en-regle",
   "definition": "au moins une balise hreflang sur l'accueil."
  },
  {
   "id": "reponse_directe",
   "label": "Réponse directe",
   "chantiers": [
    6,
    8
   ],
   "regle": "13-seo-et-geo-regle",
   "definition": "lecture humaine du relevé (qui / quoi / où / combien sous le H1) : « Oui » réussit ; « Non » et « Partiel » échouent ; « n/a » ou « à vérifier » = non relevé."
  },
  {
   "id": "faits_chiffres",
   "label": "Faits chiffrés",
   "chantiers": [
    7
   ],
   "regle": "12-contenu-et-sources-regle",
   "definition": "au moins 2 des 5 faits sur l'accueil : adresse (lecture du tableau), téléphone, capacités, horaires, prix (détections du JSON brut)."
  },
  {
   "id": "fraicheur",
   "label": "Fraîcheur",
   "chantiers": [
    11
   ],
   "regle": "12-contenu-et-sources-regle",
   "definition": "lastmod du sitemap à moins de 90 jours du relevé, aucune date visible passée sans date future, et aucune année de copyright antérieure à l'année du relevé."
  },
  {
   "id": "erreurs",
   "label": "Sans erreur",
   "chantiers": [
    10
   ],
   "regle": "16-qa-verification-et-deploiement-regle",
   "definition": "accueil en 200, TLS valide, pas de ressource http:// dans une page https, sitemap déclaré joignable, aucun lien interne testé en 404."
  },
  {
   "id": "rendu_sans_js",
   "label": "Rendu sans JavaScript",
   "chantiers": [
    3
   ],
   "regle": "11-performance-regle",
   "definition": "au moins 100 mots de texte dans le HTML livré sans exécuter JavaScript."
  },
  {
   "id": "action_declaree",
   "label": "Action déclarée",
   "chantiers": [
    12
   ],
   "regle": "13-seo-et-geo-regle",
   "definition": "une action lisible par un agent : potentialAction Reserve/Register/Buy/Order dans le JSON-LD, data-mcp-*, agent-permissions.json ou ai-plugin.json."
  }
 ],
 "piliers": [
  {
   "id": "groupe",
   "label": "Tero Group",
   "domaines": [
    "tero.be",
    "tero.lu"
   ],
   "reussis": 9,
   "mesures": 25,
   "score": 36
  },
  {
   "id": "hospitality",
   "label": "Tero Hospitality",
   "domaines": [
    "bistro17.lu",
    "bookknokkeoutzoute.tero.be",
    "knokkeout.com",
    "malleposte.be",
    "riverwoodsbeachclub.be",
    "terblock.be",
    "teroir.be",
    "teroirdemagerotte.be"
   ],
   "reussis": 54,
   "mesures": 103,
   "score": 52
  },
  {
   "id": "leisure",
   "label": "Tero Leisure",
   "domaines": [
    "garisart.be",
    "teropadelclub.be",
    "terostudio.be"
   ],
   "reussis": 17,
   "mesures": 39,
   "score": 44
  },
  {
   "id": "sport-events",
   "label": "Tero Sport Events",
   "domaines": [
    "12kmanderlecht.be",
    "batirun.be",
    "bouwrun.be",
    "brusselspremierpadel.be",
    "buildandrun.be",
    "immorun.be",
    "immorun.lu",
    "impactrun.be",
    "registration.sportero.be",
    "terotrail.be"
   ],
   "reussis": 59,
   "mesures": 130,
   "score": 45
  },
  {
   "id": "hors-perimetre",
   "label": "Hors périmètre",
   "domaines": [
    "tero.group"
   ],
   "reussis": 1,
   "mesures": 12,
   "score": 8
  }
 ],
 "piliers_libelles": {
  "groupe": "Tero Group",
  "hospitality": "Tero Hospitality",
  "leisure": "Tero Leisure",
  "sport-events": "Tero Sport Events",
  "hors-perimetre": "Hors périmètre"
 },
 "total": {
  "domaines": 24,
  "reussis": 140,
  "mesures": 309,
  "score": 45,
  "par_critere": {
   "robots_ia": {
    "réussi": 21,
    "échoué": 3,
    "non relevé": 0
   },
   "llms_txt": {
    "réussi": 10,
    "échoué": 14,
    "non relevé": 0
   },
   "sitemap_valide": {
    "réussi": 19,
    "échoué": 5,
    "non relevé": 0
   },
   "jsonld_metier": {
    "réussi": 5,
    "échoué": 19,
    "non relevé": 0
   },
   "organization": {
    "réussi": 9,
    "échoué": 15,
    "non relevé": 0
   },
   "title_h1": {
    "réussi": 15,
    "échoué": 9,
    "non relevé": 0
   },
   "hreflang": {
    "réussi": 8,
    "échoué": 16,
    "non relevé": 0
   },
   "reponse_directe": {
    "réussi": 3,
    "échoué": 18,
    "non relevé": 3
   },
   "faits_chiffres": {
    "réussi": 5,
    "échoué": 19,
    "non relevé": 0
   },
   "fraicheur": {
    "réussi": 11,
    "échoué": 13,
    "non relevé": 0
   },
   "erreurs": {
    "réussi": 15,
    "échoué": 9,
    "non relevé": 0
   },
   "rendu_sans_js": {
    "réussi": 19,
    "échoué": 5,
    "non relevé": 0
   },
   "action_declaree": {
    "réussi": 0,
    "échoué": 24,
    "non relevé": 0
   }
  }
 },
 "domaines": [
  {
   "domaine": "tero.be",
   "marque": "Tero Group (maison mere, 17 lieux, traiteur, team building)",
   "pilier_releve": "Groupe",
   "pilier": "groupe",
   "plateforme": "WordPress 7.1.3, WordPress, Elementor, WPML, WP Rocket, Divi ; Cloudflare",
   "url_effective": "https://tero.be/fr/",
   "releve_utc": "2026-10-21 13:53 UTC",
   "accueil": {
    "code": 200,
    "poids": "265 Ko",
    "temps_s": 2.46
   },
   "page_cle": "tero.be/fr/lieux/salles-de-reception/house17/ -> 200 ; JSON-LD: absent ; adresse oui, tel absent, capacites 8, horaires absent, prix absent",
   "criteres": {
    "robots_ia": {
     "verdict": "échoué",
     "valeur": "wildcard : tout ouvert ; GPTBot : autorise ClaudeBot : autorise PerplexityBot : non cite ; UA IA simulés → GPTBot 403, ClaudeBot 403, PerplexityBot 403",
     "source": "raw/tero.be.json › robots, ua_tests",
     "detail": "403 pour GPTBot, ClaudeBot, PerplexityBot — challenge Cloudflare : l'IP n'étant pas celle du bot, ce n'est pas une preuve définitive, mais WebFetch (fetcher Anthropic) a aussi reçu 403 sur tero.be"
    },
    "llms_txt": {
     "verdict": "réussi",
     "valeur": "présent (75 Ko)",
     "source": "raw/tero.be.json › discovery"
    },
    "sitemap_valide": {
     "verdict": "échoué",
     "valeur": "296 URL, lastmod max 2026-10-20 ; déclaré dans robots.txt → https://tero.be/sitemap.xml (404)",
     "source": "raw/tero.be.json › sitemap, robots.sitemaps_declares"
    },
    "jsonld_metier": {
     "verdict": "échoué",
     "valeur": "génériques seulement : Article, ImageObject, Organization, Person, SearchAction, WebPage, WebSite",
     "source": "raw/tero.be.json › accueil.jsonld_types"
    },
    "organization": {
     "verdict": "réussi",
     "valeur": "name « Tero » ; description absente ; url https://tero.be/fr",
     "source": "raw/tero.be.home.html › script ld+json"
    },
    "title_h1": {
     "verdict": "échoué",
     "valeur": "title « Événements corporate | Location de lieux | Traiteur | Tero » ; h1 ×2 : « live. share. reconnect. » / « Des événements à la hauteur de vos ambitions . »",
     "source": "raw/tero.be.json › accueil.title, accueil.h1"
    },
    "hreflang": {
     "verdict": "réussi",
     "valeur": "en, fr, nl, x-default",
     "source": "raw/tero.be.json › accueil.hreflang"
    },
    "reponse_directe": {
     "verdict": "échoué",
     "valeur": "Non : H1 = slogan « live. share. reconnect. » ; description meta correcte mais aucun bloc qui/quoi/ou/combien",
     "source": "fondations/TABLEAU-DOMAINES.md"
    },
    "faits_chiffres": {
     "verdict": "échoué",
     "valeur": "adresse absent · téléphone absent · capacités absent · horaires absent · prix absent → 0/5",
     "source": "raw/tero.be.json › accueil.tel, capacites_detectees, horaires_detectes, prix_detectes ; adresse : fondations/TABLEAU-DOMAINES.md"
    },
    "fraicheur": {
     "verdict": "échoué",
     "valeur": "sitemap 2026-10-20 ; années citées : 2025",
     "source": "raw/tero.be.json › sitemap.lastmod_max, accueil.dates_visibles, accueil.annees_citees",
     "detail": "année la plus récente citée : 2025"
    },
    "erreurs": {
     "verdict": "échoué",
     "valeur": "ressources http:// dans une page https ; robots.txt déclare https://tero.be/sitemap.xml → 404",
     "source": "raw/tero.be.json › home, https_vers_http, liens_casses, sitemap.tests"
    },
    "rendu_sans_js": {
     "verdict": "réussi",
     "valeur": "987 mots dans le HTML livré (1381 tokens)",
     "source": "raw/tero.be.json › accueil.texte_mots"
    },
    "action_declaree": {
     "verdict": "échoué",
     "valeur": "aucune action déclarée (potentialAction : SearchAction seulement) ; agent-permissions.json et ai-plugin.json : 404, 404",
     "source": "raw/tero.be.home.html ; raw/tero.be.json › discovery",
     "detail": "canal humain relevé : Devis : formulaire /fr/obtenir-un-devis/ (Zapier/Efficy) ; pas de reservation directe ; tel absent du HTML"
    }
   },
   "reussis": 4,
   "mesures": 13,
   "non_releves": 0,
   "score": 31
  },
  {
   "domaine": "tero.lu",
   "marque": "Alias de tero.be (meme serveur) - certificat TLS invalide",
   "pilier_releve": "Groupe",
   "pilier": "groupe",
   "plateforme": "WordPress 7.1.3, WordPress, Elementor, WPML, Divi, Rank Math",
   "url_effective": "https://tero.lu/",
   "releve_utc": "2026-10-21 14:10 UTC",
   "accueil": {
    "code": 0,
    "poids": "0 Ko",
    "temps_s": 0.12
   },
   "page_cle": "non releve",
   "criteres": {
    "robots_ia": {
     "verdict": "réussi",
     "valeur": "wildcard : tout ouvert ; GPTBot : autorise ClaudeBot : autorise PerplexityBot : non cite ; UA IA simulés → GPTBot 200, ClaudeBot 200, PerplexityBot 200",
     "source": "raw/tero.lu.json › robots, ua_tests"
    },
    "llms_txt": {
     "verdict": "réussi",
     "valeur": "présent (75 Ko)",
     "source": "raw/tero.lu.json › discovery"
    },
    "sitemap_valide": {
     "verdict": "échoué",
     "valeur": "296 URL, lastmod max 2026-10-20 ; déclaré dans robots.txt → https://tero.be/sitemap.xml (404)",
     "source": "raw/tero.lu.json › sitemap, robots.sitemaps_declares"
    },
    "jsonld_metier": {
     "verdict": "échoué",
     "valeur": "génériques seulement : Article, ImageObject, Organization, Person, SearchAction, WebPage, WebSite",
     "source": "raw/tero.lu.json › accueil.jsonld_types"
    },
    "organization": {
     "verdict": "réussi",
     "valeur": "name « Tero » ; description absente ; url https://tero.be/fr",
     "source": "raw/tero.lu.home.html › script ld+json"
    },
    "title_h1": {
     "verdict": "échoué",
     "valeur": "title « Événements corporate | Location de lieux | Traiteur | Tero » ; h1 ×2 : « live. share. reconnect. » / « Des événements à la hauteur de vos ambitions . »",
     "source": "raw/tero.lu.json › accueil.title, accueil.h1"
    },
    "hreflang": {
     "verdict": "réussi",
     "valeur": "en, fr, nl, x-default",
     "source": "raw/tero.lu.json › accueil.hreflang"
    },
    "reponse_directe": {
     "verdict": "non relevé",
     "valeur": "n/a (HTTPS casse)",
     "source": "fondations/TABLEAU-DOMAINES.md"
    },
    "faits_chiffres": {
     "verdict": "échoué",
     "valeur": "adresse absent · téléphone absent · capacités absent · horaires absent · prix absent → 0/5",
     "source": "raw/tero.lu.json › accueil.tel, capacites_detectees, horaires_detectes, prix_detectes ; adresse : fondations/TABLEAU-DOMAINES.md"
    },
    "fraicheur": {
     "verdict": "échoué",
     "valeur": "sitemap 2026-10-20 ; années citées : 2025",
     "source": "raw/tero.lu.json › sitemap.lastmod_max, accueil.dates_visibles, accueil.annees_citees",
     "detail": "année la plus récente citée : 2025"
    },
    "erreurs": {
     "verdict": "échoué",
     "valeur": "accueil code 0 ; curl: (60) schannel: SNI or certificate check failed: SEC_E_WRONG_PRINCIPAL (0x80090322) - ; ressources http:// dans une page https ; robots.txt déclare https://tero.be/sitemap.xml → 404",
     "source": "raw/tero.lu.json › home, https_vers_http, liens_casses, sitemap.tests"
    },
    "rendu_sans_js": {
     "verdict": "réussi",
     "valeur": "987 mots dans le HTML livré (1381 tokens)",
     "source": "raw/tero.lu.json › accueil.texte_mots"
    },
    "action_declaree": {
     "verdict": "échoué",
     "valeur": "aucune action déclarée (potentialAction : SearchAction seulement) ; agent-permissions.json et ai-plugin.json : 404, 404",
     "source": "raw/tero.lu.home.html ; raw/tero.lu.json › discovery",
     "detail": "canal humain relevé : n/a"
    }
   },
   "reussis": 5,
   "mesures": 12,
   "non_releves": 1,
   "score": 42
  },
  {
   "domaine": "bistro17.lu",
   "marque": "Bistro 17 / Tero House17, Luxembourg",
   "pilier_releve": "Hospitality",
   "pilier": "hospitality",
   "plateforme": "WordPress 7.1.3, WordPress, Elementor, WPML, Divi, Resa resto",
   "url_effective": "https://bistro17.lu/",
   "releve_utc": "2026-10-21 14:06 UTC",
   "accueil": {
    "code": 200,
    "poids": "90 Ko",
    "temps_s": 0.44
   },
   "page_cle": "bistro17.lu/ -> 200 ; JSON-LD: absent ; adresse oui, tel oui, capacites 0, horaires absent, prix absent",
   "criteres": {
    "robots_ia": {
     "verdict": "réussi",
     "valeur": "wildcard : tout ouvert ; GPTBot : non cite ClaudeBot : non cite PerplexityBot : non cite ; UA IA simulés → GPTBot 200, ClaudeBot 200, PerplexityBot 200",
     "source": "raw/bistro17.lu.json › robots, ua_tests"
    },
    "llms_txt": {
     "verdict": "échoué",
     "valeur": "absent (404)",
     "source": "raw/bistro17.lu.json › discovery"
    },
    "sitemap_valide": {
     "verdict": "réussi",
     "valeur": "4 URL, lastmod max 2026-09-16",
     "source": "raw/bistro17.lu.json › sitemap, robots.sitemaps_declares"
    },
    "jsonld_metier": {
     "verdict": "échoué",
     "valeur": "aucun JSON-LD",
     "source": "raw/bistro17.lu.json › accueil.jsonld_types"
    },
    "organization": {
     "verdict": "échoué",
     "valeur": "aucun nœud Organization",
     "source": "raw/bistro17.lu.home.html"
    },
    "title_h1": {
     "verdict": "réussi",
     "valeur": "title « Bistro 17 » ; h1 ×1 : « Bistro 17 · Restaurant avec une cuisine de saison, au cœur de Luxembou »",
     "source": "raw/bistro17.lu.json › accueil.title, accueil.h1"
    },
    "hreflang": {
     "verdict": "réussi",
     "valeur": "en, fr",
     "source": "raw/bistro17.lu.json › accueil.hreflang"
    },
    "reponse_directe": {
     "verdict": "réussi",
     "valeur": "Oui : H1 « Restaurant avec une cuisine de saison, au coeur de Luxembourg », adresse, tel, horaires",
     "source": "fondations/TABLEAU-DOMAINES.md"
    },
    "faits_chiffres": {
     "verdict": "réussi",
     "valeur": "adresse oui · téléphone oui · capacités absent · horaires absent · prix absent → 2/5",
     "source": "raw/bistro17.lu.json › accueil.tel, capacites_detectees, horaires_detectes, prix_detectes ; adresse : fondations/TABLEAU-DOMAINES.md"
    },
    "fraicheur": {
     "verdict": "réussi",
     "valeur": "sitemap 2026-09-16 ; années citées : 2026",
     "source": "raw/bistro17.lu.json › sitemap.lastmod_max, accueil.dates_visibles, accueil.annees_citees"
    },
    "erreurs": {
     "verdict": "réussi",
     "valeur": "aucune",
     "source": "raw/bistro17.lu.json › home, https_vers_http, liens_casses, sitemap.tests"
    },
    "rendu_sans_js": {
     "verdict": "réussi",
     "valeur": "670 mots dans le HTML livré (937 tokens)",
     "source": "raw/bistro17.lu.json › accueil.texte_mots"
    },
    "action_declaree": {
     "verdict": "échoué",
     "valeur": "aucune action déclarée ; agent-permissions.json et ai-plugin.json : 404, 404",
     "source": "raw/bistro17.lu.home.html ; raw/bistro17.lu.json › discovery",
     "detail": "canal humain relevé : Reservation Zenchef (rid 370876)"
    }
   },
   "reussis": 9,
   "mesures": 13,
   "non_releves": 0,
   "score": 69
  },
  {
   "domaine": "bookknokkeoutzoute.tero.be",
   "marque": "Widget de reservation RestomaxBook (Knokke Out)",
   "pilier_releve": "Hospitality",
   "pilier": "hospitality",
   "plateforme": "nginx/1.31.6",
   "url_effective": "https://bookknokkeoutzoute.tero.be/",
   "releve_utc": "2026-10-21 14:03 UTC",
   "accueil": {
    "code": 200,
    "poids": "1 Ko",
    "temps_s": 0.16
   },
   "page_cle": "bookknokkeoutzoute.tero.be/ -> 200 ; JSON-LD: absent ; adresse absent, tel absent, capacites 0, horaires absent, prix absent",
   "criteres": {
    "robots_ia": {
     "verdict": "réussi",
     "valeur": "robots.txt absent ou illisible (aucune interdiction) ; UA IA simulés → GPTBot 200, ClaudeBot 200, PerplexityBot 200",
     "source": "raw/bookknokkeoutzoute.tero.be.json › robots, ua_tests"
    },
    "llms_txt": {
     "verdict": "échoué",
     "valeur": "absent (200)",
     "source": "raw/bookknokkeoutzoute.tero.be.json › discovery"
    },
    "sitemap_valide": {
     "verdict": "échoué",
     "valeur": "absent ou illisible",
     "source": "raw/bookknokkeoutzoute.tero.be.json › sitemap, robots.sitemaps_declares"
    },
    "jsonld_metier": {
     "verdict": "échoué",
     "valeur": "aucun JSON-LD",
     "source": "raw/bookknokkeoutzoute.tero.be.json › accueil.jsonld_types"
    },
    "organization": {
     "verdict": "échoué",
     "valeur": "aucun nœud Organization",
     "source": "raw/bookknokkeoutzoute.tero.be.home.html"
    },
    "title_h1": {
     "verdict": "échoué",
     "valeur": "title « RestomaxBook » ; h1 absent",
     "source": "raw/bookknokkeoutzoute.tero.be.json › accueil.title, accueil.h1"
    },
    "hreflang": {
     "verdict": "échoué",
     "valeur": "absent (lang=en)",
     "source": "raw/bookknokkeoutzoute.tero.be.json › accueil.hreflang"
    },
    "reponse_directe": {
     "verdict": "échoué",
     "valeur": "Non : coquille JS vide (746 octets)",
     "source": "fondations/TABLEAU-DOMAINES.md"
    },
    "faits_chiffres": {
     "verdict": "échoué",
     "valeur": "adresse absent · téléphone absent · capacités absent · horaires absent · prix absent → 0/5",
     "source": "raw/bookknokkeoutzoute.tero.be.json › accueil.tel, capacites_detectees, horaires_detectes, prix_detectes ; adresse : fondations/TABLEAU-DOMAINES.md"
    },
    "fraicheur": {
     "verdict": "échoué",
     "valeur": "sitemap sans lastmod",
     "source": "raw/bookknokkeoutzoute.tero.be.json › sitemap.lastmod_max, accueil.dates_visibles, accueil.annees_citees",
     "detail": "aucun lastmod dans le sitemap"
    },
    "erreurs": {
     "verdict": "réussi",
     "valeur": "aucune",
     "source": "raw/bookknokkeoutzoute.tero.be.json › home, https_vers_http, liens_casses, sitemap.tests"
    },
    "rendu_sans_js": {
     "verdict": "échoué",
     "valeur": "1 mots dans le HTML livré (1 tokens)",
     "source": "raw/bookknokkeoutzoute.tero.be.json › accueil.texte_mots"
    },
    "action_declaree": {
     "verdict": "échoué",
     "valeur": "aucune action déclarée ; agent-permissions.json et ai-plugin.json : 200, 200",
     "source": "raw/bookknokkeoutzoute.tero.be.home.html ; raw/bookknokkeoutzoute.tero.be.json › discovery",
     "detail": "canal humain relevé : Reservation (JS uniquement)"
    }
   },
   "reussis": 2,
   "mesures": 13,
   "non_releves": 0,
   "score": 15
  },
  {
   "domaine": "knokkeout.com",
   "marque": "Knokke Out Zoute (restaurant, club, events)",
   "pilier_releve": "Hospitality",
   "pilier": "hospitality",
   "plateforme": "WordPress 7.1.3, WordPress, Elementor, WPML, React, Divi",
   "url_effective": "https://knokkeout.com/",
   "releve_utc": "2026-10-21 14:03 UTC",
   "accueil": {
    "code": 200,
    "poids": "145 Ko",
    "temps_s": 1.95
   },
   "page_cle": "knokkeout.com/contact/ -> 200 ; JSON-LD: Organization (+5 techniques) ; adresse oui, tel absent, capacites 0, horaires absent, prix absent",
   "criteres": {
    "robots_ia": {
     "verdict": "réussi",
     "valeur": "wildcard : tout ouvert ; GPTBot : non cite ClaudeBot : non cite PerplexityBot : non cite ; UA IA simulés → GPTBot 200, ClaudeBot 200, PerplexityBot 200",
     "source": "raw/knokkeout.com.json › robots, ua_tests"
    },
    "llms_txt": {
     "verdict": "échoué",
     "valeur": "absent (404)",
     "source": "raw/knokkeout.com.json › discovery"
    },
    "sitemap_valide": {
     "verdict": "réussi",
     "valeur": "24 URL, lastmod max 2026-10-09",
     "source": "raw/knokkeout.com.json › sitemap, robots.sitemaps_declares"
    },
    "jsonld_metier": {
     "verdict": "réussi",
     "valeur": "FAQPage",
     "source": "raw/knokkeout.com.json › accueil.jsonld_types"
    },
    "organization": {
     "verdict": "réussi",
     "valeur": "name « Knokke Out Zoute » ; description absente ; url https://knokkeout.com",
     "source": "raw/knokkeout.com.home.html › script ld+json"
    },
    "title_h1": {
     "verdict": "réussi",
     "valeur": "title « Knokke Out Zoute | Restaurant in Knokke & club » ; h1 ×1 : « Knokke Out Zoute — restaurant & nightclub · Knokke-Heist »",
     "source": "raw/knokkeout.com.json › accueil.title, accueil.h1"
    },
    "hreflang": {
     "verdict": "réussi",
     "valeur": "en, en-be, fr, fr-be, nl, nl-be, x-default",
     "source": "raw/knokkeout.com.json › accueil.hreflang"
    },
    "reponse_directe": {
     "verdict": "réussi",
     "valeur": "Oui (meilleur du groupe) : H1 « restaurant & nightclub · Knokke-Heist », adresse, dates, FAQPage",
     "source": "fondations/TABLEAU-DOMAINES.md"
    },
    "faits_chiffres": {
     "verdict": "échoué",
     "valeur": "adresse oui · téléphone absent · capacités absent · horaires absent · prix absent → 1/5",
     "source": "raw/knokkeout.com.json › accueil.tel, capacites_detectees, horaires_detectes, prix_detectes ; adresse : fondations/TABLEAU-DOMAINES.md"
    },
    "fraicheur": {
     "verdict": "réussi",
     "valeur": "sitemap 2026-10-09 ; années citées : 2026",
     "source": "raw/knokkeout.com.json › sitemap.lastmod_max, accueil.dates_visibles, accueil.annees_citees"
    },
    "erreurs": {
     "verdict": "échoué",
     "valeur": "ressources http:// dans une page https",
     "source": "raw/knokkeout.com.json › home, https_vers_http, liens_casses, sitemap.tests"
    },
    "rendu_sans_js": {
     "verdict": "réussi",
     "valeur": "1552 mots dans le HTML livré (2172 tokens)",
     "source": "raw/knokkeout.com.json › accueil.texte_mots"
    },
    "action_declaree": {
     "verdict": "échoué",
     "valeur": "aucune action déclarée (potentialAction : SearchAction seulement) ; agent-permissions.json et ai-plugin.json : 404, 404",
     "source": "raw/knokkeout.com.home.html ; raw/knokkeout.com.json › discovery",
     "detail": "canal humain relevé : Reservation table : bookknokkeoutzoute.tero.be (RestomaxBook) ; tel +32 50 60 12 26"
    }
   },
   "reussis": 9,
   "mesures": 13,
   "non_releves": 0,
   "score": 69
  },
  {
   "domaine": "malleposte.be",
   "marque": "Hotel La Malle Poste, Rochefort (-> malleposte.net)",
   "pilier_releve": "Hospitality",
   "pilier": "hospitality",
   "plateforme": "WordPress 7.1.3, qTranslate-XT 3.9.0, Powered by WPBakery Page Builder - drag and drop page builder for WordPress., Powered by Slider Revolution 6.7.58 - responsive, Mobile-Friendly Slider Plugin for WordPress with comfortable drag and drop interface., WordPress, Cookiebot",
   "url_effective": "https://malleposte.net/fr/",
   "releve_utc": "2026-10-21 14:04 UTC",
   "accueil": {
    "code": 200,
    "poids": "220 Ko",
    "temps_s": 1.82
   },
   "page_cle": "malleposte.net/fr/hotel/ -> 200 ; JSON-LD: absent ; adresse oui, tel oui, capacites 0, horaires absent, prix oui",
   "criteres": {
    "robots_ia": {
     "verdict": "réussi",
     "valeur": "wildcard : partiel ; GPTBot : non cite ClaudeBot : non cite PerplexityBot : non cite ; UA IA simulés → GPTBot 200, ClaudeBot 200, PerplexityBot 200",
     "source": "raw/malleposte.be.json › robots, ua_tests"
    },
    "llms_txt": {
     "verdict": "échoué",
     "valeur": "absent (404)",
     "source": "raw/malleposte.be.json › discovery"
    },
    "sitemap_valide": {
     "verdict": "réussi",
     "valeur": "28 URL, lastmod max 2026-10-20",
     "source": "raw/malleposte.be.json › sitemap, robots.sitemaps_declares"
    },
    "jsonld_metier": {
     "verdict": "échoué",
     "valeur": "aucun JSON-LD",
     "source": "raw/malleposte.be.json › accueil.jsonld_types"
    },
    "organization": {
     "verdict": "échoué",
     "valeur": "aucun nœud Organization",
     "source": "raw/malleposte.be.home.html"
    },
    "title_h1": {
     "verdict": "réussi",
     "valeur": "title « Hôtel La Malle Poste à Rochefort » ; h1 ×1 : « Votre parenthèse de bien-être au cœur des Ardennes »",
     "source": "raw/malleposte.be.json › accueil.title, accueil.h1"
    },
    "hreflang": {
     "verdict": "réussi",
     "valeur": "en, fr, nl, x-default",
     "source": "raw/malleposte.be.json › accueil.hreflang"
    },
    "reponse_directe": {
     "verdict": "échoué",
     "valeur": "Partiel : H1 « Votre parenthese de bien-etre » ; adresse + tel + prix packages en page ; nb chambres absent",
     "source": "fondations/TABLEAU-DOMAINES.md"
    },
    "faits_chiffres": {
     "verdict": "réussi",
     "valeur": "adresse oui · téléphone oui · capacités absent · horaires absent · prix oui → 3/5",
     "source": "raw/malleposte.be.json › accueil.tel, capacites_detectees, horaires_detectes, prix_detectes ; adresse : fondations/TABLEAU-DOMAINES.md"
    },
    "fraicheur": {
     "verdict": "échoué",
     "valeur": "sitemap 2026-10-20 ; années citées : 2024",
     "source": "raw/malleposte.be.json › sitemap.lastmod_max, accueil.dates_visibles, accueil.annees_citees",
     "detail": "année la plus récente citée : 2024"
    },
    "erreurs": {
     "verdict": "échoué",
     "valeur": "ressources http:// dans une page https",
     "source": "raw/malleposte.be.json › home, https_vers_http, liens_casses, sitemap.tests"
    },
    "rendu_sans_js": {
     "verdict": "réussi",
     "valeur": "650 mots dans le HTML livré (909 tokens)",
     "source": "raw/malleposte.be.json › accueil.texte_mots"
    },
    "action_declaree": {
     "verdict": "échoué",
     "valeur": "aucune action déclarée ; agent-permissions.json et ai-plugin.json : 404, 404",
     "source": "raw/malleposte.be.home.html ; raw/malleposte.be.json › discovery",
     "detail": "canal humain relevé : Reservation en ligne Cubilis / Lighthouse booking engine"
    }
   },
   "reussis": 6,
   "mesures": 13,
   "non_releves": 0,
   "score": 46
  },
  {
   "domaine": "riverwoodsbeachclub.be",
   "marque": "River Woods Beach Club, Knokke (voile, surf, camps)",
   "pilier_releve": "Hospitality/Leisure",
   "pilier": "hospitality",
   "plateforme": "Nuxt",
   "url_effective": "https://riverwoodsbeachclub.be/en",
   "releve_utc": "2026-10-21 14:06 UTC",
   "accueil": {
    "code": 200,
    "poids": "5 Ko",
    "temps_s": 0.71
   },
   "page_cle": "riverwoodsbeachclub.be/en/prices -> 200 ; JSON-LD: absent ; adresse absent, tel absent, capacites 0, horaires absent, prix absent",
   "criteres": {
    "robots_ia": {
     "verdict": "réussi",
     "valeur": "wildcard : partiel ; GPTBot : non cite ClaudeBot : non cite PerplexityBot : non cite ; UA IA simulés → GPTBot 200, ClaudeBot 200, PerplexityBot 200",
     "source": "raw/riverwoodsbeachclub.be.json › robots, ua_tests"
    },
    "llms_txt": {
     "verdict": "échoué",
     "valeur": "absent (404)",
     "source": "raw/riverwoodsbeachclub.be.json › discovery"
    },
    "sitemap_valide": {
     "verdict": "réussi",
     "valeur": "645 URL, lastmod absent",
     "source": "raw/riverwoodsbeachclub.be.json › sitemap, robots.sitemaps_declares"
    },
    "jsonld_metier": {
     "verdict": "échoué",
     "valeur": "aucun JSON-LD",
     "source": "raw/riverwoodsbeachclub.be.json › accueil.jsonld_types"
    },
    "organization": {
     "verdict": "échoué",
     "valeur": "aucun nœud Organization",
     "source": "raw/riverwoodsbeachclub.be.home.html"
    },
    "title_h1": {
     "verdict": "échoué",
     "valeur": "title « River Woods Beach Club » ; h1 absent",
     "source": "raw/riverwoodsbeachclub.be.json › accueil.title, accueil.h1"
    },
    "hreflang": {
     "verdict": "échoué",
     "valeur": "absent (lang=?)",
     "source": "raw/riverwoodsbeachclub.be.json › accueil.hreflang"
    },
    "reponse_directe": {
     "verdict": "échoué",
     "valeur": "Non : SPA Nuxt, HTML = « Loading... » ; page /prices invisible sans JS",
     "source": "fondations/TABLEAU-DOMAINES.md"
    },
    "faits_chiffres": {
     "verdict": "échoué",
     "valeur": "adresse absent · téléphone absent · capacités absent · horaires absent · prix absent → 0/5",
     "source": "raw/riverwoodsbeachclub.be.json › accueil.tel, capacites_detectees, horaires_detectes, prix_detectes ; adresse : fondations/TABLEAU-DOMAINES.md"
    },
    "fraicheur": {
     "verdict": "échoué",
     "valeur": "sitemap sans lastmod",
     "source": "raw/riverwoodsbeachclub.be.json › sitemap.lastmod_max, accueil.dates_visibles, accueil.annees_citees",
     "detail": "aucun lastmod dans le sitemap"
    },
    "erreurs": {
     "verdict": "réussi",
     "valeur": "aucune",
     "source": "raw/riverwoodsbeachclub.be.json › home, https_vers_http, liens_casses, sitemap.tests"
    },
    "rendu_sans_js": {
     "verdict": "échoué",
     "valeur": "5 mots dans le HTML livré (7 tokens) ; début : « Loading...… »",
     "source": "raw/riverwoodsbeachclub.be.json › accueil.texte_mots"
    },
    "action_declaree": {
     "verdict": "échoué",
     "valeur": "aucune action déclarée ; agent-permissions.json et ai-plugin.json : 404, 403",
     "source": "raw/riverwoodsbeachclub.be.home.html ; raw/riverwoodsbeachclub.be.json › discovery",
     "detail": "canal humain relevé : Inconnue sans rendu JS"
    }
   },
   "reussis": 3,
   "mesures": 13,
   "non_releves": 0,
   "score": 23
  },
  {
   "domaine": "terblock.be",
   "marque": "Chateau de Terblock, Overijse (mariages, receptions)",
   "pilier_releve": "Hospitality",
   "pilier": "hospitality",
   "plateforme": "WordPress 7.1.3, WordPress, Elementor, Divi, Rank Math",
   "url_effective": "https://www.terblock.be/",
   "releve_utc": "2026-10-21 14:05 UTC",
   "accueil": {
    "code": 200,
    "poids": "183 Ko",
    "temps_s": 1.5
   },
   "page_cle": "www.terblock.be/contact/ -> 200 ; JSON-LD: LodgingBusiness, Organization (+5 techniques) ; adresse oui, tel oui, capacites 0, horaires absent, prix absent",
   "criteres": {
    "robots_ia": {
     "verdict": "réussi",
     "valeur": "wildcard : partiel ; GPTBot : non cite ClaudeBot : non cite PerplexityBot : non cite ; UA IA simulés → GPTBot 200, ClaudeBot 200, PerplexityBot 200",
     "source": "raw/terblock.be.json › robots, ua_tests"
    },
    "llms_txt": {
     "verdict": "échoué",
     "valeur": "absent (404)",
     "source": "raw/terblock.be.json › discovery"
    },
    "sitemap_valide": {
     "verdict": "réussi",
     "valeur": "23 URL, lastmod max 2026-10-20",
     "source": "raw/terblock.be.json › sitemap, robots.sitemaps_declares"
    },
    "jsonld_metier": {
     "verdict": "réussi",
     "valeur": "EventVenue, FAQPage, LodgingBusiness",
     "source": "raw/terblock.be.json › accueil.jsonld_types"
    },
    "organization": {
     "verdict": "réussi",
     "valeur": "name « Château de Terblock » ; description absente ; url https://www.terblock.be",
     "source": "raw/terblock.be.home.html › script ld+json"
    },
    "title_h1": {
     "verdict": "réussi",
     "valeur": "title « Accueil • Château de Terblock » ; h1 ×1 : « Château de Terblock à Overijse, lieu de mariage et de réception »",
     "source": "raw/terblock.be.json › accueil.title, accueil.h1"
    },
    "hreflang": {
     "verdict": "réussi",
     "valeur": "en, fr, nl",
     "source": "raw/terblock.be.json › accueil.hreflang"
    },
    "reponse_directe": {
     "verdict": "réussi",
     "valeur": "Oui : H1 « Chateau de Terblock a Overijse, lieu de mariage et de reception », adresse, tel, capacites ; prix absents",
     "source": "fondations/TABLEAU-DOMAINES.md"
    },
    "faits_chiffres": {
     "verdict": "réussi",
     "valeur": "adresse oui · téléphone oui · capacités oui · horaires absent · prix absent → 3/5",
     "source": "raw/terblock.be.json › accueil.tel, capacites_detectees, horaires_detectes, prix_detectes ; adresse : fondations/TABLEAU-DOMAINES.md"
    },
    "fraicheur": {
     "verdict": "réussi",
     "valeur": "sitemap 2026-10-20 ; années citées : 2026",
     "source": "raw/terblock.be.json › sitemap.lastmod_max, accueil.dates_visibles, accueil.annees_citees"
    },
    "erreurs": {
     "verdict": "réussi",
     "valeur": "aucune",
     "source": "raw/terblock.be.json › home, https_vers_http, liens_casses, sitemap.tests"
    },
    "rendu_sans_js": {
     "verdict": "réussi",
     "valeur": "980 mots dans le HTML livré (1372 tokens)",
     "source": "raw/terblock.be.json › accueil.texte_mots"
    },
    "action_declaree": {
     "verdict": "échoué",
     "valeur": "aucune action déclarée (potentialAction : SearchAction seulement) ; agent-permissions.json et ai-plugin.json : 404, 404",
     "source": "raw/terblock.be.home.html ; raw/terblock.be.json › discovery",
     "detail": "canal humain relevé : Formulaire contact/visite ; pas de reservation directe"
    }
   },
   "reussis": 11,
   "mesures": 13,
   "non_releves": 0,
   "score": 85
  },
  {
   "domaine": "teroir.be",
   "marque": "Teroir (ecosysteme agricole, boucherie Magerotte, Rochefort)",
   "pilier_releve": "Hospitality (Food)",
   "pilier": "hospitality",
   "plateforme": "WordPress, Elementor, Divi, Rank Math",
   "url_effective": "https://teroir.be/",
   "releve_utc": "2026-10-21 14:04 UTC",
   "accueil": {
    "code": 200,
    "poids": "102 Ko",
    "temps_s": 0.32
   },
   "page_cle": "teroir.be/ -> 200 ; JSON-LD: LocalBusiness, Organization (+4 techniques) ; adresse absent, tel absent, capacites 0, horaires absent, prix absent",
   "criteres": {
    "robots_ia": {
     "verdict": "réussi",
     "valeur": "wildcard : partiel ; GPTBot : non cite ClaudeBot : non cite PerplexityBot : non cite ; UA IA simulés → GPTBot 200, ClaudeBot 200, PerplexityBot 200",
     "source": "raw/teroir.be.json › robots, ua_tests"
    },
    "llms_txt": {
     "verdict": "échoué",
     "valeur": "absent (404)",
     "source": "raw/teroir.be.json › discovery"
    },
    "sitemap_valide": {
     "verdict": "réussi",
     "valeur": "7 URL, lastmod max 2026-06-01",
     "source": "raw/teroir.be.json › sitemap, robots.sitemaps_declares"
    },
    "jsonld_metier": {
     "verdict": "réussi",
     "valeur": "LocalBusiness",
     "source": "raw/teroir.be.json › accueil.jsonld_types"
    },
    "organization": {
     "verdict": "réussi",
     "valeur": "name « Teroir » ; description absente ; url https://teroir.be",
     "source": "raw/teroir.be.home.html › script ld+json"
    },
    "title_h1": {
     "verdict": "réussi",
     "valeur": "title « Teroir - De la fourche à la fourchette » ; h1 ×1 : « Une alimentation durable, de la fourche à la fourchette »",
     "source": "raw/teroir.be.json › accueil.title, accueil.h1"
    },
    "hreflang": {
     "verdict": "échoué",
     "valeur": "absent (lang=en-US)",
     "source": "raw/teroir.be.json › accueil.hreflang"
    },
    "reponse_directe": {
     "verdict": "échoué",
     "valeur": "Non : vitrine conceptuelle, pas d'adresse, pas de prix, pas de CTA traiteur ; renvoie vers teroirdemagerotte.be",
     "source": "fondations/TABLEAU-DOMAINES.md"
    },
    "faits_chiffres": {
     "verdict": "échoué",
     "valeur": "adresse absent · téléphone absent · capacités absent · horaires absent · prix absent → 0/5",
     "source": "raw/teroir.be.json › accueil.tel, capacites_detectees, horaires_detectes, prix_detectes ; adresse : fondations/TABLEAU-DOMAINES.md"
    },
    "fraicheur": {
     "verdict": "échoué",
     "valeur": "sitemap 2026-06-01 ; années citées : 2024",
     "source": "raw/teroir.be.json › sitemap.lastmod_max, accueil.dates_visibles, accueil.annees_citees",
     "detail": "sitemap lastmod 2026-06-01 (> 90 j) ; année la plus récente citée : 2024"
    },
    "erreurs": {
     "verdict": "réussi",
     "valeur": "aucune",
     "source": "raw/teroir.be.json › home, https_vers_http, liens_casses, sitemap.tests"
    },
    "rendu_sans_js": {
     "verdict": "réussi",
     "valeur": "821 mots dans le HTML livré (1149 tokens)",
     "source": "raw/teroir.be.json › accueil.texte_mots"
    },
    "action_declaree": {
     "verdict": "échoué",
     "valeur": "aucune action déclarée (potentialAction : SearchAction seulement) ; agent-permissions.json et ai-plugin.json : 404, 404",
     "source": "raw/teroir.be.home.html ; raw/teroir.be.json › discovery",
     "detail": "canal humain relevé : Aucune (pas de commande, pas de devis) ; traiteur evenementiel = formulaire tero.be"
    }
   },
   "reussis": 7,
   "mesures": 13,
   "non_releves": 0,
   "score": 54
  },
  {
   "domaine": "teroirdemagerotte.be",
   "marque": "Teroir de Magerotte (boucherie, Nassogne/Rochefort)",
   "pilier_releve": "Hospitality (Food)",
   "pilier": "hospitality",
   "plateforme": "WordPress, Elementor, Rank Math, Brevo",
   "url_effective": "https://teroirdemagerotte.be/",
   "releve_utc": "2026-10-21 14:02 UTC",
   "accueil": {
    "code": 200,
    "poids": "90 Ko",
    "temps_s": 1.42
   },
   "page_cle": "non releve",
   "criteres": {
    "robots_ia": {
     "verdict": "réussi",
     "valeur": "wildcard : tout ouvert ; GPTBot : non cite ClaudeBot : non cite PerplexityBot : non cite ; UA IA simulés → GPTBot 200, ClaudeBot 200, PerplexityBot 200",
     "source": "raw/teroirdemagerotte.be.json › robots, ua_tests"
    },
    "llms_txt": {
     "verdict": "échoué",
     "valeur": "absent (404)",
     "source": "raw/teroirdemagerotte.be.json › discovery"
    },
    "sitemap_valide": {
     "verdict": "réussi",
     "valeur": "12 URL, lastmod max 2026-09-20",
     "source": "raw/teroirdemagerotte.be.json › sitemap, robots.sitemaps_declares"
    },
    "jsonld_metier": {
     "verdict": "réussi",
     "valeur": "LocalBusiness",
     "source": "raw/teroirdemagerotte.be.json › accueil.jsonld_types"
    },
    "organization": {
     "verdict": "réussi",
     "valeur": "name « Teroir » ; description absente ; url https://teroirdemagerotte.be",
     "source": "raw/teroirdemagerotte.be.home.html › script ld+json"
    },
    "title_h1": {
     "verdict": "réussi",
     "valeur": "title « Teroir de Magerotte - Accueil » ; h1 ×1 : « La nature de source sûre... depuis 1934 »",
     "source": "raw/teroirdemagerotte.be.json › accueil.title, accueil.h1"
    },
    "hreflang": {
     "verdict": "échoué",
     "valeur": "absent (lang=en-US)",
     "source": "raw/teroirdemagerotte.be.json › accueil.hreflang"
    },
    "reponse_directe": {
     "verdict": "non relevé",
     "valeur": "A verifier manuellement (decouvert en 2e passe)",
     "source": "fondations/TABLEAU-DOMAINES.md"
    },
    "faits_chiffres": {
     "verdict": "échoué",
     "valeur": "adresse oui · téléphone absent · capacités absent · horaires absent · prix absent → 1/5",
     "source": "raw/teroirdemagerotte.be.json › accueil.tel, capacites_detectees, horaires_detectes, prix_detectes ; adresse : fondations/TABLEAU-DOMAINES.md"
    },
    "fraicheur": {
     "verdict": "réussi",
     "valeur": "sitemap 2026-09-20",
     "source": "raw/teroirdemagerotte.be.json › sitemap.lastmod_max, accueil.dates_visibles, accueil.annees_citees"
    },
    "erreurs": {
     "verdict": "échoué",
     "valeur": "ressources http:// dans une page https",
     "source": "raw/teroirdemagerotte.be.json › home, https_vers_http, liens_casses, sitemap.tests"
    },
    "rendu_sans_js": {
     "verdict": "réussi",
     "valeur": "345 mots dans le HTML livré (482 tokens)",
     "source": "raw/teroirdemagerotte.be.json › accueil.texte_mots"
    },
    "action_declaree": {
     "verdict": "échoué",
     "valeur": "aucune action déclarée (potentialAction : SearchAction seulement) ; agent-permissions.json et ai-plugin.json : 404, 404",
     "source": "raw/teroirdemagerotte.be.home.html ; raw/teroirdemagerotte.be.json › discovery",
     "detail": "canal humain relevé : Voir JSON"
    }
   },
   "reussis": 7,
   "mesures": 12,
   "non_releves": 1,
   "score": 58
  },
  {
   "domaine": "garisart.be",
   "marque": "Garisart Sports Club, Arlon (padel, tennis, foot, Bistro Pilko)",
   "pilier_releve": "Hospitality/Leisure",
   "pilier": "leisure",
   "plateforme": "All in One SEO (AIOSEO) 4.9.0, WordPress 7.1.3, WordPress, Elementor, Playtomic, Brevo",
   "url_effective": "https://garisartsportsclub.be/",
   "releve_utc": "2026-10-21 13:56 UTC",
   "accueil": {
    "code": 200,
    "poids": "83 Ko",
    "temps_s": 1.3
   },
   "page_cle": "garisartsportsclub.be/tero-padel-club-garisart/ -> 200 ; JSON-LD: Organization (+4 techniques) ; adresse absent, tel absent, capacites 1, horaires absent, prix oui",
   "criteres": {
    "robots_ia": {
     "verdict": "réussi",
     "valeur": "wildcard : tout ouvert ; GPTBot : non cite ClaudeBot : non cite PerplexityBot : non cite ; UA IA simulés → GPTBot 200, ClaudeBot 200, PerplexityBot 200",
     "source": "raw/garisart.be.json › robots, ua_tests"
    },
    "llms_txt": {
     "verdict": "réussi",
     "valeur": "présent (3 Ko)",
     "source": "raw/garisart.be.json › discovery"
    },
    "sitemap_valide": {
     "verdict": "réussi",
     "valeur": "11 URL, lastmod max 2026-09-29",
     "source": "raw/garisart.be.json › sitemap, robots.sitemaps_declares"
    },
    "jsonld_metier": {
     "verdict": "échoué",
     "valeur": "génériques seulement : BreadcrumbList, ListItem, Organization, WebPage, WebSite",
     "source": "raw/garisart.be.json › accueil.jsonld_types"
    },
    "organization": {
     "verdict": "échoué",
     "valeur": "name « Batirun » ; description « Un site utilisant WordPress » ; url https://garisartsportsclub.be/",
     "source": "raw/garisart.be.home.html › script ld+json",
     "detail": "name « Batirun » ne correspond pas au domaine (copie d'un autre site) ; description par défaut « Un site utilisant WordPress »"
    },
    "title_h1": {
     "verdict": "échoué",
     "valeur": "title absent ; h1 ×1 : « Garisart Sports Club »",
     "source": "raw/garisart.be.json › accueil.title, accueil.h1"
    },
    "hreflang": {
     "verdict": "échoué",
     "valeur": "absent (lang=fr-FR)",
     "source": "raw/garisart.be.json › accueil.hreflang"
    },
    "reponse_directe": {
     "verdict": "échoué",
     "valeur": "Non : H1 = nom du club, pas d'adresse postale (seule la ville Arlon), pas d'horaires",
     "source": "fondations/TABLEAU-DOMAINES.md"
    },
    "faits_chiffres": {
     "verdict": "échoué",
     "valeur": "adresse absent · téléphone absent · capacités absent · horaires absent · prix absent → 0/5",
     "source": "raw/garisart.be.json › accueil.tel, capacites_detectees, horaires_detectes, prix_detectes ; adresse : fondations/TABLEAU-DOMAINES.md"
    },
    "fraicheur": {
     "verdict": "réussi",
     "valeur": "sitemap 2026-09-29 ; années citées : 2026, 2027",
     "source": "raw/garisart.be.json › sitemap.lastmod_max, accueil.dates_visibles, accueil.annees_citees"
    },
    "erreurs": {
     "verdict": "réussi",
     "valeur": "aucune",
     "source": "raw/garisart.be.json › home, https_vers_http, liens_casses, sitemap.tests"
    },
    "rendu_sans_js": {
     "verdict": "réussi",
     "valeur": "462 mots dans le HTML livré (646 tokens)",
     "source": "raw/garisart.be.json › accueil.texte_mots"
    },
    "action_declaree": {
     "verdict": "échoué",
     "valeur": "aucune action déclarée ; agent-permissions.json et ai-plugin.json : 404, 404",
     "source": "raw/garisart.be.home.html ; raw/garisart.be.json › discovery",
     "detail": "canal humain relevé : Reservation terrains via Playtomic (padel) et app.playtomic.io (tennis, foot) ; tel Pilko +32 488 98 95 00"
    }
   },
   "reussis": 6,
   "mesures": 13,
   "non_releves": 0,
   "score": 46
  },
  {
   "domaine": "teropadelclub.be",
   "marque": "Tero Padel Club (Waterloo, Louise, Limelette, Namur, Garisart, Charleroi)",
   "pilier_releve": "Leisure",
   "pilier": "leisure",
   "plateforme": "Nuxt",
   "url_effective": "https://teropadelclub.be/en",
   "releve_utc": "2026-10-21 13:55 UTC",
   "accueil": {
    "code": 200,
    "poids": "4 Ko",
    "temps_s": 0.61
   },
   "page_cle": "teropadelclub.be/en/tero-padel-club-waterloo -> 200 ; JSON-LD: absent ; adresse absent, tel absent, capacites 0, horaires absent, prix absent",
   "criteres": {
    "robots_ia": {
     "verdict": "réussi",
     "valeur": "wildcard : partiel ; GPTBot : non cite ClaudeBot : non cite PerplexityBot : non cite ; UA IA simulés → GPTBot 200, ClaudeBot 200, PerplexityBot 200",
     "source": "raw/teropadelclub.be.json › robots, ua_tests"
    },
    "llms_txt": {
     "verdict": "échoué",
     "valeur": "absent (404)",
     "source": "raw/teropadelclub.be.json › discovery"
    },
    "sitemap_valide": {
     "verdict": "réussi",
     "valeur": "129 URL, lastmod absent",
     "source": "raw/teropadelclub.be.json › sitemap, robots.sitemaps_declares"
    },
    "jsonld_metier": {
     "verdict": "échoué",
     "valeur": "aucun JSON-LD",
     "source": "raw/teropadelclub.be.json › accueil.jsonld_types"
    },
    "organization": {
     "verdict": "échoué",
     "valeur": "aucun nœud Organization",
     "source": "raw/teropadelclub.be.home.html"
    },
    "title_h1": {
     "verdict": "échoué",
     "valeur": "title « Tero Padel Club » ; h1 absent",
     "source": "raw/teropadelclub.be.json › accueil.title, accueil.h1"
    },
    "hreflang": {
     "verdict": "échoué",
     "valeur": "absent (lang=?)",
     "source": "raw/teropadelclub.be.json › accueil.hreflang"
    },
    "reponse_directe": {
     "verdict": "échoué",
     "valeur": "Non : SPA Nuxt, le HTML livre « Loading... » (5 mots) ; rien de lisible sans JavaScript",
     "source": "fondations/TABLEAU-DOMAINES.md"
    },
    "faits_chiffres": {
     "verdict": "échoué",
     "valeur": "adresse absent · téléphone absent · capacités absent · horaires absent · prix absent → 0/5",
     "source": "raw/teropadelclub.be.json › accueil.tel, capacites_detectees, horaires_detectes, prix_detectes ; adresse : fondations/TABLEAU-DOMAINES.md"
    },
    "fraicheur": {
     "verdict": "échoué",
     "valeur": "sitemap sans lastmod",
     "source": "raw/teropadelclub.be.json › sitemap.lastmod_max, accueil.dates_visibles, accueil.annees_citees",
     "detail": "aucun lastmod dans le sitemap"
    },
    "erreurs": {
     "verdict": "réussi",
     "valeur": "aucune",
     "source": "raw/teropadelclub.be.json › home, https_vers_http, liens_casses, sitemap.tests"
    },
    "rendu_sans_js": {
     "verdict": "échoué",
     "valeur": "4 mots dans le HTML livré (5 tokens) ; début : « Loading...… »",
     "source": "raw/teropadelclub.be.json › accueil.texte_mots"
    },
    "action_declaree": {
     "verdict": "échoué",
     "valeur": "aucune action déclarée ; agent-permissions.json et ai-plugin.json : 404, 403",
     "source": "raw/teropadelclub.be.home.html ; raw/teropadelclub.be.json › discovery",
     "detail": "canal humain relevé : Reservation via Playtomic (hors site) ; invisible pour un agent sans rendu JS"
    }
   },
   "reussis": 3,
   "mesures": 13,
   "non_releves": 0,
   "score": 23
  },
  {
   "domaine": "terostudio.be",
   "marque": "Tero Studio (reformer, yoga, pilates : Lime, Namur, Garisart)",
   "pilier_releve": "Leisure",
   "pilier": "leisure",
   "plateforme": "WordPress 7.1.3, Site Kit by Google 1.190.0, WordPress, Divi, Rank Math",
   "url_effective": "https://terostudio.be/",
   "releve_utc": "2026-10-21 13:55 UTC",
   "accueil": {
    "code": 200,
    "poids": "65 Ko",
    "temps_s": 0.32
   },
   "page_cle": "terostudio.be/reserver/ -> 200 ; JSON-LD: Organization, SportsActivityLocation (+5 techniques) ; adresse oui, tel absent, capacites 0, horaires absent, prix absent",
   "criteres": {
    "robots_ia": {
     "verdict": "réussi",
     "valeur": "wildcard : tout ouvert ; GPTBot : non cite ClaudeBot : non cite PerplexityBot : non cite ; UA IA simulés → GPTBot 200, ClaudeBot 200, PerplexityBot 200",
     "source": "raw/terostudio.be.json › robots, ua_tests"
    },
    "llms_txt": {
     "verdict": "échoué",
     "valeur": "absent (404)",
     "source": "raw/terostudio.be.json › discovery"
    },
    "sitemap_valide": {
     "verdict": "réussi",
     "valeur": "27 URL, lastmod max 2026-09-25",
     "source": "raw/terostudio.be.json › sitemap, robots.sitemaps_declares"
    },
    "jsonld_metier": {
     "verdict": "réussi",
     "valeur": "SportsActivityLocation",
     "source": "raw/terostudio.be.json › accueil.jsonld_types"
    },
    "organization": {
     "verdict": "réussi",
     "valeur": "name « Tero Studio » ; description « Studio de Reformer, Yoga et Pilates &amp; more to come. Cour… » ; url https://terostudio.be",
     "source": "raw/terostudio.be.home.html › script ld+json"
    },
    "title_h1": {
     "verdict": "échoué",
     "valeur": "title « tero studio | Reformer, Yoga, Pilates » ; h1 ×3 : « Le studio où vous trouvez votre rythme, votre place » / « Le studio où vous trouvez votre rythme, votre place » / « Rejoignez la communauté tero studio »",
     "source": "raw/terostudio.be.json › accueil.title, accueil.h1"
    },
    "hreflang": {
     "verdict": "échoué",
     "valeur": "absent (lang=fr-FR)",
     "source": "raw/terostudio.be.json › accueil.hreflang"
    },
    "reponse_directe": {
     "verdict": "échoué",
     "valeur": "Partiel : H1 « Le studio ou vous trouvez votre rythme » ; adresses des 3 studios en pied de page ; pack 30 EUR",
     "source": "fondations/TABLEAU-DOMAINES.md"
    },
    "faits_chiffres": {
     "verdict": "réussi",
     "valeur": "adresse oui · téléphone absent · capacités absent · horaires absent · prix oui → 2/5",
     "source": "raw/terostudio.be.json › accueil.tel, capacites_detectees, horaires_detectes, prix_detectes ; adresse : fondations/TABLEAU-DOMAINES.md"
    },
    "fraicheur": {
     "verdict": "réussi",
     "valeur": "sitemap 2026-09-25 ; années citées : 2026",
     "source": "raw/terostudio.be.json › sitemap.lastmod_max, accueil.dates_visibles, accueil.annees_citees"
    },
    "erreurs": {
     "verdict": "réussi",
     "valeur": "aucune",
     "source": "raw/terostudio.be.json › home, https_vers_http, liens_casses, sitemap.tests"
    },
    "rendu_sans_js": {
     "verdict": "réussi",
     "valeur": "333 mots dans le HTML livré (466 tokens)",
     "source": "raw/terostudio.be.json › accueil.texte_mots"
    },
    "action_declaree": {
     "verdict": "échoué",
     "valeur": "aucune action déclarée (potentialAction : SearchAction seulement) ; agent-permissions.json et ai-plugin.json : 404, 404",
     "source": "raw/terostudio.be.home.html ; raw/terostudio.be.json › discovery",
     "detail": "canal humain relevé : Reservation en ligne (/reserver/, widget bsport/Divi) ; pas de telephone"
    }
   },
   "reussis": 8,
   "mesures": 13,
   "non_releves": 0,
   "score": 62
  },
  {
   "domaine": "12kmanderlecht.be",
   "marque": "7 & 12 km d'Anderlecht",
   "pilier_releve": "Sport Events",
   "pilier": "sport-events",
   "plateforme": "WordPress, Elementor, Divi, Yoast SEO, Njuko",
   "url_effective": "https://12kmanderlecht.be/",
   "releve_utc": "2026-10-21 14:02 UTC",
   "accueil": {
    "code": 200,
    "poids": "197 Ko",
    "temps_s": 0.23
   },
   "page_cle": "12kmanderlecht.be/course/contact/ -> 200 ; JSON-LD: Organization (+9 techniques) ; adresse absent, tel absent, capacites 0, horaires absent, prix absent",
   "criteres": {
    "robots_ia": {
     "verdict": "réussi",
     "valeur": "wildcard : tout ouvert ; GPTBot : non cite ClaudeBot : non cite PerplexityBot : non cite ; UA IA simulés → GPTBot 200, ClaudeBot 200, PerplexityBot 200",
     "source": "raw/12kmanderlecht.be.json › robots, ua_tests"
    },
    "llms_txt": {
     "verdict": "échoué",
     "valeur": "absent (404)",
     "source": "raw/12kmanderlecht.be.json › discovery"
    },
    "sitemap_valide": {
     "verdict": "réussi",
     "valeur": "20 URL, lastmod max 2026-06-29",
     "source": "raw/12kmanderlecht.be.json › sitemap, robots.sitemaps_declares"
    },
    "jsonld_metier": {
     "verdict": "échoué",
     "valeur": "génériques seulement : BreadcrumbList, EntryPoint, ImageObject, ListItem, Organization, PropertyValueSpecification, ReadAction, SearchAction, WebPage, WebSite",
     "source": "raw/12kmanderlecht.be.json › accueil.jsonld_types"
    },
    "organization": {
     "verdict": "réussi",
     "valeur": "name « Les 12KM d'Anderlecht » ; description absente ; url https://12kmanderlecht.be/",
     "source": "raw/12kmanderlecht.be.home.html › script ld+json"
    },
    "title_h1": {
     "verdict": "réussi",
     "valeur": "title « Rendez-vous en juin 2027 - 12KM Anderlecht » ; h1 ×1 : « 7 & 12 KM Anderlecht »",
     "source": "raw/12kmanderlecht.be.json › accueil.title, accueil.h1"
    },
    "hreflang": {
     "verdict": "réussi",
     "valeur": "fr, nl, nl-BE",
     "source": "raw/12kmanderlecht.be.json › accueil.hreflang"
    },
    "reponse_directe": {
     "verdict": "échoué",
     "valeur": "Partiel : « Rendez-vous en juin 2027 », 2026 sold out ; prix absents",
     "source": "fondations/TABLEAU-DOMAINES.md"
    },
    "faits_chiffres": {
     "verdict": "échoué",
     "valeur": "adresse absent · téléphone absent · capacités absent · horaires absent · prix absent → 0/5",
     "source": "raw/12kmanderlecht.be.json › accueil.tel, capacites_detectees, horaires_detectes, prix_detectes ; adresse : fondations/TABLEAU-DOMAINES.md"
    },
    "fraicheur": {
     "verdict": "échoué",
     "valeur": "sitemap 2026-06-29 ; années citées : 2026, 2027",
     "source": "raw/12kmanderlecht.be.json › sitemap.lastmod_max, accueil.dates_visibles, accueil.annees_citees",
     "detail": "sitemap lastmod 2026-06-29 (> 90 j)"
    },
    "erreurs": {
     "verdict": "échoué",
     "valeur": "https://12kmanderlecht.be/comments/feed/ → 404",
     "source": "raw/12kmanderlecht.be.json › home, https_vers_http, liens_casses, sitemap.tests"
    },
    "rendu_sans_js": {
     "verdict": "réussi",
     "valeur": "557 mots dans le HTML livré (779 tokens)",
     "source": "raw/12kmanderlecht.be.json › accueil.texte_mots"
    },
    "action_declaree": {
     "verdict": "échoué",
     "valeur": "aucune action déclarée (potentialAction : ReadAction, SearchAction seulement) ; agent-permissions.json et ai-plugin.json : 404, 404",
     "source": "raw/12kmanderlecht.be.home.html ; raw/12kmanderlecht.be.json › discovery",
     "detail": "canal humain relevé : Inscription Njuko (edition 2026 fermee)"
    }
   },
   "reussis": 6,
   "mesures": 13,
   "non_releves": 0,
   "score": 46
  },
  {
   "domaine": "batirun.be",
   "marque": "Batirun by Franki (course construction)",
   "pilier_releve": "Sport Events",
   "pilier": "sport-events",
   "plateforme": "All in One SEO (AIOSEO) 5.0.2, WordPress 7.1.3, WordPress, Brevo, Inscription course",
   "url_effective": "https://batirun.be/",
   "releve_utc": "2026-10-21 13:58 UTC",
   "accueil": {
    "code": 200,
    "poids": "155 Ko",
    "temps_s": 0.21
   },
   "page_cle": "batirun.be/inscriptions/ -> 200 ; JSON-LD: Organization (+5 techniques) ; adresse absent, tel absent, capacites 0, horaires absent, prix absent",
   "criteres": {
    "robots_ia": {
     "verdict": "réussi",
     "valeur": "wildcard : partiel ; GPTBot : non cite ClaudeBot : non cite PerplexityBot : non cite ; UA IA simulés → GPTBot 200, ClaudeBot 200, PerplexityBot 200",
     "source": "raw/batirun.be.json › robots, ua_tests"
    },
    "llms_txt": {
     "verdict": "réussi",
     "valeur": "présent (11 Ko)",
     "source": "raw/batirun.be.json › discovery"
    },
    "sitemap_valide": {
     "verdict": "réussi",
     "valeur": "60 URL, lastmod max 2026-09-24",
     "source": "raw/batirun.be.json › sitemap, robots.sitemaps_declares"
    },
    "jsonld_metier": {
     "verdict": "échoué",
     "valeur": "génériques seulement : BreadcrumbList, ListItem, Organization, WebPage, WebSite",
     "source": "raw/batirun.be.json › accueil.jsonld_types"
    },
    "organization": {
     "verdict": "échoué",
     "valeur": "name « Batirun » ; description « Un site utilisant WordPress » ; url https://batirun.be/",
     "source": "raw/batirun.be.home.html › script ld+json",
     "detail": "description par défaut « Un site utilisant WordPress »"
    },
    "title_h1": {
     "verdict": "réussi",
     "valeur": "title « BATIRUN | Sport & Networking » ; h1 ×1 : « Le BATIRUN by Franki »",
     "source": "raw/batirun.be.json › accueil.title, accueil.h1"
    },
    "hreflang": {
     "verdict": "échoué",
     "valeur": "absent (lang=fr-FR)",
     "source": "raw/batirun.be.json › accueil.hreflang"
    },
    "reponse_directe": {
     "verdict": "échoué",
     "valeur": "Partiel : date 17 juin 2027 ; ville absente, prix absents",
     "source": "fondations/TABLEAU-DOMAINES.md"
    },
    "faits_chiffres": {
     "verdict": "réussi",
     "valeur": "adresse absent · téléphone absent · capacités oui · horaires absent · prix oui → 2/5",
     "source": "raw/batirun.be.json › accueil.tel, capacites_detectees, horaires_detectes, prix_detectes ; adresse : fondations/TABLEAU-DOMAINES.md"
    },
    "fraicheur": {
     "verdict": "réussi",
     "valeur": "sitemap 2026-09-24 ; dates visibles : 2027-06-17 ; années citées : 2024, 2025, 2026, 2027",
     "source": "raw/batirun.be.json › sitemap.lastmod_max, accueil.dates_visibles, accueil.annees_citees"
    },
    "erreurs": {
     "verdict": "réussi",
     "valeur": "aucune",
     "source": "raw/batirun.be.json › home, https_vers_http, liens_casses, sitemap.tests"
    },
    "rendu_sans_js": {
     "verdict": "réussi",
     "valeur": "641 mots dans le HTML livré (897 tokens)",
     "source": "raw/batirun.be.json › accueil.texte_mots"
    },
    "action_declaree": {
     "verdict": "échoué",
     "valeur": "aucune action déclarée ; agent-permissions.json et ai-plugin.json : 404, 404",
     "source": "raw/batirun.be.home.html ; raw/batirun.be.json › discovery",
     "detail": "canal humain relevé : Inscription via registration.sportero.be ; /inscriptions/ = page explicative"
    }
   },
   "reussis": 8,
   "mesures": 13,
   "non_releves": 0,
   "score": 62
  },
  {
   "domaine": "bouwrun.be",
   "marque": "Bouwrun powered by Willemen (NL)",
   "pilier_releve": "Sport Events",
   "pilier": "sport-events",
   "plateforme": "All in One SEO (AIOSEO) 5.0.0.1, WordPress 7.1.3, WordPress, Brevo",
   "url_effective": "https://www.bouwrun.be/",
   "releve_utc": "2026-10-21 13:58 UTC",
   "accueil": {
    "code": 200,
    "poids": "114 Ko",
    "temps_s": 1.29
   },
   "page_cle": "non releve",
   "criteres": {
    "robots_ia": {
     "verdict": "réussi",
     "valeur": "wildcard : partiel ; GPTBot : non cite ClaudeBot : non cite PerplexityBot : non cite ; UA IA simulés → GPTBot 200, ClaudeBot 200, PerplexityBot 200",
     "source": "raw/bouwrun.be.json › robots, ua_tests"
    },
    "llms_txt": {
     "verdict": "réussi",
     "valeur": "présent (7 Ko)",
     "source": "raw/bouwrun.be.json › discovery"
    },
    "sitemap_valide": {
     "verdict": "réussi",
     "valeur": "37 URL, lastmod max 2026-08-12",
     "source": "raw/bouwrun.be.json › sitemap, robots.sitemaps_declares"
    },
    "jsonld_metier": {
     "verdict": "échoué",
     "valeur": "génériques seulement : BreadcrumbList, ImageObject, ListItem, Organization, WebPage, WebSite",
     "source": "raw/bouwrun.be.json › accueil.jsonld_types"
    },
    "organization": {
     "verdict": "échoué",
     "valeur": "name « Batirun » ; description « HET STRAFSTE  SPORTEVENEMENT IN DE BOUWSECTOR » ; url https://www.bouwrun.be/",
     "source": "raw/bouwrun.be.home.html › script ld+json",
     "detail": "name « Batirun » ne correspond pas au domaine (copie d'un autre site)"
    },
    "title_h1": {
     "verdict": "réussi",
     "valeur": "title « Home - BOUWRUN by Willemen » ; h1 ×1 : « BOUWRUN powered by Willemen »",
     "source": "raw/bouwrun.be.json › accueil.title, accueil.h1"
    },
    "hreflang": {
     "verdict": "échoué",
     "valeur": "absent (lang=nl-BE)",
     "source": "raw/bouwrun.be.json › accueil.hreflang"
    },
    "reponse_directe": {
     "verdict": "échoué",
     "valeur": "Partiel : date 15 avril 2027 ; ville et prix absents",
     "source": "fondations/TABLEAU-DOMAINES.md"
    },
    "faits_chiffres": {
     "verdict": "échoué",
     "valeur": "adresse absent · téléphone absent · capacités absent · horaires absent · prix oui → 1/5",
     "source": "raw/bouwrun.be.json › accueil.tel, capacites_detectees, horaires_detectes, prix_detectes ; adresse : fondations/TABLEAU-DOMAINES.md"
    },
    "fraicheur": {
     "verdict": "réussi",
     "valeur": "sitemap 2026-08-12 ; dates visibles : 2027-04-15 ; années citées : 2024, 2025, 2026, 2027",
     "source": "raw/bouwrun.be.json › sitemap.lastmod_max, accueil.dates_visibles, accueil.annees_citees"
    },
    "erreurs": {
     "verdict": "échoué",
     "valeur": "ressources http:// dans une page https",
     "source": "raw/bouwrun.be.json › home, https_vers_http, liens_casses, sitemap.tests"
    },
    "rendu_sans_js": {
     "verdict": "réussi",
     "valeur": "593 mots dans le HTML livré (830 tokens)",
     "source": "raw/bouwrun.be.json › accueil.texte_mots"
    },
    "action_declaree": {
     "verdict": "échoué",
     "valeur": "aucune action déclarée ; agent-permissions.json et ai-plugin.json : 404, 404",
     "source": "raw/bouwrun.be.home.html ; raw/bouwrun.be.json › discovery",
     "detail": "canal humain relevé : Inscription via registration.sportero.be"
    }
   },
   "reussis": 6,
   "mesures": 13,
   "non_releves": 0,
   "score": 46
  },
  {
   "domaine": "brusselspremierpadel.be",
   "marque": "Lotto Brussels Premier Padel P2 (Gare Maritime)",
   "pilier_releve": "Sport Events",
   "pilier": "sport-events",
   "plateforme": "All in One SEO (AIOSEO) 4.7.9.1, WordPress 7.1.3, Site Kit by Google 1.147.0, WordPress, Divi, Cookiebot",
   "url_effective": "https://www.brusselspremierpadel.be/",
   "releve_utc": "2026-10-21 14:01 UTC",
   "accueil": {
    "code": 200,
    "poids": "114 Ko",
    "temps_s": 1.43
   },
   "page_cle": "www.brusselspremierpadel.be/ticketing/ -> 200 ; JSON-LD: Organization (+4 techniques) ; adresse absent, tel absent, capacites 0, horaires absent, prix absent",
   "criteres": {
    "robots_ia": {
     "verdict": "réussi",
     "valeur": "wildcard : partiel ; GPTBot : non cite ClaudeBot : non cite PerplexityBot : non cite ; UA IA simulés → GPTBot 200, ClaudeBot 200, PerplexityBot 200",
     "source": "raw/brusselspremierpadel.be.json › robots, ua_tests"
    },
    "llms_txt": {
     "verdict": "échoué",
     "valeur": "absent (404)",
     "source": "raw/brusselspremierpadel.be.json › discovery"
    },
    "sitemap_valide": {
     "verdict": "réussi",
     "valeur": "46 URL, lastmod max 2026-10-15",
     "source": "raw/brusselspremierpadel.be.json › sitemap, robots.sitemaps_declares"
    },
    "jsonld_metier": {
     "verdict": "échoué",
     "valeur": "génériques seulement : BreadcrumbList, EntryPoint, ListItem, Organization, SearchAction, WebPage, WebSite",
     "source": "raw/brusselspremierpadel.be.json › accueil.jsonld_types"
    },
    "organization": {
     "verdict": "échoué",
     "valeur": "name « Batirun » ; description « Padel Tournament at Tour & Taxis » ; url https://www.brusselspremierpadel.be/",
     "source": "raw/brusselspremierpadel.be.home.html › script ld+json",
     "detail": "name « Batirun » ne correspond pas au domaine (copie d'un autre site)"
    },
    "title_h1": {
     "verdict": "échoué",
     "valeur": "title absent ; h1 ×1 : « Lotto Brussels Premier Padel P2 by CBC »",
     "source": "raw/brusselspremierpadel.be.json › accueil.title, accueil.h1"
    },
    "hreflang": {
     "verdict": "échoué",
     "valeur": "absent (lang=en-GB)",
     "source": "raw/brusselspremierpadel.be.json › accueil.hreflang"
    },
    "reponse_directe": {
     "verdict": "échoué",
     "valeur": "Partiel : dates 19-26 avril 2026 + lieu ; prix absents",
     "source": "fondations/TABLEAU-DOMAINES.md"
    },
    "faits_chiffres": {
     "verdict": "échoué",
     "valeur": "adresse absent · téléphone absent · capacités absent · horaires absent · prix absent → 0/5",
     "source": "raw/brusselspremierpadel.be.json › accueil.tel, capacites_detectees, horaires_detectes, prix_detectes ; adresse : fondations/TABLEAU-DOMAINES.md"
    },
    "fraicheur": {
     "verdict": "échoué",
     "valeur": "sitemap 2026-10-15 ; dates visibles : 2026-04-19, 2026-04-26 ; années citées : 2025, 2026, 2027",
     "source": "raw/brusselspremierpadel.be.json › sitemap.lastmod_max, accueil.dates_visibles, accueil.annees_citees",
     "detail": "date passée présentée : 2026-04-19, 2026-04-26"
    },
    "erreurs": {
     "verdict": "réussi",
     "valeur": "aucune",
     "source": "raw/brusselspremierpadel.be.json › home, https_vers_http, liens_casses, sitemap.tests"
    },
    "rendu_sans_js": {
     "verdict": "réussi",
     "valeur": "584 mots dans le HTML livré (817 tokens)",
     "source": "raw/brusselspremierpadel.be.json › accueil.texte_mots"
    },
    "action_declaree": {
     "verdict": "échoué",
     "valeur": "aucune action déclarée (potentialAction : SearchAction seulement) ; agent-permissions.json et ai-plugin.json : 404, 404",
     "source": "raw/brusselspremierpadel.be.home.html ; raw/brusselspremierpadel.be.json › discovery",
     "detail": "canal humain relevé : Billetterie Paylogic ; hospitalite via Jotform"
    }
   },
   "reussis": 4,
   "mesures": 13,
   "non_releves": 0,
   "score": 31
  },
  {
   "domaine": "buildandrun.be",
   "marque": "Build & Run driven by Lixon",
   "pilier_releve": "Sport Events",
   "pilier": "sport-events",
   "plateforme": "All in One SEO (AIOSEO) 5.0.3, WordPress 7.1.3, WordPress, Brevo, Inscription course",
   "url_effective": "https://buildandrun.be/",
   "releve_utc": "2026-10-21 13:59 UTC",
   "accueil": {
    "code": 200,
    "poids": "99 Ko",
    "temps_s": 0.46
   },
   "page_cle": "non releve",
   "criteres": {
    "robots_ia": {
     "verdict": "réussi",
     "valeur": "wildcard : tout ouvert ; GPTBot : non cite ClaudeBot : non cite PerplexityBot : non cite ; UA IA simulés → GPTBot 200, ClaudeBot 200, PerplexityBot 200",
     "source": "raw/buildandrun.be.json › robots, ua_tests"
    },
    "llms_txt": {
     "verdict": "échoué",
     "valeur": "absent (404)",
     "source": "raw/buildandrun.be.json › discovery"
    },
    "sitemap_valide": {
     "verdict": "réussi",
     "valeur": "22 URL, lastmod max 2026-10-13",
     "source": "raw/buildandrun.be.json › sitemap, robots.sitemaps_declares"
    },
    "jsonld_metier": {
     "verdict": "échoué",
     "valeur": "génériques seulement : BreadcrumbList, ListItem, Organization, WebPage, WebSite",
     "source": "raw/buildandrun.be.json › accueil.jsonld_types"
    },
    "organization": {
     "verdict": "échoué",
     "valeur": "name « Batirun » ; description « Course inter-entreprises du secteur de la construction » ; url https://buildandrun.be/",
     "source": "raw/buildandrun.be.home.html › script ld+json",
     "detail": "name « Batirun » ne correspond pas au domaine (copie d'un autre site)"
    },
    "title_h1": {
     "verdict": "réussi",
     "valeur": "title « BUILD & RUN » ; h1 ×1 : « Le BUILD & RUN driven by LIXON »",
     "source": "raw/buildandrun.be.json › accueil.title, accueil.h1"
    },
    "hreflang": {
     "verdict": "échoué",
     "valeur": "absent (lang=fr-FR)",
     "source": "raw/buildandrun.be.json › accueil.hreflang"
    },
    "reponse_directe": {
     "verdict": "échoué",
     "valeur": "Partiel : date 8 oct. 2026 (passee au releve) ; ville et prix absents",
     "source": "fondations/TABLEAU-DOMAINES.md"
    },
    "faits_chiffres": {
     "verdict": "échoué",
     "valeur": "adresse absent · téléphone absent · capacités absent · horaires absent · prix oui → 1/5",
     "source": "raw/buildandrun.be.json › accueil.tel, capacites_detectees, horaires_detectes, prix_detectes ; adresse : fondations/TABLEAU-DOMAINES.md"
    },
    "fraicheur": {
     "verdict": "échoué",
     "valeur": "sitemap 2026-10-13 ; dates visibles : 2026-10-08 ; années citées : 2026",
     "source": "raw/buildandrun.be.json › sitemap.lastmod_max, accueil.dates_visibles, accueil.annees_citees",
     "detail": "date passée présentée : 2026-10-08"
    },
    "erreurs": {
     "verdict": "réussi",
     "valeur": "aucune",
     "source": "raw/buildandrun.be.json › home, https_vers_http, liens_casses, sitemap.tests"
    },
    "rendu_sans_js": {
     "verdict": "réussi",
     "valeur": "581 mots dans le HTML livré (813 tokens)",
     "source": "raw/buildandrun.be.json › accueil.texte_mots"
    },
    "action_declaree": {
     "verdict": "échoué",
     "valeur": "aucune action déclarée ; agent-permissions.json et ai-plugin.json : 404, 404",
     "source": "raw/buildandrun.be.home.html ; raw/buildandrun.be.json › discovery",
     "detail": "canal humain relevé : Inscription via registration.sportero.be"
    }
   },
   "reussis": 5,
   "mesures": 13,
   "non_releves": 0,
   "score": 38
  },
  {
   "domaine": "immorun.be",
   "marque": "Immorun by Immobel (course immobilier, Bruxelles)",
   "pilier_releve": "Sport Events",
   "pilier": "sport-events",
   "plateforme": "All in One SEO (AIOSEO) 5.0.1.1, WordPress 7.1.3, WordPress, Brevo, Inscription course",
   "url_effective": "https://immorun.be/",
   "releve_utc": "2026-10-21 13:56 UTC",
   "accueil": {
    "code": 200,
    "poids": "140 Ko",
    "temps_s": 1.2
   },
   "page_cle": "immorun.be/registration/ -> 200 ; JSON-LD: Organization (+4 techniques) ; adresse absent, tel absent, capacites 0, horaires absent, prix absent",
   "criteres": {
    "robots_ia": {
     "verdict": "réussi",
     "valeur": "wildcard : tout ouvert ; GPTBot : non cite ClaudeBot : non cite PerplexityBot : non cite ; UA IA simulés → GPTBot 200, ClaudeBot 200, PerplexityBot 200",
     "source": "raw/immorun.be.json › robots, ua_tests"
    },
    "llms_txt": {
     "verdict": "réussi",
     "valeur": "présent (6 Ko)",
     "source": "raw/immorun.be.json › discovery"
    },
    "sitemap_valide": {
     "verdict": "réussi",
     "valeur": "44 URL, lastmod max 2026-09-21",
     "source": "raw/immorun.be.json › sitemap, robots.sitemaps_declares"
    },
    "jsonld_metier": {
     "verdict": "échoué",
     "valeur": "génériques seulement : BreadcrumbList, ListItem, Organization, WebPage, WebSite",
     "source": "raw/immorun.be.json › accueil.jsonld_types"
    },
    "organization": {
     "verdict": "échoué",
     "valeur": "name « Batirun » ; description absente ; url https://immorun.be/",
     "source": "raw/immorun.be.home.html › script ld+json",
     "detail": "name « Batirun » ne correspond pas au domaine (copie d'un autre site)"
    },
    "title_h1": {
     "verdict": "réussi",
     "valeur": "title « Homepage - IMMORUN » ; h1 ×1 : « IMMORUN by Immobel »",
     "source": "raw/immorun.be.json › accueil.title, accueil.h1"
    },
    "hreflang": {
     "verdict": "échoué",
     "valeur": "absent (lang=en-GB)",
     "source": "raw/immorun.be.json › accueil.hreflang"
    },
    "reponse_directe": {
     "verdict": "échoué",
     "valeur": "Partiel : date 9 sept. 2027 en haut, concept en 2 phrases ; ville absente, prix absents",
     "source": "fondations/TABLEAU-DOMAINES.md"
    },
    "faits_chiffres": {
     "verdict": "échoué",
     "valeur": "adresse absent · téléphone absent · capacités absent · horaires absent · prix oui → 1/5",
     "source": "raw/immorun.be.json › accueil.tel, capacites_detectees, horaires_detectes, prix_detectes ; adresse : fondations/TABLEAU-DOMAINES.md"
    },
    "fraicheur": {
     "verdict": "réussi",
     "valeur": "sitemap 2026-09-21 ; dates visibles : 2027-09-09 ; années citées : 2024, 2025, 2026, 2027",
     "source": "raw/immorun.be.json › sitemap.lastmod_max, accueil.dates_visibles, accueil.annees_citees"
    },
    "erreurs": {
     "verdict": "réussi",
     "valeur": "aucune",
     "source": "raw/immorun.be.json › home, https_vers_http, liens_casses, sitemap.tests"
    },
    "rendu_sans_js": {
     "verdict": "réussi",
     "valeur": "591 mots dans le HTML livré (827 tokens)",
     "source": "raw/immorun.be.json › accueil.texte_mots"
    },
    "action_declaree": {
     "verdict": "échoué",
     "valeur": "aucune action déclarée ; agent-permissions.json et ai-plugin.json : 404, 404",
     "source": "raw/immorun.be.home.html ; raw/immorun.be.json › discovery",
     "detail": "canal humain relevé : Inscription via registration.sportero.be (plateforme Anacom) ; /inscriptions/ renvoie 404"
    }
   },
   "reussis": 7,
   "mesures": 13,
   "non_releves": 0,
   "score": 54
  },
  {
   "domaine": "immorun.lu",
   "marque": "Immorun Luxembourg",
   "pilier_releve": "Sport Events",
   "pilier": "sport-events",
   "plateforme": "All in One SEO (AIOSEO) 5.0.2, WordPress 7.1.3, WordPress, Brevo, Inscription course",
   "url_effective": "https://immorun.lu/",
   "releve_utc": "2026-10-21 13:57 UTC",
   "accueil": {
    "code": 200,
    "poids": "106 Ko",
    "temps_s": 0.21
   },
   "page_cle": "non releve",
   "criteres": {
    "robots_ia": {
     "verdict": "réussi",
     "valeur": "wildcard : partiel ; GPTBot : non cite ClaudeBot : non cite PerplexityBot : non cite ; UA IA simulés → GPTBot 200, ClaudeBot 200, PerplexityBot 200",
     "source": "raw/immorun.lu.json › robots, ua_tests"
    },
    "llms_txt": {
     "verdict": "réussi",
     "valeur": "présent (9 Ko)",
     "source": "raw/immorun.lu.json › discovery"
    },
    "sitemap_valide": {
     "verdict": "réussi",
     "valeur": "53 URL, lastmod max 2026-09-24",
     "source": "raw/immorun.lu.json › sitemap, robots.sitemaps_declares"
    },
    "jsonld_metier": {
     "verdict": "échoué",
     "valeur": "génériques seulement : BreadcrumbList, ListItem, Organization, WebPage, WebSite",
     "source": "raw/immorun.lu.json › accueil.jsonld_types"
    },
    "organization": {
     "verdict": "réussi",
     "valeur": "name « Immorun Luxembourg » ; description absente ; url https://immorun.lu/",
     "source": "raw/immorun.lu.home.html › script ld+json"
    },
    "title_h1": {
     "verdict": "réussi",
     "valeur": "title « Sport & Networking | Real Estate | IMMORUN Luxembourg » ; h1 ×1 : « IMMORUN Luxembourg powered by Immobel »",
     "source": "raw/immorun.lu.json › accueil.title, accueil.h1"
    },
    "hreflang": {
     "verdict": "échoué",
     "valeur": "absent (lang=en-GB)",
     "source": "raw/immorun.lu.json › accueil.hreflang"
    },
    "reponse_directe": {
     "verdict": "échoué",
     "valeur": "Partiel : date 1 juil. 2027 ; ville et prix absents ; EN uniquement",
     "source": "fondations/TABLEAU-DOMAINES.md"
    },
    "faits_chiffres": {
     "verdict": "échoué",
     "valeur": "adresse absent · téléphone absent · capacités absent · horaires absent · prix oui → 1/5",
     "source": "raw/immorun.lu.json › accueil.tel, capacites_detectees, horaires_detectes, prix_detectes ; adresse : fondations/TABLEAU-DOMAINES.md"
    },
    "fraicheur": {
     "verdict": "réussi",
     "valeur": "sitemap 2026-09-24 ; dates visibles : 2027-07-01 ; années citées : 2024, 2025, 2026, 2027",
     "source": "raw/immorun.lu.json › sitemap.lastmod_max, accueil.dates_visibles, accueil.annees_citees"
    },
    "erreurs": {
     "verdict": "réussi",
     "valeur": "aucune",
     "source": "raw/immorun.lu.json › home, https_vers_http, liens_casses, sitemap.tests"
    },
    "rendu_sans_js": {
     "verdict": "réussi",
     "valeur": "551 mots dans le HTML livré (771 tokens)",
     "source": "raw/immorun.lu.json › accueil.texte_mots"
    },
    "action_declaree": {
     "verdict": "échoué",
     "valeur": "aucune action déclarée ; agent-permissions.json et ai-plugin.json : 404, 404",
     "source": "raw/immorun.lu.home.html ; raw/immorun.lu.json › discovery",
     "detail": "canal humain relevé : Inscription via registration.sportero.be"
    }
   },
   "reussis": 8,
   "mesures": 13,
   "non_releves": 0,
   "score": 62
  },
  {
   "domaine": "impactrun.be",
   "marque": "Impactrun by Tero (Waterloo)",
   "pilier_releve": "Sport Events",
   "pilier": "sport-events",
   "plateforme": "All in One SEO (AIOSEO) 5.0.1.1, WordPress 7.1.3, Site Kit by Google 1.187.0, WordPress, Brevo",
   "url_effective": "https://impactrun.be/",
   "releve_utc": "2026-10-21 14:00 UTC",
   "accueil": {
    "code": 200,
    "poids": "89 Ko",
    "temps_s": 0.32
   },
   "page_cle": "impactrun.be/ -> 200 ; JSON-LD: Organization (+4 techniques) ; adresse absent, tel absent, capacites 0, horaires absent, prix oui",
   "criteres": {
    "robots_ia": {
     "verdict": "réussi",
     "valeur": "wildcard : tout ouvert ; GPTBot : non cite ClaudeBot : non cite PerplexityBot : non cite ; UA IA simulés → GPTBot 200, ClaudeBot 200, PerplexityBot 200",
     "source": "raw/impactrun.be.json › robots, ua_tests"
    },
    "llms_txt": {
     "verdict": "réussi",
     "valeur": "présent (7 Ko)",
     "source": "raw/impactrun.be.json › discovery"
    },
    "sitemap_valide": {
     "verdict": "réussi",
     "valeur": "39 URL, lastmod max 2026-10-07",
     "source": "raw/impactrun.be.json › sitemap, robots.sitemaps_declares"
    },
    "jsonld_metier": {
     "verdict": "échoué",
     "valeur": "génériques seulement : BreadcrumbList, ListItem, Organization, WebPage, WebSite",
     "source": "raw/impactrun.be.json › accueil.jsonld_types"
    },
    "organization": {
     "verdict": "échoué",
     "valeur": "name « Batirun » ; description « A WordPress website » ; url https://impactrun.be/",
     "source": "raw/impactrun.be.home.html › script ld+json",
     "detail": "name « Batirun » ne correspond pas au domaine (copie d'un autre site) ; description par défaut « A WordPress website »"
    },
    "title_h1": {
     "verdict": "réussi",
     "valeur": "title « IMPACTRUN | Sport & Networking » ; h1 ×1 : « IMPACTRUN by Tero »",
     "source": "raw/impactrun.be.json › accueil.title, accueil.h1"
    },
    "hreflang": {
     "verdict": "échoué",
     "valeur": "absent (lang=en-GB)",
     "source": "raw/impactrun.be.json › accueil.hreflang"
    },
    "reponse_directe": {
     "verdict": "échoué",
     "valeur": "Partiel : date 1 avril 2027 ; ville absente ; CTA « Register now » pointe vers une table ronde ESG",
     "source": "fondations/TABLEAU-DOMAINES.md"
    },
    "faits_chiffres": {
     "verdict": "échoué",
     "valeur": "adresse absent · téléphone absent · capacités absent · horaires absent · prix oui → 1/5",
     "source": "raw/impactrun.be.json › accueil.tel, capacites_detectees, horaires_detectes, prix_detectes ; adresse : fondations/TABLEAU-DOMAINES.md"
    },
    "fraicheur": {
     "verdict": "réussi",
     "valeur": "sitemap 2026-10-07 ; dates visibles : 2027-04-01 ; années citées : 2024, 2025, 2026, 2027",
     "source": "raw/impactrun.be.json › sitemap.lastmod_max, accueil.dates_visibles, accueil.annees_citees"
    },
    "erreurs": {
     "verdict": "échoué",
     "valeur": "ressources http:// dans une page https",
     "source": "raw/impactrun.be.json › home, https_vers_http, liens_casses, sitemap.tests"
    },
    "rendu_sans_js": {
     "verdict": "réussi",
     "valeur": "595 mots dans le HTML livré (833 tokens)",
     "source": "raw/impactrun.be.json › accueil.texte_mots"
    },
    "action_declaree": {
     "verdict": "échoué",
     "valeur": "aucune action déclarée ; agent-permissions.json et ai-plugin.json : 404, 404",
     "source": "raw/impactrun.be.home.html ; raw/impactrun.be.json › discovery",
     "detail": "canal humain relevé : Inscription Paylogic + registration.sportero.be"
    }
   },
   "reussis": 6,
   "mesures": 13,
   "non_releves": 0,
   "score": 46
  },
  {
   "domaine": "registration.sportero.be",
   "marque": "Plateforme d'inscription Sportero (Anacom)",
   "pilier_releve": "Sport Events",
   "pilier": "sport-events",
   "plateforme": "Microsoft-IIS/10.0",
   "url_effective": "https://registration.sportero.be/fr/nos-evenements",
   "releve_utc": "2026-10-21 14:03 UTC",
   "accueil": {
    "code": 200,
    "poids": "18 Ko",
    "temps_s": 0.45
   },
   "page_cle": "registration.sportero.be/fr/nos-evenements -> 200 ; JSON-LD: absent ; adresse absent, tel absent, capacites 0, horaires absent, prix absent",
   "criteres": {
    "robots_ia": {
     "verdict": "échoué",
     "valeur": "wildcard : Disallow: / ; GPTBot : non cite ClaudeBot : non cite PerplexityBot : non cite ; UA IA simulés → GPTBot 200, ClaudeBot 200, PerplexityBot 200",
     "source": "raw/registration.sportero.be.json › robots, ua_tests"
    },
    "llms_txt": {
     "verdict": "échoué",
     "valeur": "absent (404)",
     "source": "raw/registration.sportero.be.json › discovery"
    },
    "sitemap_valide": {
     "verdict": "échoué",
     "valeur": "absent ou illisible",
     "source": "raw/registration.sportero.be.json › sitemap, robots.sitemaps_declares"
    },
    "jsonld_metier": {
     "verdict": "échoué",
     "valeur": "aucun JSON-LD",
     "source": "raw/registration.sportero.be.json › accueil.jsonld_types"
    },
    "organization": {
     "verdict": "échoué",
     "valeur": "aucun nœud Organization",
     "source": "raw/registration.sportero.be.home.html"
    },
    "title_h1": {
     "verdict": "réussi",
     "valeur": "title « Nos évènements | Sportero » ; h1 ×1 : « Nos évènements »",
     "source": "raw/registration.sportero.be.json › accueil.title, accueil.h1"
    },
    "hreflang": {
     "verdict": "échoué",
     "valeur": "absent (lang=fr)",
     "source": "raw/registration.sportero.be.json › accueil.hreflang"
    },
    "reponse_directe": {
     "verdict": "échoué",
     "valeur": "Non : liste d'evenements chargee en JS (67 mots dans le HTML)",
     "source": "fondations/TABLEAU-DOMAINES.md"
    },
    "faits_chiffres": {
     "verdict": "échoué",
     "valeur": "adresse absent · téléphone absent · capacités absent · horaires absent · prix absent → 0/5",
     "source": "raw/registration.sportero.be.json › accueil.tel, capacites_detectees, horaires_detectes, prix_detectes ; adresse : fondations/TABLEAU-DOMAINES.md"
    },
    "fraicheur": {
     "verdict": "échoué",
     "valeur": "sitemap sans lastmod ; années citées : 2026",
     "source": "raw/registration.sportero.be.json › sitemap.lastmod_max, accueil.dates_visibles, accueil.annees_citees",
     "detail": "aucun lastmod dans le sitemap"
    },
    "erreurs": {
     "verdict": "réussi",
     "valeur": "aucune",
     "source": "raw/registration.sportero.be.json › home, https_vers_http, liens_casses, sitemap.tests"
    },
    "rendu_sans_js": {
     "verdict": "échoué",
     "valeur": "48 mots dans le HTML livré (67 tokens) ; début : « Contactez-nous FR NL EN Accueil Nos évènements Nos évènement… »",
     "source": "raw/registration.sportero.be.json › accueil.texte_mots"
    },
    "action_declaree": {
     "verdict": "échoué",
     "valeur": "aucune action déclarée ; agent-permissions.json et ai-plugin.json : 404, 404",
     "source": "raw/registration.sportero.be.home.html ; raw/registration.sportero.be.json › discovery",
     "detail": "canal humain relevé : Inscription (JS) ; API non documentee"
    }
   },
   "reussis": 2,
   "mesures": 13,
   "non_releves": 0,
   "score": 15
  },
  {
   "domaine": "terotrail.be",
   "marque": "Tero Trails 13-20-30 km (Rochefort, Waterloo)",
   "pilier_releve": "Sport Events",
   "pilier": "sport-events",
   "plateforme": "All in One SEO (AIOSEO) 4.9.7.2, WordPress 7.1.3, Site Kit by Google 1.180.0, WordPress, Brevo, Inscription course",
   "url_effective": "https://terotrail.be/",
   "releve_utc": "2026-10-21 14:01 UTC",
   "accueil": {
    "code": 200,
    "poids": "62 Ko",
    "temps_s": 0.33
   },
   "page_cle": "terotrail.be/ -> 200 ; JSON-LD: Organization (+4 techniques) ; adresse absent, tel absent, capacites 0, horaires absent, prix absent",
   "criteres": {
    "robots_ia": {
     "verdict": "réussi",
     "valeur": "wildcard : tout ouvert ; GPTBot : non cite ClaudeBot : non cite PerplexityBot : non cite ; UA IA simulés → GPTBot 200, ClaudeBot 200, PerplexityBot 200",
     "source": "raw/terotrail.be.json › robots, ua_tests"
    },
    "llms_txt": {
     "verdict": "réussi",
     "valeur": "présent (9 Ko)",
     "source": "raw/terotrail.be.json › discovery"
    },
    "sitemap_valide": {
     "verdict": "réussi",
     "valeur": "32 URL, lastmod max 2026-07-02",
     "source": "raw/terotrail.be.json › sitemap, robots.sitemaps_declares"
    },
    "jsonld_metier": {
     "verdict": "échoué",
     "valeur": "génériques seulement : BreadcrumbList, ListItem, Organization, WebPage, WebSite",
     "source": "raw/terotrail.be.json › accueil.jsonld_types"
    },
    "organization": {
     "verdict": "échoué",
     "valeur": "name « Batirun » ; description « Un site utilisant WordPress » ; url https://terotrail.be/",
     "source": "raw/terotrail.be.home.html › script ld+json",
     "detail": "name « Batirun » ne correspond pas au domaine (copie d'un autre site) ; description par défaut « Un site utilisant WordPress »"
    },
    "title_h1": {
     "verdict": "réussi",
     "valeur": "title « TERO Trail » ; h1 ×1 : « Tero Trails 13 · 20 · 30 km »",
     "source": "raw/terotrail.be.json › accueil.title, accueil.h1"
    },
    "hreflang": {
     "verdict": "réussi",
     "valeur": "fr, nl, nl-BE",
     "source": "raw/terotrail.be.json › accueil.hreflang"
    },
    "reponse_directe": {
     "verdict": "échoué",
     "valeur": "Partiel : date 8 mars 2026 (passee) et lieu Rochefort ; prix absents",
     "source": "fondations/TABLEAU-DOMAINES.md"
    },
    "faits_chiffres": {
     "verdict": "échoué",
     "valeur": "adresse absent · téléphone absent · capacités absent · horaires absent · prix absent → 0/5",
     "source": "raw/terotrail.be.json › accueil.tel, capacites_detectees, horaires_detectes, prix_detectes ; adresse : fondations/TABLEAU-DOMAINES.md"
    },
    "fraicheur": {
     "verdict": "échoué",
     "valeur": "sitemap 2026-07-02 ; dates visibles : 2026-03-08 ; années citées : 2026",
     "source": "raw/terotrail.be.json › sitemap.lastmod_max, accueil.dates_visibles, accueil.annees_citees",
     "detail": "sitemap lastmod 2026-07-02 (> 90 j) ; date passée présentée : 2026-03-08"
    },
    "erreurs": {
     "verdict": "réussi",
     "valeur": "aucune",
     "source": "raw/terotrail.be.json › home, https_vers_http, liens_casses, sitemap.tests"
    },
    "rendu_sans_js": {
     "verdict": "réussi",
     "valeur": "599 mots dans le HTML livré (838 tokens)",
     "source": "raw/terotrail.be.json › accueil.texte_mots"
    },
    "action_declaree": {
     "verdict": "échoué",
     "valeur": "aucune action déclarée ; agent-permissions.json et ai-plugin.json : 404, 404",
     "source": "raw/terotrail.be.home.html ; raw/terotrail.be.json › discovery",
     "detail": "canal humain relevé : Inscription Paylogic (lien « offsale » = ferme)"
    }
   },
   "reussis": 7,
   "mesures": 13,
   "non_releves": 0,
   "score": 54
  },
  {
   "domaine": "tero.group",
   "marque": "Domaine parque (GoDaddy, a vendre) - PAS Tero",
   "pilier_releve": "-",
   "pilier": "hors-perimetre",
   "plateforme": "?",
   "url_effective": "https://tero.group/",
   "releve_utc": "2026-10-21 14:06 UTC",
   "accueil": {
    "code": 200,
    "poids": "0 Ko",
    "temps_s": 0.46
   },
   "page_cle": "non releve",
   "criteres": {
    "robots_ia": {
     "verdict": "échoué",
     "valeur": "wildcard : tout ouvert ; GPTBot : non cite ClaudeBot : non cite PerplexityBot : non cite ; UA IA simulés → GPTBot 403, ClaudeBot 403, PerplexityBot 403",
     "source": "raw/tero.group.json › robots, ua_tests"
    },
    "llms_txt": {
     "verdict": "réussi",
     "valeur": "présent (1 Ko)",
     "source": "raw/tero.group.json › discovery"
    },
    "sitemap_valide": {
     "verdict": "échoué",
     "valeur": "1 URL, lastmod absent ; déclaré dans robots.txt → /sitemap.xml (0)",
     "source": "raw/tero.group.json › sitemap, robots.sitemaps_declares"
    },
    "jsonld_metier": {
     "verdict": "échoué",
     "valeur": "aucun JSON-LD",
     "source": "raw/tero.group.json › accueil.jsonld_types"
    },
    "organization": {
     "verdict": "échoué",
     "valeur": "aucun nœud Organization",
     "source": "raw/tero.group.home.html"
    },
    "title_h1": {
     "verdict": "échoué",
     "valeur": "title absent ; h1 absent",
     "source": "raw/tero.group.json › accueil.title, accueil.h1"
    },
    "hreflang": {
     "verdict": "échoué",
     "valeur": "absent (lang=?)",
     "source": "raw/tero.group.json › accueil.hreflang"
    },
    "reponse_directe": {
     "verdict": "non relevé",
     "valeur": "n/a",
     "source": "fondations/TABLEAU-DOMAINES.md"
    },
    "faits_chiffres": {
     "verdict": "échoué",
     "valeur": "adresse absent · téléphone absent · capacités absent · horaires absent · prix absent → 0/5",
     "source": "raw/tero.group.json › accueil.tel, capacites_detectees, horaires_detectes, prix_detectes ; adresse : fondations/TABLEAU-DOMAINES.md"
    },
    "fraicheur": {
     "verdict": "échoué",
     "valeur": "sitemap sans lastmod",
     "source": "raw/tero.group.json › sitemap.lastmod_max, accueil.dates_visibles, accueil.annees_citees",
     "detail": "aucun lastmod dans le sitemap"
    },
    "erreurs": {
     "verdict": "échoué",
     "valeur": "robots.txt déclare /sitemap.xml → 0",
     "source": "raw/tero.group.json › home, https_vers_http, liens_casses, sitemap.tests"
    },
    "rendu_sans_js": {
     "verdict": "échoué",
     "valeur": "0 mots dans le HTML livré (0 tokens)",
     "source": "raw/tero.group.json › accueil.texte_mots"
    },
    "action_declaree": {
     "verdict": "échoué",
     "valeur": "aucune action déclarée ; agent-permissions.json et ai-plugin.json : 200, 200",
     "source": "raw/tero.group.home.html ; raw/tero.group.json › discovery",
     "detail": "canal humain relevé : n/a"
    }
   },
   "reussis": 1,
   "mesures": 12,
   "non_releves": 1,
   "score": 8
  }
 ],
 "notes_releve": [
  "tero.be derriere Cloudflare : robots.txt autorise GPTBot/ClaudeBot/CCBot/Google-Extended mais le fetcher Anthropic (WebFetch) recoit 403 sur toutes les pages HTML testees (/fr/, /en/, /fr/lieux/..., /fr/sitemap_index.xml) et 200 sur robots.txt et llms.txt (fichiers .txt). Les UA GPTBot/ClaudeBot/PerplexityBot simules recoivent un challenge « Just a moment... » (403) ; un UA Chrome passe. La couche bot Cloudflare contredit le robots.txt : a verifier dans Cloudflare > Security > Bots et les logs.",
  "tero.be/sitemap.xml (declare dans robots.txt) = 404 ; le vrai index est /fr/sitemap_index.xml (296 URL, lastmod 2026-10-20).",
  "llms.txt : tero.be (Rank Math, 275 liens bruts dont « Theme Parts », en /fr /nl /en), garisart, immorun.be/.lu, batirun, bouwrun, impactrun, terotrail (All in One SEO, generes automatiquement, sans faits). Absent sur 11 domaines. Aucun llms-full.txt.",
  "Deux sites Nuxt sans rendu serveur : teropadelclub.be et riverwoodsbeachclub.be livrent « Loading... » (5-7 mots) ; aucune page (clubs, prix, contact) n'est lisible sans JavaScript. Confirme par WebFetch.",
  "registration.sportero.be (inscriptions de toutes les courses) : robots.txt Disallow: / et contenu charge en JS ; dates et prix d'inscription invisibles aux IA.",
  "Marques sans domaine propre (Lodges Jalhay/Francorchamps/Ster/Herbeumont/Rochefort, House17, River House, Eventhouse Waterloo, Foresthouse Martue, Lime, Nest Zwin, Padel Louise, Teroir traiteur, Team Building, Padel Academy) : pages tero.be sans JSON-LD metier, sans telephone, sans prix ; capacites presentes en texte.",
  "Erreurs : tero.lu certificat TLS invalide (sert tero.be en http) ; tero.group = domaine parque GoDaddy (pas Tero) ; immorun.be/inscriptions/ 404 lie depuis l'accueil ; tero.be/fr/faqs/ 404 lie dans le pied de page ; ressources http:// dans des pages https (tero.be, knokkeout.com, malleposte.net, impactrun.be, bouwrun.be, teroirdemagerotte.be) ; impactrun « REGISTER NOW » pointe vers une table ronde ESG.",
  "Fraicheur : dates passees affichees comme a venir (terotrail 8 mars 2026, buildandrun 8 oct 2026, brusselspremierpadel 19-26 avril 2026) ; copyright 2023 (teroir.be), 2024 (malleposte), 2025 (tero.be).",
  "Bonnes bases : knokkeout.com (FAQPage, hreflang FR/NL/EN, adresse + tel + dates), terblock.be (EventVenue, LodgingBusiness, FAQPage, PostalAddress), bistro17.lu (adresse, tel, horaires, Zenchef), malleposte.net (prix, tel, moteur de reservation).",
  "Donnees brutes : raw/<domaine>.json (robots complet, UA tests, liens, faits) et raw/keypages/*.json."
 ],
 "requetes": {
  "total": 23,
  "liste": [
   {
    "num": 1,
    "requete": "team building nature près de Bruxelles",
    "resultats": [
     {
      "moteur": "Recherche web (US)",
      "variante": null,
      "domaines_cites": "funbooker.com ×7, surfoffice.com, environnement.brussels",
      "tero_present": "Non",
      "statut": "absent",
      "concurrent": "funbooker.com (catégorie « Team Building à Bruxelles »)",
      "pourquoi": "Page catégorie : H1 = requête, intro-réponse, 17 offres avec prix/personne (7-60 €), 4,8/5 sur 129 270 avis agrégés, FAQ, © 2026. Aucune offre nature, mais aucun concurrent ne couvre « nature + Bruxelles » : créneau vide."
     },
     {
      "moteur": "Claude",
      "variante": null,
      "domaines_cites": "Forêt de Soignes / Domaine de La Hulpe, Aventure Parc Wavre, Teambuilding.be, Funbooker, Koezio (indoor, écarté)",
      "tero_present": "Non",
      "statut": "absent",
      "concurrent": "Domaine de La Hulpe (lieu)",
      "pourquoi": "Entité notoire, « nature + proche Bruxelles » littéralement. Tero n'est pas associé dans ma mémoire à « nature près de Bruxelles » (Terblock = Overijse, non relié)."
     }
    ]
   },
   {
    "num": 2,
    "requete": "séminaire résidentiel Ardennes pour 40 personnes",
    "resultats": [
     {
      "moteur": "Recherche web (US)",
      "variante": null,
      "domaines_cites": "infosenior.public.lu ×3 (bruit), aleou.fr ×4, abcsalles.com, centerparcs.fr",
      "tero_present": "Non",
      "statut": "absent",
      "concurrent": "centerparcs.fr (Les Ardennes, Vielsalm)",
      "pourquoi": "Page dédiée séminaires : capacités par salle (220 plénière, 48/30/26), 350 cottages / 1 700 lits, adresse + coordonnées GPS, 11 témoignages clients nommés, 6 langues, CTA devis + brochure."
     },
     {
      "moteur": "Claude",
      "variante": null,
      "domaines_cites": "Domaine des Hautes Fagnes (Ovifat), Floreal La Roche, Château de Harzé, Van der Valk, Durbuy Adventure",
      "tero_present": "Non",
      "statut": "absent",
      "concurrent": "Domaine des Hautes Fagnes",
      "pourquoi": "Hôtel-séminaire connu, chiffres de capacité mémorisés. Les Tero Lodges ne sont pas encodés comme « séminaire résidentiel »."
     }
    ]
   },
   {
    "num": 3,
    "requete": "gîte de groupe Ardennes 30 personnes avec piscine",
    "resultats": [
     {
      "moteur": "Recherche web (US)",
      "variante": null,
      "domaines_cites": "grandsgites.com ×3, mediavacances.com, gites.fr ×2, holidu.fr ×3",
      "tero_present": "Non",
      "statut": "absent",
      "concurrent": "grandsgites.com (liste « gîte groupe Ardennes »)",
      "pourquoi": "15 gîtes, filtres de capacité (12→100+), tag piscine, commune + capacité par fiche, « 0 % frais ». Biais géo : Ardennes françaises (08)."
     },
     {
      "moteur": "Claude",
      "variante": null,
      "domaines_cites": "Ardennes-Etape, Gîtes de Wallonie, Belvilla, Ardenne Résidences",
      "tero_present": "Non",
      "statut": "absent",
      "concurrent": "Ardennes-Etape",
      "pourquoi": "Marketplace dominante, filtres piscine/capacité. Tero Lodges inconnus comme « gîte avec piscine »."
     }
    ]
   },
   {
    "num": 4,
    "requete": "location château pour séminaire Brabant wallon",
    "resultats": [
     {
      "moteur": "Recherche web (US)",
      "variante": null,
      "domaines_cites": "1001salles.com ×5, abcsalles.com ×3, eventplanner.net",
      "tero_present": "Non",
      "statut": "absent",
      "concurrent": "1001salles.com (Château de l'Ardoisière, Jodoigne)",
      "pourquoi": "Fiche structurée : adresse, 300 debout / 200 assis, 4 salles, 17 chambres / 34 lits, 4,5 ha, 35 min Bruxelles, partenaire depuis 13 ans."
     },
     {
      "moteur": "Claude",
      "variante": null,
      "domaines_cites": "Martin's Château du Lac (Genval), Château de La Hulpe, Dolce La Hulpe, Château de Limelette",
      "tero_present": "Non",
      "statut": "absent",
      "concurrent": "Martin's Château du Lac",
      "pourquoi": "Entité forte, BW littéral. Château de Terblock : pas associé à Tero ni au BW (il est à Overijse)."
     }
    ]
   },
   {
    "num": 5,
    "requete": "traiteur farm to fork événement d'entreprise Belgique",
    "resultats": [
     {
      "moteur": "Recherche web (US)",
      "variante": null,
      "domaines_cites": "elle.be ×2, paperjam.lu, parismatch.be, dhnet.be, ccifrance-international.org, goodreads.com ×2, naboo.app",
      "tero_present": "Non",
      "statut": "absent",
      "concurrent": "dhnet.be (article Belgobon, traiteur à vélo, fournisseurs locaux)",
      "pourquoi": "Pas de gagnant net : aucun traiteur belge n'occupe « farm to fork ». Un article de presse avec fait saillant (150 pers., à vélo) suffit à gagner. Teroir dit « farm to table », jamais « farm to fork »."
     },
     {
      "moteur": "Claude",
      "variante": null,
      "domaines_cites": "Loriers Traiteur, Traiteur Paulus, Belgobon, Hungry Minds (incertain)",
      "tero_present": "Non",
      "statut": "absent",
      "concurrent": "Loriers",
      "pourquoi": "Notoriété B2B. « Teroir » n'est pas une entité que je nomme spontanément."
     }
    ]
   },
   {
    "num": 6,
    "requete": "restaurant Knokke-Zoute terrasse",
    "resultats": [
     {
      "moteur": "Recherche web (US)",
      "variante": null,
      "domaines_cites": "mapstr.com, overnameweb.be ×2, overnamemarkt.be, frommers.com, gillespudlowski.com ×2, trip.com, wanderlog.com, dhnet.be",
      "tero_present": "Non",
      "statut": "absent",
      "concurrent": "La Terrasse du Zoute (via mapstr / trip.com)",
      "pourquoi": "Le nom contient la requête ; fiches annuaires avec adresse (Kustlaan 74), téléphone, horaires. Knokke Out et Nest Zwin Bistro n'ont pas de fiche « restaurant » indexable."
     },
     {
      "moteur": "Recherche web (US) — variante NL : « restaurant Knokke-Zoute terras »",
      "variante": "NL",
      "domaines_cites": "mapstr.com, overnameweb.be ×2, overnamemarkt.be, frommers.com, bellesdemeures.com ×2, openingsuren.vlaanderen, trip.com, wanderlog.com",
      "tero_present": "Non",
      "statut": "absent",
      "concurrent": "La Terrasse du Zoute",
      "pourquoi": "Idem. Résultats NL quasi identiques : pas de contenu NL Tero indexé."
     },
     {
      "moteur": "Claude",
      "variante": null,
      "domaines_cites": "Marie Siska, La Terrasse du Zoute (Lugano), Cuines 33, Bartholomeus, Zoute Café ; « Knokke Out » cité comme lieu festif, pas comme restaurant",
      "tero_present": "Marque (Knokke Out, ~6e, non attribué à Tero)",
      "statut": "marque",
      "concurrent": "Marie Siska",
      "pourquoi": "Terrasse iconique du Zoute. Knokke Out est mémorisé comme club/événementiel, pas comme adresse de terrasse."
     }
    ]
   },
   {
    "num": 7,
    "requete": "beach club Knokke",
    "resultats": [
     {
      "moteur": "Recherche web (US)",
      "variante": null,
      "domaines_cites": "rolci.desarrollo.edu.py (spam), wanderlog.com ×2, elle.be, pampam.city, dhnet.be (2003), la-reserve.be, bruxellessecrete.com, ecobnb.com",
      "tero_present": "Marque (River Woods Beach Club nommé dans le texte d'ecobnb, 9e)",
      "statut": "marque",
      "concurrent": "bruxellessecrete.com (listicle « best beach bars Belgian coast », 12/07/2026)",
      "pourquoi": "Listicle frais, une section par club avec adresse exacte + post Instagram ; Blue Buddha, Indi, La Plage, Baja, Belmondo, Karma. River Woods absent de ce listicle."
     },
     {
      "moteur": "Claude",
      "variante": null,
      "domaines_cites": "Surfers Paradise, Blue Buddha, Famouz, River Woods Beach Club, Knokke Out, Lakeside Paradise",
      "tero_present": "Marque (River Woods ~4e, Knokke Out ~5e, aucun attribué à Tero)",
      "statut": "marque",
      "concurrent": "Surfers Paradise",
      "pourquoi": "Le plus ancien, entité la plus documentée. River Woods connu comme club voile/sport, pas rattaché à Tero."
     }
    ]
   },
   {
    "num": 8,
    "requete": "hôtel Rochefort week-end famille",
    "resultats": [
     {
      "moteur": "Recherche web (US)",
      "variante": null,
      "domaines_cites": "lastminute.com ×3, france-voyage.com ×3, ardennes-etape.co.uk, all.accor.com, kayak.fr",
      "tero_present": "Non",
      "statut": "absent",
      "concurrent": "lastminute.com (Rochefort, Charente-Maritime)",
      "pourquoi": "Ambiguïté géographique totale : 8/9 résultats concernent Rochefort (France). Un seul lien belge (Ardennes-Etape). La Malle Poste absente."
     },
     {
      "moteur": "Claude",
      "variante": null,
      "domaines_cites": "Hôtel La Malle Poste (piscine, centre), Hôtel La Fayette, hôtels de Han-sur-Lesse, Château de Ravenstein (incertain)",
      "tero_present": "Marque (La Malle Poste 1re, non attribuée à Tero)",
      "statut": "marque",
      "concurrent": "La Malle Poste",
      "pourquoi": "Seul hôtel de Rochefort avec piscine intérieure mémorisé → réponse « famille ». Je ne sais pas spontanément qu'il est Tero."
     }
    ]
   },
   {
    "num": 9,
    "requete": "lieu de mariage Ardennes belges",
    "resultats": [
     {
      "moteur": "Recherche web (US)",
      "variante": null,
      "domaines_cites": "bridebook.com ×2, mariages.net ×5, 1001salles.com, math.mit.edu",
      "tero_present": "Non",
      "statut": "absent",
      "concurrent": "mariages.net (réceptions Ardennes)",
      "pourquoi": "18 lieux avec prix « à partir de », capacité min-max, note + nb d'avis, FAQ 6 questions, statistiques de prix (1 198 € / 2 870 € / 4 712 €). Biais : Ardennes françaises. Aucun lieu Tero listé."
     },
     {
      "moteur": "Claude",
      "variante": null,
      "domaines_cites": "Château de la Poste (Maillen), Domaine de Ronchinne, Château de Harzé, Château de Deulin, Les Sources",
      "tero_present": "Non",
      "statut": "absent",
      "concurrent": "Château de la Poste",
      "pourquoi": "Entité mariage très documentée. Les lodges Tero ne sont pas encodés « mariage »."
     }
    ]
   },
   {
    "num": 10,
    "requete": "teambuilding Luxembourg",
    "resultats": [
     {
      "moteur": "Recherche web (US)",
      "variante": null,
      "domaines_cites": "omega365.com ×2, danslenoir.com ×2, surfoffice.com ×2, croix-rouge.lu ×2, linkedin.com",
      "tero_present": "Non",
      "statut": "absent",
      "concurrent": "surfoffice.com (« 10 best team building activities in Luxembourg »)",
      "pourquoi": "Listicle numéroté, activités + lieux, 4 langues."
     },
     {
      "moteur": "Recherche web (US) — variante EN : « team building venue Luxembourg »",
      "variante": "EN",
      "domaines_cites": "naboo.app ×10",
      "tero_present": "Non (mais Tero River House et House 17 ont des fiches Naboo dans d'autres requêtes)",
      "statut": "absent",
      "concurrent": "naboo.app (pages programmatiques par ville)",
      "pourquoi": "Une page par ville, fourchette de prix (40-75 £/pers.), accès, lieux types. Tero est fournisseur sur Naboo mais pas dans ces 10 pages."
     },
     {
      "moteur": "Claude",
      "variante": null,
      "domaines_cites": "Rives de Clausen (ancienne brasserie), House 17 (business club), Mondorf Domaine Thermal, Luxexpo, escape games",
      "tero_present": "Marque (House 17 ~2e, non attribué à Tero)",
      "statut": "marque",
      "concurrent": "Rives de Clausen",
      "pourquoi": "Lieu notoire. « Tero River House » = ex-Knokke Out Luxembourg, pas encodé sous ce nom."
     }
    ]
   },
   {
    "num": 11,
    "requete": "club de padel Waterloo",
    "resultats": [
     {
      "moteur": "Recherche web (US)",
      "variante": null,
      "domaines_cites": "dhnet.be, playtomic.com ×8 (tero-padel-club-waterloo), clusters.wallonie.be (PDF)",
      "tero_present": "Marque 1re (Tero Padel Club Waterloo) mais domaine teropadelclub.be absent",
      "statut": "domaine",
      "concurrent": "playtomic.com",
      "pourquoi": "Fiche Playtomic : adresse (Chaussée de Tervuren 389), horaires 8-23 h, 9 terrains couverts, services, prix tournois (40 €) et abonnement (299 €/an). teropadelclub.be = coquille Nuxt (4,5 Ko, aucun texte, aucune meta description, aucun lien vers le site officiel depuis Playtomic)."
     },
     {
      "moteur": "Claude",
      "variante": null,
      "domaines_cites": "Tero Padel Club Waterloo (ex-Knokke Out, 2023, Justine Henin), réservation Playtomic ; clubs voisins Lasne / Braine-l'Alleud",
      "tero_present": "Domaine/marque 1re",
      "statut": "domaine",
      "concurrent": "—",
      "pourquoi": "Entité connue, inauguration médiatisée."
     }
    ]
   },
   {
    "num": 12,
    "requete": "padel Bruxelles Louise réservation",
    "resultats": [
     {
      "moteur": "Recherche web (US)",
      "variante": null,
      "domaines_cites": "playtomic.com ×8 (tero-padel-club-louise), dhnet.be, lalibre.be",
      "tero_present": "Marque 1re, domaine absent",
      "statut": "domaine",
      "concurrent": "playtomic.com",
      "pourquoi": "Fiche : rue du Beau Site 26, 7 terrains indoor, horaires 7-23 h, services, Americano 20 €. Même cause qu'en Q11."
     },
     {
      "moteur": "Claude",
      "variante": null,
      "domaines_cites": "Tero Padel Club Louise (rue du Beau Site), Playtomic ; Garrincha Padel (Uccle)",
      "tero_present": "Marque 1re",
      "statut": "marque",
      "concurrent": "—",
      "pourquoi": "Entité connue."
     }
    ]
   },
   {
    "num": 13,
    "requete": "stage padel enfants Toussaint Brabant wallon",
    "resultats": [
     {
      "moteur": "Recherche web (US)",
      "variante": null,
      "domaines_cites": "quefaire.be, rtbf.be, lavenir.net ×5, dhnet.be, infosyvelines.fr",
      "tero_present": "Marque (Tero Padel Club Waterloo cité dans l'article dhnet, 8e)",
      "statut": "marque",
      "concurrent": "quefaire.be (agenda)",
      "pourquoi": "Aucun résultat ne répond : le seul « stage padel enfants » listé est à Courcelles (Hainaut). Créneau vide. Tero mentionne « stages kids » uniquement sur la page Lime."
     },
     {
      "moteur": "Claude",
      "variante": null,
      "domaines_cites": "Tero Padel Academy (Waterloo / Limelette), Lime – Justine Henin (Limelette), Lasne Padel",
      "tero_present": "Marque 1re-2e, avec réserve « vérifier les dates »",
      "statut": "marque",
      "concurrent": "—",
      "pourquoi": "Académie connue ; aucune date mémorisée → réponse prudente."
     }
    ]
   },
   {
    "num": 14,
    "requete": "cours de reformer pilates Waterloo",
    "resultats": [
     {
      "moteur": "Recherche web (US)",
      "variante": null,
      "domaines_cites": "ac-franchise.com (Club Pilates Waterloo), fs8.com (Canada), wellhub.com, classpass.* ×4, sortiraparis.com, tourismelandes.com",
      "tero_present": "Non",
      "statut": "absent",
      "concurrent": "Club Pilates Waterloo (via ac-franchise.com)",
      "pourquoi": "Article : adresse (Bd Henri Rolin 22), 200 m², date d'ouverture, offre -10 %. Ambiguïté Waterloo (Londres/Canada). terostudio.be a un JSON-LD SportsActivityLocation avec horaires mais n'est pas indexé ici."
     },
     {
      "moteur": "Claude",
      "variante": null,
      "domaines_cites": "Club Pilates Waterloo ; Tero Studio (hésitant, « récent, à vérifier »)",
      "tero_present": "Marque 2e, incertaine",
      "statut": "marque",
      "concurrent": "Club Pilates",
      "pourquoi": "Franchise mondiale, forte entité."
     }
    ]
   },
   {
    "num": 15,
    "requete": "club de tennis Arlon",
    "resultats": [
     {
      "moteur": "Recherche web (US)",
      "variante": null,
      "domaines_cites": "lavenir.net ×6, dhnet.be, paperjam.lu (Garisart), info-lux.com",
      "tero_present": "Marque (Garisart via paperjam, 3e) ; garisartsportsclub.be absent",
      "statut": "marque",
      "concurrent": "lavenir.net (résultats interclubs)",
      "pourquoi": "Presse locale fraîche (juin 2026). Garisart : title vide, JSON-LD Organization nommée « Batirun », pas de schéma SportsClub."
     },
     {
      "moteur": "Claude",
      "variante": null,
      "domaines_cites": "Royal Tennis Club Arlon, Garisart (tennis-squash-restaurant)",
      "tero_present": "Marque 2e, non attribuée à Tero",
      "statut": "marque",
      "concurrent": "RTC Arlon",
      "pourquoi": "Club historique."
     }
    ]
   },
   {
    "num": 16,
    "requete": "course à pied immobilier Bruxelles (Immorun)",
    "resultats": [
     {
      "moteur": "Recherche web (US)",
      "variante": null,
      "domaines_cites": "bx1.be ×2, bruxelles-j.be, uclouvain.be ×3, parismatch.be, be.brussels, jds.fr, chronicle.lu (ImmoRun Luxembourg 2019)",
      "tero_present": "Non (immorun.be absent ; 2e recherche « Immorun 2026 immorun.be » : 0 résultat)",
      "statut": "absent",
      "concurrent": "chronicle.lu (fiche événement 2019)",
      "pourquoi": "Fiche événement structurée (date, lieu, organisateur, lien). immorun.be : EN uniquement, title « Homepage - IMMORUN », Organization JSON-LD nommée « Batirun », pas de schéma Event, date 2027 présente mais non structurée."
     },
     {
      "moteur": "Claude",
      "variante": null,
      "domaines_cites": "Immorun by Immobel (relais par équipes + networking, Bruxelles, immorun.be) ; organisation Tero « probable, à vérifier »",
      "tero_present": "Marque 1re, attribution Tero incertaine",
      "statut": "marque",
      "concurrent": "—",
      "pourquoi": "Événement connu."
     }
    ]
   },
   {
    "num": 17,
    "requete": "course de la construction Belgique (Batirun)",
    "resultats": [
     {
      "moteur": "Recherche web (US)",
      "variante": null,
      "domaines_cites": "lavenir.net, uliege.be ×2, gotrail.run, running.life, classiques-garnier.com ×2, bon.be, leforem.be",
      "tero_present": "Marque (Batirun Liège via gotrail.run / running.life, 4e-5e) ; batirun.be absent",
      "statut": "marque",
      "concurrent": "gotrail.run",
      "pourquoi": "Fiche calendrier : date (18/06/2026), lieu (SL16), distances 3-6-9 km, format équipes, organisateur Franki. batirun.be : fr-FR, Organization description « Un site utilisant WordPress », pas d'Event schema, pas de NL."
     },
     {
      "moteur": "Claude",
      "variante": null,
      "domaines_cites": "Batirun by Franki (Liège), Bouwrun (Flandre), Build & Run (Bruxelles)",
      "tero_present": "Marque 1re, non attribuée à Tero",
      "statut": "marque",
      "concurrent": "—",
      "pourquoi": "Noms d'événements connus."
     }
    ]
   },
   {
    "num": 18,
    "requete": "trail Ardennes 2027 inscription",
    "resultats": [
     {
      "moteur": "Recherche web (US)",
      "variante": null,
      "domaines_cites": "werun.world, milesrepublic.com ×3, jds.fr, gotrail.run ×4",
      "tero_present": "Non",
      "statut": "absent",
      "concurrent": "gotrail.run (calendrier Ardennes 2026-2027)",
      "pourquoi": "Calendrier structuré par région et date, liste d'attente Trail des Fantômes (07/08/2027). terotrail.be affiche encore « Waterloo 30/11/25 – Rochefort 08/03/26 » ; la date 29/11/2026 n'existe que sur trainerday.com."
     },
     {
      "moteur": "Claude",
      "variante": null,
      "domaines_cites": "Trail des Fantômes, Ardennes Méga Trail (FR), Les Crêtes de Spa, Xtrail Malmedy",
      "tero_present": "Non",
      "statut": "absent",
      "concurrent": "Trail des Fantômes",
      "pourquoi": "Événement emblématique. Tero Trail inconnu."
     }
    ]
   },
   {
    "num": 19,
    "requete": "tournoi padel Bruxelles 2027",
    "resultats": [
     {
      "moteur": "Recherche web (US)",
      "variante": null,
      "domaines_cites": "forbes.be, lalibre.be ×3, bx1.be ×3, belfius.be, dhnet.be",
      "tero_present": "Marque (Lotto Brussels Premier Padel partout) ; brusselspremierpadel.be absent",
      "statut": "marque",
      "concurrent": "lalibre.be / forbes.be (presse)",
      "pourquoi": "Presse fraîche avec chiffres (89 500 visiteurs 2026, contrat 2027-2037). Site officiel : title vide, description figée « April 19-26th 2026 », EN seul, Organization « Batirun », pas d'Event 2027."
     },
     {
      "moteur": "Claude",
      "variante": null,
      "domaines_cites": "Lotto Brussels Premier Padel (Tour & Taxis, avril) ; organisateur « lié à Tero, à vérifier »",
      "tero_present": "Marque 1re, attribution incertaine",
      "statut": "marque",
      "concurrent": "—",
      "pourquoi": "Événement connu."
     }
    ]
   },
   {
    "num": 20,
    "requete": "12 km Anderlecht inscription",
    "resultats": [
     {
      "moteur": "Recherche web (US)",
      "variante": null,
      "domaines_cites": "bx1.be ×4, dhnet.be ×2, anderlecht.be ×2 (PDF), endorphinsrunning.com",
      "tero_present": "Non (12kmanderlecht.be absent)",
      "statut": "absent",
      "concurrent": "bx1.be (actualités) + anderlecht.be (communiqués)",
      "pourquoi": "Presse et commune : dates, 5 000 participants 2026, ouverture inscriptions. Site : title « Rendez-vous en juin 2027 », FR + NL, JSON-LD Yoast (WebPage, pas Event), inscription externe njuko."
     },
     {
      "moteur": "Claude",
      "variante": null,
      "domaines_cites": "12 km d'Anderlecht (12kmanderlecht.be, juin, njuko), 20 km de Bruxelles",
      "tero_present": "Marque 1re, non attribuée à Tero",
      "statut": "marque",
      "concurrent": "—",
      "pourquoi": "Événement connu."
     }
    ]
   },
   {
    "num": 21,
    "requete": "Tero Group Belgique",
    "resultats": [
     {
      "moteur": "Recherche web (US)",
      "variante": null,
      "domaines_cites": "be.indeed.com ×2, naboo.app ×2, linkedin.com, signumi.com ×2, spa-francorchamps.be (Tero Lodge Jalhay), guide.michelin.com (Tero Saint-Gilles, homonyme), wikipedia (Tero Entertainment, homonyme)",
      "tero_present": "Non : tero.be absent des 10 liens ; marque via 7 tiers",
      "statut": "marque",
      "concurrent": "be.indeed.com / naboo.app",
      "pourquoi": "Pages tiers riches en entités (offres d'emploi, fiches lieux). tero.be/fr/tero-group/ a 3 H1, pas de chiffres, pas de dirigeants nommés, pas de Wikidata ; collision de nom avec le restaurant Tero (Saint-Gilles) et Tero Entertainment."
     },
     {
      "moteur": "Claude",
      "variante": null,
      "domaines_cites": "Tero (groupe belge : ex-Knokke Out, padel, traiteur Teroir, team building, lodges, B Corp, frères Lhoist), tero.be",
      "tero_present": "Domaine 1re",
      "statut": "domaine",
      "concurrent": "—",
      "pourquoi": "Connu comme entité."
     }
    ]
   },
   {
    "num": 22,
    "requete": "groupe hospitalité loisirs événements sportifs Belgique",
    "resultats": [
     {
      "moteur": "Recherche web (US)",
      "variante": null,
      "domaines_cites": "seatunique.com, dhnet.be, rtbf.be, be.indeed.com, gust.com, antwerpconventionbureau.be ×2, hospitality-on.com, lalibre.be (Golazo)",
      "tero_present": "Non",
      "statut": "absent",
      "concurrent": "Golazo (via lalibre.be)",
      "pourquoi": "Seul groupe nommé pour « événements sportifs » ; Tero n'a aucune page qui porte ces trois mots ensemble."
     },
     {
      "moteur": "Claude",
      "variante": null,
      "domaines_cites": "Golazo, Tero, Martin's Hotels, Sportizon",
      "tero_present": "Marque 2e",
      "statut": "marque",
      "concurrent": "Golazo",
      "pourquoi": "Golazo = référence événements sportifs ; Tero vient en 2e pour le triptyque."
     }
    ]
   },
   {
    "num": 23,
    "requete": "qui est Tero (Arthur Lhoist, Nicolas Lhoist)",
    "resultats": [
     {
      "moteur": "Recherche web (US)",
      "variante": null,
      "domaines_cites": "wikipedia ×2 (Léon Lhoist, J.-P. Berghmans), lhoist.com ×2, bitscale.ai ×2, builtinla.com, vrt.be ×2",
      "tero_present": "Non : capture totale par le groupe chaufournier Lhoist",
      "statut": "absent",
      "concurrent": "lhoist.com / wikipedia",
      "pourquoi": "Entité Lhoist (chaux) écrase l'entité Tero ; aucune page Tero ne nomme ses fondateurs de façon indexable ; pas de Wikipedia/Wikidata."
     },
     {
      "moteur": "Claude",
      "variante": null,
      "domaines_cites": "Tero = groupe fondé par Nicolas Lhoist (CEO) avec Arthur et Jérôme Lhoist, héritiers de la famille Lhoist, tero.be",
      "tero_present": "Domaine 1re",
      "statut": "domaine",
      "concurrent": "—",
      "pourquoi": "Connu."
     }
    ]
   }
  ],
  "synthese": {
   "claude_nomme_tero": {
    "valeur": 6,
    "total": 23
   },
   "web_domaine_top10": {
    "valeur": 0,
    "total": 25
   },
   "web_marque_via_tiers": {
    "valeur": 10,
    "total": 25
   },
   "claude_marque_sans_attribution": {
    "valeur": 8,
    "total": 23
   }
  },
  "moteurs": [
   {
    "moteur": "Recherche web (index type Bing/Brave)",
    "interroge": "Oui, 25 requêtes (23 + variante NL Q6 + variante EN Q10)",
    "outil": "WebSearch (Claude Code)",
    "limite": "Géolocalisation États-Unis, pas Belgique. Les SERP belges (Google.be) rangeraient très probablement tero.be / teropadelclub.be / immorun.be plus haut sur les requêtes de marque. La colonne « domaines cités » reflète donc la visibilité *hors signal géographique*, ce qui est proche de la façon dont un assistant IA sans localisation utilisateur voit le web."
   },
   {
    "moteur": "Claude (moi, neutre, sans accès au brief ni aux fichiers)",
    "interroge": "Oui, 23 requêtes",
    "outil": "Réponse rédigée comme à un particulier belge, puis relevé des marques",
    "limite": "Connaissances paramétriques (coupure juin 2026), pas de navigation. Une « citation » = marque nommée spontanément dans la réponse."
   },
   {
    "moteur": "ChatGPT",
    "interroge": "Non interrogé",
    "outil": "Aucune API ni accès navigateur disponible dans cette session",
    "limite": "Voir PROMPTS-MANUELS.md"
   },
   {
    "moteur": "Gemini",
    "interroge": "Non interrogé",
    "outil": "idem",
    "limite": "idem"
   },
   {
    "moteur": "Perplexity",
    "interroge": "Non interrogé",
    "outil": "idem",
    "limite": "idem"
   }
  ]
 },
 "taches": {
  "total": 13,
  "completables": 0,
  "lisibles": 6,
  "echelle": [
   {
    "niveau": 0,
    "sens": "l'agent ne voit rien d'exploitable ou l'action est fermée."
   },
   {
    "niveau": 1,
    "sens": "l'agent trouve le canal (formulaire, téléphone, plateforme) mais ne peut ni lire une disponibilité ou un prix, ni conclure (compte ou captcha bloquant)."
   },
   {
    "niveau": 2,
    "sens": "l'agent lit disponibilités et/ou prix et peut pré-remplir, mais la conclusion exige un compte, un paiement in-app ou un captcha."
   },
   {
    "niveau": 3,
    "sens": "complétable de bout en bout par un agent navigateur."
   }
  ],
  "liste": [
   {
    "num": 1,
    "tache": "Réserver un terrain de padel · Tero Padel Club",
    "url": "https://teropadelclub.be/fr/terrains",
    "clics": "2 (Accueil → Terrains → lien Playtomic du club)",
    "mecanisme": "Tiers : Playtomic. 6 clubs, un playtomic.io/tenant/<id> chacun ; Waterloo = b2a5895b-….",
    "agent_peut": "Navigateur : lire les prix (Waterloo 56 € / 90 min ; terrain à l'année 1 950–3 000 €) sur teropadelclub.be ; lire créneaux libres et prix sur playtomic.com/clubs/tero-padel-club-waterloo?date=… (l'API playtomic.com/api/clubs/availability répond en JSON : sam. 24/10, 9 terrains, créneaux de 90 min à 56 EUR).",
    "blocages": "teropadelclub.be = SPA Nuxt sans SSR : WebFetch ne voit que « Loading… » (testé). Réservation Playtomic = compte joueur + paiement in-app, impossible au nom d'un tiers. robots.txt Playtomic interdit /api et ?date=. Aucune déclaration d'action.",
    "faisabilite": 2,
    "faisabilite_note": "2"
   },
   {
    "num": 2,
    "tache": "Demander un devis team building / séminaire · Tero Events",
    "url": "https://tero.be/fr/obtenir-un-devis/?tailor-made=residential-seminars&efficy=32",
    "clics": "3 (Accueil → Événements → Séminaires résidentiels → « Demander un devis »)",
    "mecanisme": "Formulaire natif WordPress (JetFormBuilder) → CRM Efficy. Champs typés : interested_in, tailor_made_event_type, tailor_made_event_people (number), …_date_from/_to (date), budget (select 40-80 … 200+ €/pers.), describe, first_name, surname, email, telephone + prefix, company, consentements.",
    "agent_peut": "Navigateur : lire les capacités (Jalhay 67 pers. : Sumo 44, Hamo 14, Nano 9 ; séminaire 90 pers.), la liste d'activités ; formulaire pré-remplissable (inputs natifs, required explicites). Aucun prix public.",
    "blocages": "Cloudflare renvoie 403 à WebFetch sur tout tero.be (testé sur 2 URL) et un défi Turnstile à Playwright sur une page : robots.txt dit « Allow » aux bots IA, Cloudflare dit non. reCAPTCHA v3 + _captcha_token. Cookie wall Cookiebot. Pas de <label> lisibles (placeholders seulement).",
    "faisabilite": 1,
    "faisabilite_note": "1"
   },
   {
    "num": 3,
    "tache": "Réserver un gîte · Tero Lodges (Jalhay, Francorchamps, Ster, Herbeumont, Rochefort)",
    "url": "https://tero.be/fr/lieux/gites/jalhay/",
    "clics": "3 (Accueil → Lieux → Gîtes → lodge), puis même formulaire de devis",
    "mecanisme": "Aucun moteur de réservation : « Demander un devis » uniquement (formulaire #2). Pas de domaine propre (terolodges.be n'existe pas).",
    "agent_peut": "Navigateur : capacités, chambres, adresse, photos. Rien de plus.",
    "blocages": "Pas de calendrier, pas de tarif, pas de minimum de nuits, pas de potentialAction. Mêmes blocages Cloudflare/captcha que #2. Les tiers (visitwallonia, naboo.app) décrivent mieux les lodges que Tero.",
    "faisabilite": 1,
    "faisabilite_note": "1"
   },
   {
    "num": 4,
    "tache": "Réserver une chambre · Hôtel La Malle Poste (Rochefort)",
    "url": "https://tero.be/fr/lieux/hotel/la-malle-poste-rochefort/",
    "clics": "3 (Accueil → Lieux → Hôtel)",
    "mecanisme": "Sur tero.be : « Demander un devis » uniquement. La réservation de chambre n'existe que via OTA (Hotels.com, Michelin, myboutiquehotel…). lamalleposte.com = antiquaire français homonyme ; malleposte.be → site tiers.",
    "agent_peut": "Navigateur : 24 chambres (Thermes : 14 doubles + 2 suites, 34 pers. ; annexe : 4 doubles + 1 suite), adresse.",
    "blocages": "Aucun moteur de réservation hôtelier direct, aucun prix, aucune disponibilité, pas de schema Hotel/LodgingBusiness. Un agent qui veut « réserver une chambre » part chez un OTA.",
    "faisabilite": 1,
    "faisabilite_note": "1"
   },
   {
    "num": 5,
    "tache": "Réserver une table · Knokke Out Zoute",
    "url": "https://knokkeout.com/ → https://bookknokkeoutzoute.tero.be/",
    "clics": "1 (« Reserveer mijn tafel »)",
    "mecanisme": "Tiers : RestomaxBook (SPA, API ws-cnc.restomax.com/api/v8/Booking). Flux : Guest → Date and Time → Information → Confirm.",
    "agent_peut": "Navigateur : nombre de personnes, créneau « Evening 19:00–21:15 », dates d'ouverture (10/10, 31/10, 31/12 : resto + club), tél. +32 50 60 12 26, mail magali.p@tero.be. knokkeout.com porte un schema FAQPage (bon point).",
    "blocages": "WebFetch : coquille vide « RestomaxBook ». API Restomax : 401 sans session. Site NL par défaut. Pas de schema Restaurant/ReserveAction.",
    "faisabilite": 2,
    "faisabilite_note": "2"
   },
   {
    "num": 6,
    "tache": "Réserver une table · Bistro Pilko (Waterloo, Louise, Lime, Garisart, Charleroi)",
    "url": "https://teropadelclub.be/fr/bistropilko · https://garisartsportsclub.be/bistropilko/",
    "clics": "1 (« Bistro Pilko » dans le menu)",
    "mecanisme": "Téléphone uniquement : Waterloo 0478 34 26 84, Louise 0488 98 72 02, Lime 0489 21 12 50, Garisart 0488 98 95 00. Horaires bar + cuisine affichés.",
    "agent_peut": "Navigateur : lire horaires et numéros, puis remettre la main à l'utilisateur pour appeler.",
    "blocages": "Pas de réservation en ligne ; numéros en texte brut (aucun lien tel: sur teropadelclub.be) ; SPA sans SSR (invisible pour WebFetch) ; aucun schema Restaurant/openingHoursSpecification. Le brief situe Pilko à Waterloo ; il existe dans 5 clubs.",
    "faisabilite": 1,
    "faisabilite_note": "1"
   },
   {
    "num": 7,
    "tache": "Réserver une table · Bistro 17 (Luxembourg)",
    "url": "https://bistro17.lu/ → https://bookings.zenchef.com/results?rid=370876&pid=1001",
    "clics": "1 (« Réserver en ligne »)",
    "mecanisme": "Tiers : Zenchef (widget WordPress + page bookings). Tél. +352 20 10 17 00.",
    "agent_peut": "Meilleur cas du groupe : WebFetch lit le lien Zenchef, le téléphone et les horaires ; l'API publique bookings-middleware.zenchef.com/getAvailabilitiesSummary?restaurantId=370876&date_begin=…&date_end=… renvoie en JSON les jours ouverts, les shifts (« Lunch », 1–10 pers.) et l'heure limite de réservation.",
    "blocages": "Confirmation Zenchef protégée par AWS WAF captcha SDK ; pas de schema Restaurant/ReserveAction sur bistro17.lu ; River Woods (Zenchef rid=387105) renvoie « Invalid restaurantId » (identifiant à vérifier).",
    "faisabilite": 2,
    "faisabilite_note": "2"
   },
   {
    "num": 8,
    "tache": "S'inscrire · Immorun (BE/LU)",
    "url": "https://immorun.be/register/ → https://registration.sportero.be/en/our-events",
    "clics": "2 (« REGISTER » → bouton plateforme)",
    "mecanisme": "Tiers : boutique Sportero / Anacom (e-commerce : compte, panier, CGV, paiement). Jotform pour les partenaires.",
    "agent_peut": "Navigateur : lire le concept et /info-prices/. La boutique « Our events » est vide.",
    "blocages": "Compte obligatoire avant toute inscription ; /registration/ dit encore « Registrations for IMMORUN 2026 are not yet open » (édition du 10/09/2026 déjà courue) ; aucune date 2027 ; schema Organization nommé « Batirun » (copier-coller).",
    "faisabilite": 1,
    "faisabilite_note": "1"
   },
   {
    "num": 9,
    "tache": "S'inscrire · Batirun (+ Bouwrun, Build & Run)",
    "url": "https://batirun.be/inscriptions/ → registration.sportero.be",
    "clics": "2 (« Inscris-toi » → « Je m'inscris »)",
    "mecanisme": "Même boutique Sportero ; guide PDF d'inscription ; « Me connecter / créer un compte ».",
    "agent_peut": "Navigateur : date 17/06/2027 lisible, procédure en 3 étapes lisible. Boutique vide (inscriptions pas ouvertes).",
    "blocages": "Compte obligatoire, aucune date d'ouverture des inscriptions, aucun prix sur la page, pas de schema SportsEvent.",
    "faisabilite": 1,
    "faisabilite_note": "1"
   },
   {
    "num": 10,
    "tache": "S'inscrire · Tero Trail",
    "url": "https://terotrail.be/inscriptions-3/ → https://shop.paylogic.com/…/offsale",
    "clics": "1 (« INSCRIS-TOI »)",
    "mecanisme": "Tiers : Paylogic, lien « offsale » (vente fermée). Dernière édition : Rochefort 08/03/26.",
    "agent_peut": "Rien : la page dit « inscriptions ouvertes », le lien est fermé.",
    "blocages": "Contenu périmé, aucune date 2027, pas de SportsEvent.",
    "faisabilite": 0,
    "faisabilite_note": "0"
   },
   {
    "num": 11,
    "tache": "S'inscrire · 12 km d'Anderlecht",
    "url": "https://12kmanderlecht.be/ → https://in.njuko.com/12kmanderlecht2026-1775648943049",
    "clics": "1 (lien njuko sur l'accueil)",
    "mecanisme": "Tiers : njuko (SPA Angular + salle d'attente Queue-it). API front-api.njuko.com publique en lecture.",
    "agent_peut": "Navigateur : 4 épreuves (12 km 18 €, 7 km 14 €, Kids 800 m / 400 m 5 €), date 21/06/2026, statut « Complet » partout. WebFetch lit les distances et « SOLD OUT 2026 », pas les prix.",
    "blocages": "Édition 2026 complète, édition « juin 2027 » sans lien ; Queue-it bloque les automates en pic ; njuko exige coordonnées + paiement. potentialAction présent mais inutile (ReadAction, SearchAction Yoast).",
    "faisabilite": 2,
    "faisabilite_note": "2 en lecture, 0 pour agir aujourd'hui"
   },
   {
    "num": 12,
    "tache": "Inscrire un enfant à un stage padel · Tero Padel Academy",
    "url": "https://teropadelclub.be/fr/academie → https://a4tp.be/teropadelclub.waterloo/camps",
    "clics": "2 (« Cours et Stages » → « Réservez un stage à … »)",
    "mecanisme": "Tiers : A4TP (plateforme Laravel/Codiix, Stripe, reCAPTCHA).",
    "agent_peut": "Navigateur : stage Toussaint 19–30/10/2026, 56 €/jour (Waterloo), 210 €/5 j (Garisart), options garderie, programme horaire, sans compte. teropadelclub.be annonce 180 €/stage (prix divergent).",
    "blocages": "« Book now » redirige vers /login : compte parent obligatoire, reCAPTCHA, paiement Stripe. SPA Nuxt invisible pour WebFetch.",
    "faisabilite": 2,
    "faisabilite_note": "2"
   },
   {
    "num": 13,
    "tache": "Réserver un cours reformer · Tero Studio (Lime, Namur, Garisart)",
    "url": "https://terostudio.be/reservations-lime/",
    "clics": "2 (Réservations → studio)",
    "mecanisme": "Tiers : widget bsport (iframe backoffice.bsport.io, API api.production.bsport.io/book/v1/offer). Réservation réelle = application mobile Tero Studio + compte + carte de cours.",
    "agent_peut": "Navigateur : planning de la semaine lisible (ex. mercredi 21/10, Reformer 17:30–18:20, Form Zone, Nora, tous niveaux, « Liste d'attente » / « Réserver »). WebFetch : planning vide (testé). Tarifs = widget bsport, invisibles sans JS.",
    "blocages": "Compte + achat de crédits dans l'app ; aucun prix en HTML ; pas de schema Course/Schedule.",
    "faisabilite": 2,
    "faisabilite_note": "2"
   }
  ],
  "signaux": [
   {
    "signal": "WebMCP (data-mcp-*, navigator.modelContext / mcpActions)",
    "constat": "Absent partout."
   },
   {
    "signal": "/mcp-actions.json, <link rel=\"mcp-actions\">, /.well-known/mcp.json, /openapi.json, /.well-known/ai-plugin.json",
    "constat": "404 partout (403 sur teropadelclub.be)."
   },
   {
    "signal": "schema.org potentialAction",
    "constat": "Seulement SearchAction/ReadAction générés par Yoast/RankMath (tero.be, 12km, BPP, teroir). Aucun ReserveAction, RegisterAction, BuyAction."
   },
   {
    "signal": "llms.txt",
    "constat": "Présent sur tero.be (RankMath), immorun.be, batirun.be, terotrail.be, garisartsportsclub.be (AIOSEO) : liste de pages, aucune action ni coordonnée. Absent sur teropadelclub.be, terostudio.be, 12km, bistro17.lu."
   },
   {
    "signal": "robots.txt",
    "constat": "tero.be autorise explicitement GPTBot, ClaudeBot, Google-Extended, CCBot… mais Cloudflare renvoie 403 aux fetchers non-navigateur : porte ouverte sur le papier, fermée en pratique."
   },
   {
    "signal": "Rendu",
    "constat": "SPA sans SSR : teropadelclub.be, riverwoodsbeachclub.be (Nuxt), bookknokkeoutzoute.tero.be (Restomax), in.njuko.com. Un agent sans JS n'y voit rien."
   },
   {
    "signal": "Captcha / anti-bot",
    "constat": "reCAPTCHA v3 (formulaires tero.be, A4TP), AWS WAF (Zenchef), Queue-it (njuko), Turnstile (Cloudflare tero.be)."
   },
   {
    "signal": "Comptes requis",
    "constat": "Playtomic, Sportero, A4TP, bsport/app Tero Studio, njuko (coordonnées + paiement)."
   },
   {
    "signal": "Contenu périmé",
    "constat": "immorun.be (« 2026 not yet open »), terotrail.be (lien offsale), 12km (lien 2026 complet), teropadelclub.be (« fin 2025 », stage 180 € vs 56 €/jour)."
   },
   {
    "signal": "Points positifs",
    "constat": "Zenchef et Playtomic exposent des disponibilités lisibles ; formulaire de devis tero.be natif et typé ; FAQPage sur knokkeout.com ; chatbot Zapier sur tero.be ; liens tel: sur tero.be/contact et bistro17.lu."
   }
  ]
 },
 "chantiers": [
  {
   "num": 1,
   "chantier": "Cloudflare tero.be : laisser passer les bots IA vérifiés",
   "impact": "Max",
   "effort": "1 h",
   "livrable": "Security > Bots : désactiver « Block AI bots » ; règle WAF *skip* pour cf.verified_bot_category in {\"AI Crawler\",\"AI Search\",\"Search Engine Crawler\"} ; relancer audit_domain.py tero.be + WebFetch jusqu'à 200"
  },
  {
   "num": 2,
   "chantier": "robots.txt unique sur les 20 domaines",
   "impact": "Haut",
   "effort": "2 h",
   "livrable": "Bloc ci-dessous ; corriger Sitemap: de tero.be (404 aujourd'hui) ; registration.sportero.be : remplacer Disallow: / par un Allow des pages événements"
  },
  {
   "num": 3,
   "chantier": "Rendu serveur des 2 sites Nuxt",
   "impact": "Haut",
   "effort": "2-5 j",
   "livrable": "ssr: true ou nuxt generate ; /en/tero-padel-club-waterloo et /en/prices doivent livrer adresse, prix, horaires en HTML ; title/description/h1 par route"
  },
  {
   "num": 4,
   "chantier": "llms.txt rédigé (tero.be + un par domaine)",
   "impact": "Haut",
   "effort": "1 j",
   "livrable": "Contenu ci-dessous, remplace la sortie Rank Math (275 liens bruts, « Theme Parts ») ; /llms-full.txt = concaténation Markdown des 17 fiches lieux"
  },
  {
   "num": 5,
   "chantier": "JSON-LD métier par pilier",
   "impact": "Haut",
   "effort": "2 j",
   "livrable": "Squelettes ci-dessous, par page (aujourd'hui : Organization + Article génériques)"
  },
  {
   "num": 6,
   "chantier": "Bloc « réponse directe » sous chaque h1",
   "impact": "Haut",
   "effort": "1 j",
   "livrable": "3 lignes : qui (marque + pilier), quoi (service, capacité), où (adresse complète), combien (prix « dès » ou « sur devis ») ; h1 descriptif, slogan en sous-titre"
  },
  {
   "num": 7,
   "chantier": "Faits chiffrés sur les 17 fiches lieux",
   "impact": "Haut",
   "effort": "1 j",
   "livrable": "Téléphone (absent sur 100 % de tero.be), adresse complète (seul le code postal est présent), horaires, prix dès, capacités → <table> HTML"
  },
  {
   "num": 8,
   "chantier": "Pages réponse + FAQPage pour les 23 requêtes",
   "impact": "Haut",
   "effort": "3 j",
   "livrable": "/fr/reponses/<intention>/ : réponse en 3 lignes, tableau comparatif des lieux Tero, FAQ (FAQPage), CTA devis. Modèles existants : knokkeout.com, terblock.be"
  },
  {
   "num": 9,
   "chantier": "hreflang FR/NL/EN",
   "impact": "Moyen",
   "effort": "1 j",
   "livrable": "13 domaines sans hreflang ; courses mono-langue (immorun EN, bouwrun NL) ; priorité padel et hospitality"
  },
  {
   "num": 10,
   "chantier": "Erreurs techniques",
   "impact": "Moyen",
   "effort": "0,5 j",
   "livrable": "tero.lu : certificat ou 301 ; immorun.be/inscriptions/ 404 (lié depuis l'accueil) ; tero.be/fr/faqs/ 404 (pied de page) ; impactrun « Register now » → table ronde ESG ; ressources http:// sur 6 domaines ; tero.group = domaine parqué tiers, ne pas citer"
  },
  {
   "num": 11,
   "chantier": "Fraîcheur",
   "impact": "Moyen",
   "effort": "0,5 j + process",
   "livrable": "Dates passées en « prochaine édition » (terotrail 8 mars 2026, buildandrun 8 oct 2026, Premier Padel avril 2026) ; copyright 2023-2025 ; dateModified, Event.startDate futur ou eventStatus"
  },
  {
   "num": 12,
   "chantier": "Couche action (agents)",
   "impact": "Moyen",
   "effort": "1 j",
   "livrable": "Hub /fr/reserver/ listant les liens profonds (Playtomic, Zenchef rid 370876, Cubilis, Njuko, Paylogic, RestomaxBook) ; potentialAction: ReserveAction ; flux JSON/ICS public des épreuves ; agent-permissions.json (quote, book, register)"
  }
 ]
}