EXPERT 04 — SOCLE SEO/GEO, ENTITÉS DE MARQUE ET ÉDITORIAL MULTILINGUE — TERO GROUP

Livrable : docs/design/EXPERT-04-SEO-GEO-EDITORIAL.md — socle exécutable pour tero.be (maison mère) et ses déclinaisons par pilier et par marque.

Auteur : expert 04 (SEO/GEO, entités, éditorial multilingue). Date : 15 octobre 2026.

Méthode : relevé live du 15/10/2026 (tero.be, teropadelclub.be, terostudio.be, immorun.be) + lecture de docs/AUDIT-TERO-BE-2026.md, craft/tero-group-rules.md (v1.0.0), design-systems/tero-group/DESIGN.md, _ref/teropadelclub/.../tero-rules.md, _audit/path-geometry.json, + complément du lead du 15/10/2026 (domaines et marques actifs).

0. Comment lire ce document

Étiquettes opposables — toute affirmation porte l'une des trois :

ÉtiquetteSignificationConséquence
[MESURE]Constat vérifiable, relevé live ou dans un fichier du dépôt, chiffréOpposable immédiatement
[REGLE]Décision d'implémentation dérivée d'une mesure ou d'une contrainte techniqueOpposable à l'intégrateur
[À VALIDER CLIENT]Hypothèse de lecture, valeur manquante, arbitrage de marque non tranchéNe part jamais en production dans cet état

Convention de placeholder : tout littéral écrit <À FOURNIR: …> est un champ bloquant. Le contrôle QA check-placeholders (§ 6.5) fait échouer le build si la chaîne <À FOURNIR apparaît dans un artefact publié. C'est le garde-fou anti-invention.

Périmètre : ce document ne redéfinit pas les couleurs, la typographie, les rayons ni les composants (ils appartiennent à DESIGN.md). Il définit les entités, les domaines, les URL, les données structurées, les fichiers machine, le lexique multilingue et le modèle de contenu.

---

1. Challenge de l'existant — ce que les documents du lead disent faux ou incomplet

Chaque ligne est un écart mesuré entre la documentation existante et le relevé du 15/10/2026.

1.1 Erreurs factuelles à corriger

#Ce que dit le document existantCe que j'ai mesuré le 15/10/2026Correction exigéeÉtiquette
E1tero-group-rules.md § 5.1 règle 3, § 18, DESIGN.md § 8 : « TERO pour le mot-symbole, Tero dans la rédaction »_audit/logo-tero-2025.svg : viewBox 0 0 100 40, mot-symbole en minuscules ; _audit/path-geometry.json = 5 tracés dont le dernier glyphe = anneau (x 73,45→100 ; y 0,25→26,74) + barre (x 73,48→100 ; y 32,55→39,04), soit le o styliséLe mot-symbole s'écrit tero en minuscules. Seule la graphie rédactionnelle est Tero. La règle « TERO dans le logo » est fausse et doit disparaître de § 4.1, § 4.2, § 5.1, § 17.6, § 18 et DESIGN.md § 8/§ 9[MESURE]
E2AUDIT § 3.1 : le logo déclaré aux moteurs est « un anneau … qui ne contient ni le mot-symbole ni un monogramme lisible » ; tero-group-rules § 17.6 : « anneau 1272 × 1861 »TERO_MONOGRAM-1.png fait 1 272 × 1 861 = ratio 0,683, identique au ratio du glyphe o mesuré (26,5 × 38,8 unités = 0,683). Le fichier est le monogramme de marque (anneau + barre), pas « un anneau abstrait »Requalifier le défaut : le monogramme est légitime (favicon, app icon, avatar, filigrane) mais illégal comme Organization.logo. Ne pas demander sa suppression, demander son usage correct[MESURE]
E3tero-group-rules § 13.1-1 et AUDIT § 5-1 : « le nœud de page est typé Article … → doit être WebPage »Sur /fr/, /fr/tero-group/ et /fr/contact/ le graphe contient les deux : un nœud WebPage (@id …#webpage) et un nœud Article surnuméraire (@id …#richSnippet, avec headline, keywords, author, isPartOf: #webpage). Sur /fr/testimonials/ : CollectionPage, sans ArticleLa correction n'est pas « remplacer Article par WebPage » mais « supprimer le nœud Article surnuméraire sur toute page non éditoriale ». Un doublon WebPage + Article est un signal contradictoire au moins aussi mauvais[MESURE]
E4tero-group-rules § 13.1 : 5 défauts listésIl y en a au moins 3 de plus, non documentés : (a) l'@id de l'organisation est porté par la langue (https://tero.be/fr/#organization/, …/en/#organization/, …/nl/#organization/) → trois organisations distinctes ; (b) Organization.url = https://tero.be/fr sur les trois versions, y compris /en/ et /nl/ ; (c) Person @id également porté par la langue (`/frennl/author/lumisys/`)Ajouter ces trois corrections en tête de priorité : une seule organisation, un seul @id, url = https://tero.be/[MESURE]
E5tero-group-rules § 13.3 : « sitemap.xml par langue + index » ; AUDIT § 5 : « sitemaps par langue (Rank Math) »https://tero.be/robots.txt (994 octets) déclare Sitemap: https://tero.be/sitemap.xml → cette URL renvoie 404. L'index réel est https://tero.be/sitemap_index.xml (et /fr/, /nl/, /en/)Corriger la ligne Sitemap: du robots.txt. Aucun document existant ne le signale[MESURE]
E6tero-group-rules § 13.3 : « llms.txt et llms-full.txt décrivant le groupe… » — présenté comme une règle à appliquerhttps://tero.be/llms.txt existe déjà (200) mais c'est un fichier auto-généré par Rank Math : 76 779 caractères, 339 lignes, 275 liens FR, 0 lien NL, 0 lien EN, pas de bloc de résumé >, pas de ## Optional, aucune adresse, aucun téléphone, aucune mention des trois piliers, titres de sections issus du CMS interne (« Theme Parts », « Listing Items/Components »). llms-full.txt → 404 (sert une page HTML noindex avec GTM et Cookiebot)La règle « créer llms.txt » est fausse : il faut remplacer un fichier existant et désactiver la génération Rank Math. llms-full.txt doit être créé[MESURE]
E7tero-group-rules § 13.3 liste 10 agents IA à autoriser ; AUDIT § 5 dit « robots ouvert »Le robots.txt live autorise 8 agents (GPTBot, Google-Extended, ClaudeBot, AmazonBot, Applebot-Extended, Bytespider, CCBot, meta-externalagent). Absents : OAI-SearchBot, ChatGPT-User, PerplexityBot, Perplexity-User, Claude-User, Claude-SearchBot, Google-CloudVertexBot, Bingbot, Applebot, MistralAI-User. Et Bytespider est autorisé, alors que _ref/teropadelclub § 4.5 le bloqueFixer une liste unique groupe. Aujourd'hui les deux règles se contredisent[MESURE]
E8_ref/teropadelclub § 4.3 : hreflang ["fr-BE","nl-BE","en","x-default"] réciproques, x-default → FRLe site padel live sert 7 valeurs : en, en-GB, fr, fr-BE, nl, nl-BE, x-default — couples doublons (en + en-GB, fr + fr-BE, nl + nl-BE) qui se concurrencent ; la racine / a pour canonical https://teropadelclub.be/en (sans slash final) ; la page /fr/ n'expose aucun hreflang dans les 100 000 premiers caractères servis ; titre littéral **« homepageTero Padel Club »** sur les deuxLa règle padel est écrite mais non appliquée. Le socle groupe doit imposer un seul triplet et interdire les doublons région/global[MESURE]
E9tero-group-rules § 14 : « hreflang réciproque fr / en / nl + x-default »C'est exactement ce que sert tero.be (en, fr, nl, x-default → /fr/) : pas de code régionPasser à fr-BE / nl-BE / en / x-default. Point de vigilance : le groupe a aussi une adresse Luxembourg → fr-LU possible pour un futur site LU (immorun.lu)[MESURE] + [À VALIDER CLIENT]
E10tero-group-rules § 1.4-2 et § 6.3 : la maison mère n'est jamais présentée à platSur les 4 domaines testés : 0 occurrence de parentOrganization et 0 lien vers un llms.txt. terostudio.be et immorun.be déclarent leur propre Organization sans rattachement à TeroL'endossement doit être aussi dans les données structurées, pas seulement à l'écran[MESURE]
E11AUDIT § 5 : « og:image:width=800 / height=534 annoncés pour une image servie en 1024 × 683 »Confirmé sur /fr/ : og:image = …-1024x683.jpg, og:image:width = 800, og:image:height = 534Corriger. Norme cible : og:image en 1200 × 630[MESURE]
E12Non documenté/fr/testimonials/<slug>/ est listé dans le sitemap (testimonials-sitemap.xml) et donc indexable. La page liste a pour type CollectionPageTranché en § 4.5 : témoignages unitaires en noindex, follow sauf enrichissement (≥ 150 mots, nom, société, lieu, date)[MESURE] + [REGLE]
E13tero-group-rules § 1.3 cite garisart.be comme domaine du groupe ; AUDIT § 2.2 aussiComplément du lead (15/10/2026) : garisart.be redirige vers garisartsportsclub.be ; brusselspremierpadel.be redirige vers www.brusselspremierpadel.beLe domaine cité n'est pas le domaine final. Un domaine canonique doit être déclaré par marque : garisartsportsclub.be et www.brusselspremierpadel.be. Les listes § 1.3 de tero-group-rules et § 2.2 de AUDIT sont à corriger[MESURE] lead
E14Aucun document ne traite la co-endossementComplément du lead (15/10/2026) : immorun.be affiche la co-marque IMMOBEL dans son en-têteDeux organisations sur une même page exigent un modèle explicite, sinon les moteurs fusionnent ou arbitrent à tort → § 2.7[MESURE] lead

1.2 Manques structurels (le document existant ne les traite pas du tout)

#ManquePourquoi c'est bloquantOù c'est traité ici
M1Aucun modèle de contenu : pas de schéma de page, pas de contrat de fichiers, pas de type de blocsSans lui, chaque page réinvente ses champs : c'est la cause racine de la dérive mesurée (164 hex, 30 tailles, 15 rayons) transposée au contenu§ 6
M2Aucun lexique NL/EN : § 5.2 ne donne que le FRL'intégrateur NL/EN improvise → « teambuilding » est déjà dans le llms.txt live comme mot-clé, alors que § 5.2 l'interdit en FR§ 5.2
M3Aucune carte de mots-clés : § 13 ne cite aucun mot-clé cibleImpossible de mesurer la performance ; le padel a la sienne (11 lignes), le groupe aucune§ 5.5
M4Aucun inventaire de nœuds JSON-LD par type de page§ 13.2 liste des types en vrac, sans dire quelle page porte quel nœud — cause directe du défaut E3§ 2.5
M5Aucune règle de longueur (title, description, réponse citable)Le padel les a (§ 4.1, § 4.8) ; le groupe non§ 5.4
M6Aucun ton par pilier§ 5.1 donne un ton unique pour un groupe à trois publics§ 5.3
M7Aucun contrat QA chiffré : § 1.5 cite content/sources/site-expectations.json qui n'existe pas (ni content/, ni src/ dans le dépôt)La « discipline de vérification » § 19 décrit un build et une vérification qui n'ont pas de commande§ 6.4, § 6.5
M8Aucun plan de redirections§ 13.5 dit « 301 » sans liste, sans format, sans cible. Le groupe a 13 domaines et 399 pages§ 4.6
M9Aucune règle de consolidation d'entité (annuaires, GBP, Wikidata, NAP réseau)§ 13.4 dit « NAP identique partout » sans inventaire des lieux où le NAP doit être identique§ 3.4
M10Aucune règle de domaine canonique ni de co-endossement de marque13 domaines, 2 redirections de domaine mesurées, 1 co-marque (IMMOBEL) : sans règle, chaque marque se déclare organisation indépendante (mesuré E10)§ 4.2, § 2.7

---

2. Architecture d'entités

2.1 Le graphe cible — une seule maison mère, un seul identifiant

Principe directeur [REGLE] : il existe une entité Tero dans le monde. Elle porte un @id absolu, hors langue : https://tero.be/#organization. Toutes les autres entités s'y rattachent par parentOrganization (entités opérationnelles) ou subOrganization (réciproque sur la racine).

https://tero.be/#organization Tero (Organization, racine)

├── subOrganization → https://tero.be/#hospitality Tero Hospitality

├── subOrganization → https://tero.be/#leisure Tero Leisure

├── subOrganization → https://tero.be/#sport-events Tero Sport Events

├── founder → #person-arthur-lhoist, #person-nicolas-lhoist

├── brand → #brand-tero, #brand-teroir, #brand-knokke-out, …

└── subOrganization → 11 marques opérationnelles (1 par domaine canonique)

Chaque marque opérationnelle déclare : parentOrganization → https://tero.be/#organization

Règle d'identifiant [REGLE] — un @id ne contient jamais de segment de langue, jamais de ?query, jamais de slash final incohérent. Table des identifiants canoniques :

Entité@id canonique@type
Groupe (maison mère)https://tero.be/#organizationOrganization
Site web groupehttps://tero.be/#website ; un par langue : https://tero.be/fr/#websiteWebSite
Page<url-canonique>#webpageWebPage
Pilierhttps://tero.be/#hospitality · #leisure · #sport-eventsOrganization (ou Brand — voir § 7 Q6)
Marque opérationnellehttps://<domaine>/#organization + https://tero.be/#brand-<slug>Organization + Brand
Lieuhttps://tero.be/fr/lieux/<slug>/#placePlace (et LocalBusiness si éligible)
Restauranthttps://tero.be/fr/restaurants/<slug>/#restaurantRestaurant
Événementhttps://<domaine>/fr/evenements/<slug>/#eventEvent
Servicehttps://tero.be/fr/<pilier>/<service>/#serviceService
Personnehttps://tero.be/#person-<slug>Person
Marque (brand)https://tero.be/#brand-<slug>Brand
Partenaire co-endosséhttps://<domaine>/#partner-<slug>Organization (rôle déclaré : sponsor / funder / contributor)

Correction mesurée E4 : l'existant utilise https://tero.be/fr/#organization/, …/en/#organization/, …/nl/#organization/ et …/fr/author/lumisys/. Ces identifiants doivent disparaître au profit d'un seul #organization et d'un seul @id par personne.

2.2 Bloc A — Organization Tero (racine, à émettre sur toutes les pages, toutes langues)

{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "Organization",
      "@id": "https://tero.be/#organization",
      "name": "Tero",
      "alternateName": ["Tero Group", "groupe Tero"],
      "url": "https://tero.be/",
      "description": "Tero est un groupe belge d'hospitalité, de loisirs et d'événements sportifs. Trois piliers : Tero Hospitality, Tero Leisure, Tero Sport Events.",
      "logo": {
        "@type": "ImageObject",
        "@id": "https://tero.be/#logo",
        "url": "https://tero.be/media/tero-logo-noir.png",
        "contentUrl": "https://tero.be/media/tero-logo-noir.png",
        "encodingFormat": "image/png",
        "width": "1000",
        "height": "400",
        "caption": "tero"
      },
      "image": [
        { "@id": "https://tero.be/#logo" },
        "https://tero.be/media/tero-monogramme.png"
      ],
      "address": [
        {
          "@type": "PostalAddress",
          "streetAddress": "Chaussée de Tervuren 389",
          "postalCode": "1410",
          "addressLocality": "Waterloo",
          "addressCountry": "BE"
        },
        {
          "@type": "PostalAddress",
          "streetAddress": "Rives des Clausen 15",
          "postalCode": "2165",
          "addressLocality": "Luxembourg",
          "addressCountry": "LU"
        }
      ],
      "telephone": ["+32 484 59 87 48", "+352 671 315 015"],
      "contactPoint": [
        {
          "@type": "ContactPoint",
          "contactType": "customer service",
          "telephone": "+32 484 59 87 48",
          "areaServed": ["BE", "LU"],
          "availableLanguage": ["fr", "nl", "en"]
        }
      ],
      "foundingDate": "2020",
      "founder": [
        { "@id": "https://tero.be/#person-arthur-lhoist" },
        { "@id": "https://tero.be/#person-nicolas-lhoist" }
      ],
      "numberOfEmployees": { "@type": "QuantitativeValue", "value": 125 },
      "subOrganization": [
        { "@id": "https://tero.be/#hospitality" },
        { "@id": "https://tero.be/#leisure" },
        { "@id": "https://tero.be/#sport-events" }
      ],
      "slogan": "live. share. reconnect.",
      "knowsLanguage": ["fr", "nl", "en"],
      "sameAs": ["<À FOURNIR: profils sociaux officiels du groupe — Instagram, LinkedIn, Facebook, YouTube>"]
    }
  ]
}

Justification champ par champ [MESURE] — création 2020, ~125 personnes, deux adresses, deux fondateurs Arthur et Nicolas Lhoist, signature live. share. reconnect., langues FR/NL/EN (WPML) : relevés au § 2.1 de AUDIT-TERO-BE-2026.md et § 1.1 de tero-group-rules.md.

Ce qui n'est PAS dans le bloc, volontairement [REGLE] :

Champ écartéRaison
vatIDInterdit par § 13.2 du document existant — aucune source mesurée du numéro
legalNameAucune raison sociale mesurée. À fournir par le client avant toute émission
award, aggregateRating, reviewInterdits — aucune source
sameAs rempliLes URL sociales n'ont pas été mesurées. Placeholder bloquant (§ 3.4)
hasCredential / B CorpLa « démarche B Corp » est mesurée comme démarche, pas comme certification obtenue. Écrire hasCredential serait une invention

Règle logo [REGLE] (corrige E1 et E2) :

2.3 Bloc B — piliers, marques, fondateurs

{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "Organization",
      "@id": "https://tero.be/#hospitality",
      "name": "Tero Hospitality",
      "url": "https://tero.be/fr/hospitality/",
      "parentOrganization": { "@id": "https://tero.be/#organization" },
      "description": "Pilier lieux, team building, traiteur et restaurants du groupe Tero.",
      "knowsAbout": ["location de lieux", "team building", "traiteur", "restauration"]
    },
    {
      "@type": "Organization",
      "@id": "https://tero.be/#leisure",
      "name": "Tero Leisure",
      "url": "https://tero.be/fr/leisure/",
      "parentOrganization": { "@id": "https://tero.be/#organization" },
      "description": "Pilier clubs et académies du groupe Tero : padel, tennis, bien-être.",
      "knowsAbout": ["padel", "tennis", "bien-être", "académies sportives"]
    },
    {
      "@type": "Organization",
      "@id": "https://tero.be/#sport-events",
      "name": "Tero Sport Events",
      "url": "https://tero.be/fr/sport-events/",
      "parentOrganization": { "@id": "https://tero.be/#organization" },
      "description": "Pilier événements sportifs d'envergure et consultance du groupe Tero.",
      "knowsAbout": ["courses", "événements sportifs", "consultance événementielle"]
    },
    {
      "@type": "Brand",
      "@id": "https://tero.be/#brand-tero",
      "name": "Tero",
      "logo": { "@id": "https://tero.be/#logo" },
      "slogan": "live. share. reconnect."
    },
    {
      "@type": "Person",
      "@id": "https://tero.be/#person-arthur-lhoist",
      "name": "Arthur Lhoist",
      "jobTitle": "Co-fondateur",
      "worksFor": { "@id": "https://tero.be/#organization" }
    },
    {
      "@type": "Person",
      "@id": "https://tero.be/#person-nicolas-lhoist",
      "name": "Nicolas Lhoist",
      "jobTitle": "Co-fondateur",
      "worksFor": { "@id": "https://tero.be/#organization" }
    }
  ]
}

Règles [REGLE]

2.4 Bloc C — lieu, restaurant, événement, service

Lieu (Place + LocalBusiness) — modèle pour un des 17 lieux [MESURE : inventaire § 1.3] :

{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": ["Place", "LocalBusiness"],
      "@id": "https://tero.be/fr/lieux/tero-lodges-jalhay/#place",
      "name": "Tero Lodges Jalhay",
      "url": "https://tero.be/fr/lieux/tero-lodges-jalhay/",
      "parentOrganization": { "@id": "https://tero.be/#organization" },
      "containedInPlace": { "@type": "AdministrativeArea", "name": "Jalhay, Belgique" },
      "address": {
        "@type": "PostalAddress",
        "streetAddress": "<À FOURNIR: adresse exacte du lieu>",
        "postalCode": "<À FOURNIR>",
        "addressLocality": "Jalhay",
        "addressCountry": "BE"
      },
      "geo": { "@type": "GeoCoordinates", "latitude": "<À FOURNIR>", "longitude": "<À FOURNIR>" },
      "openingHoursSpecification": "<À FOURNIR: horaires sourcés — ne jamais estimer>",
      "amenityFeature": [
        { "@type": "LocationFeatureSpecification", "name": "Salle de séminaire", "value": true },
        { "@type": "LocationFeatureSpecification", "name": "Hébergement", "value": true }
      ],
      "image": ["<À FOURNIR: photo réelle du lieu — jamais une photo d'un autre lieu>"],
      "isPartOf": { "@id": "https://tero.be/#hospitality" }
    }
  ]
}

Règles [REGLE]

Restaurant (Restaurant) : Knokke Out Zoute, Bistro 17, Bistro Pilko [MESURE]. Mêmes règles que Place, type Restaurant, sous Tero Hospitality. servesCuisine uniquement si la cuisine est documentée — « farm to fork » est un positionnement Teroir, pas une servesCuisine.

Événement (Event) : modèle minimal, calqué sur un des domaines *run.be / terotrail.be / www.brusselspremierpadel.be [MESURE].

{
  "@type": "Event",
  "@id": "https://immorun.be/fr/evenements/<slug>/#event",
  "name": "<À FOURNIR: nom officiel de l'édition — ne jamais recomposer>",
  "startDate": "<À FOURNIR: ISO 8601 avec fuseau, ex. 2027-04-18T09:00:00+02:00>",
  "endDate": "<À FOURNIR>",
  "eventStatus": "https://schema.org/EventScheduled",
  "eventAttendanceMode": "https://schema.org/OfflineEventAttendanceMode",
  "location": { "@id": "<@id du lieu si connu, sinon PostalAddress complet>" },
  "organizer": { "@id": "https://tero.be/#sport-events" },
  "offers": {
    "@type": "Offer",
    "url": "<À FOURNIR: URL d'inscription exacte, UTM recopiés à l'identique>",
    "availability": "https://schema.org/InStock",
    "price": "<À FOURNIR>",
    "priceCurrency": "EUR"
  }
}

Event sans startDate est invalide et sera rejeté : mieux vaut ne pas émettre le nœud que l'émettre incomplet. Événement passé → page archivée en noindex et nœud retiré.

Service (Service) : pour les offres non localisables (team building, consultance, traiteur, académie).

{
  "@type": "Service",
  "@id": "https://tero.be/fr/hospitality/team-building/#service",
  "name": "Team building",
  "serviceType": "Team building",
  "provider": { "@id": "https://tero.be/#hospitality" },
  "areaServed": [
    { "@type": "Country", "name": "Belgique" },
    { "@type": "Country", "name": "Luxembourg" }
  ],
  "availableChannel": {
    "@type": "ServiceChannel",
    "serviceUrl": "https://tero.be/fr/contact/",
    "availableLanguage": ["fr", "nl", "en"]
  }
}

Règle [REGLE] — provider pointe le pilier, pas le groupe : c'est le rattachement hiérarchique qui doit être lu par les moteurs de réponse (§ 3.3).

2.5 Bloc D — WebSite, WebPage, SearchAction (correction de E3)

{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "WebSite",
      "@id": "https://tero.be/#website",
      "url": "https://tero.be/",
      "name": "Tero",
      "alternateName": "Tero Group",
      "publisher": { "@id": "https://tero.be/#organization" },
      "inLanguage": "fr-BE",
      "potentialAction": {
        "@type": "SearchAction",
        "target": {
          "@type": "EntryPoint",
          "urlTemplate": "https://tero.be/fr/?s={search_term_string}"
        },
        "query-input": "required name=search_term_string"
      }
    },
    {
      "@type": "WebPage",
      "@id": "https://tero.be/fr/#webpage",
      "url": "https://tero.be/fr/",
      "name": "<title de la page, sans le suffixe de marque>",
      "isPartOf": { "@id": "https://tero.be/#website" },
      "about": { "@id": "https://tero.be/#organization" },
      "inLanguage": "fr-BE",
      "datePublished": "2025-03-04T10:03:25+00:00",
      "dateModified": "2026-10-02T15:22:50+00:00",
      "primaryImageOfPage": { "@id": "https://tero.be/#logo" },
      "breadcrumb": { "@id": "https://tero.be/fr/#breadcrumb" }
    },
    {
      "@type": "BreadcrumbList",
      "@id": "https://tero.be/fr/#breadcrumb",
      "itemListElement": [
        { "@type": "ListItem", "position": 1, "name": "Accueil", "item": "https://tero.be/fr/" }
      ]
    }
  ]
}

Corrections explicites des défauts mesurés [MESURE]

Défaut mesuré (15/10/2026)Valeur relevéeCorrection imposée
Nœud Article surnuméraire sur pages non éditoriales@id …#richSnippet, headline, keywords : présent sur /fr/, /fr/tero-group/, /fr/contact/Supprimer. Un article n'existe que sur /actualites/<slug>/, avec author réel, datePublished, dateModified. Désactiver le « rich snippet » Rank Math sur pages et CPT non éditoriaux
Auteur agencePerson @id = https://tero.be/fr/author/lumisys/, name = lumisys, image = secure.gravatar.com/avatar/5594eabe…Supprimer toute entité auteur sur les pages non éditoriales. Sur le blog : author = {"@id": "https://tero.be/#organization"} ou une Person réelle nommée avec jobTitle. Jamais un compte technique
sameAs de prévisualisation"sameAs": ["https://b88ep6bjdmh.preview.infomaniak.website"] sur le PersonSupprimer — fuite d'environnement. sameAs n'existe que sur l'Organization racine, contre liste blanche (§ 3.4)
Organization.logo non représentatifTERO_MONOGRAM-1.png, 1 272 × 1 861Déclarer le mot-symbole tero (2,5:1) ; monogramme réservé à favicon / image
og:image incohérentog:image = …-1024x683.jpg, width = 800, height = 534Générer og:image en 1200 × 630 et déclarer les dimensions de l'image réellement servie
@id d'organisation porté par la langue/fr/#organization/ · /en/#organization/ · /nl/#organization/Un seul @id : https://tero.be/#organization
Organization.url = https://tero.be/fr y compris sur /en/ et /nl/Mesuré sur les 3 versionsurl = https://tero.be/. La langue se déclare par inLanguage sur WebPage/WebSite, jamais par l'url de l'organisation
Person @id porté par la langue`/frennl/author/lumisys/`Un seul @id par personne

Inventaire des nœuds par type de page [REGLE] — à implémenter comme un contrat, pas comme une intention :

Type de pageOrganization racineWebSiteWebPageBreadcrumbListAutre
Accueil groupe✔✔✔—ItemList des 3 piliers
Page pilier✔✔✔✔Organization du pilier, ItemList des marques
Hub lieux / restaurants✔✔✔✔ItemList
Fiche lieu✔✔✔✔Place (+ LocalBusiness si éligible)
Fiche restaurant✔✔✔✔Restaurant
Page marque (sous-domaine)✔✔✔✔Organization + Brand + parentOrganization
Page co-endossée✔✔✔✔Organization marque + Organization partenaire + sponsor/funder/contributor — § 2.7
Page service✔✔✔✔Service + FAQPage
Page événement✔✔✔✔Event
Article de blog / actualité✔✔✔✔Article + author réel + dateModified
Contact✔✔✔✔— (aucune Person technique, aucun Article)
Mentions légales / confidentialité✔✔✔✔noindex, follow
FAQ✔✔✔✔FAQPage
404————Aucun JSON-LD, noindex

Autorité unique [REGLE] — reprise de la règle padel § 4.4, transposée au groupe : un seul producteur de JSON-LD (src/data/schema-core.ts ou équivalent Next.js/Payload). Interdiction d'un "@type" littéral hors de ce fichier. Constructeurs autorisés : organization(), website(lang), webPage(page, lang, url), breadcrumbs(items), place(place, lang, url), restaurant(r, lang, url), service(s, lang, url), event(e, lang, url), faqPage(items), itemList(nodes), brand(b, lang, url), partner(p, role), graph(nodes, lang).

2.6 Bloc E — FAQPage et réponse citable

{
  "@type": "FAQPage",
  "@id": "https://tero.be/fr/hospitality/team-building/#faq",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "Qu'est-ce qu'un team building Tero ?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Un team building Tero est une activité collective conçue et animée par Tero Hospitality, pour un groupe de collaborateurs, dans l'un des 17 lieux du groupe en Belgique et au Luxembourg. Tero prend en charge l'activité, le lieu et le traiteur Teroir."
      }
    }
  ]
}

Règles [REGLE]

2.7 Marques co-endossées — deux organisations sur une même page

Cas mesuré [MESURE lead, 15/10/2026] : immorun.be affiche la co-marque IMMOBEL dans son en-tête. Le risque est réel : deux Organization de même poids sur une page font hésiter un moteur de réponse sur qui organise l'événement. Il faut une hiérarchie explicite, jamais implicite.

Modèle imposé [REGLE] — trois rôles distincts, trois propriétés distinctes :

RôlePropriétéQui la porteNe jamais utiliser
Propriétaire de la marque (le groupe)parentOrganization sur l'Organization de la marqueToujours Tero—
Organisateur de l'événementEvent.organizerL'entité qui porte juridiquement l'événementsponsor pour un organisateur
Partenaire / sponsorEvent.sponsor (ou funder)La co-marque (IMMOBEL)organizer, parentOrganization, publisher
Contributeur éditorial (si IMMOBEL fournit du contenu)Event.contributorLa co-marqueauthor
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "Organization",
      "@id": "https://immorun.be/#organization",
      "name": "immorun",
      "url": "https://immorun.be/",
      "parentOrganization": { "@id": "https://tero.be/#organization" },
      "brand": { "@id": "https://tero.be/#brand-immorun" },
      "sameAs": ["<À FOURNIR: réseaux officiels d'immorun>"]
    },
    {
      "@type": "Organization",
      "@id": "https://immorun.be/#partner-immobel",
      "name": "IMMOBEL",
      "url": "<À FOURNIR: URL officielle du partenaire>",
      "logo": "<À FOURNIR: logo fourni par le partenaire — jamais redessiné>"
    },
    {
      "@type": "Event",
      "@id": "https://immorun.be/fr/evenements/<slug>/#event",
      "name": "<À FOURNIR>",
      "startDate": "<À FOURNIR>",
      "organizer": { "@id": "https://immorun.be/#organization" },
      "sponsor": { "@id": "https://immorun.be/#partner-immobel" },
      "isPartOf": { "@id": "https://tero.be/#sport-events" }
    }
  ]
}

Règles opposables [REGLE]

#RègleRaison
CO1Une seule Organization propriétaire du site par domaine. La co-marque est un nœud secondaire, jamais un second propriétaireSinon chaque moteur choisit un « propriétaire » différent
CO2La co-marque ne reçoit jamais parentOrganization vers le groupe Tero : elle n'est pas une sous-marque de TeroSinon la hiérarchie du groupe est fausse
CO3La co-marque n'apparaît jamais dans subOrganization de https://tero.be/#organizationIdem
CO4Le rôle est explicite (sponsor, funder, contributor) — jamais un partner générique (propriété inexistante en schema.org)Un rôle non déclaré est un rôle perdu
CO5Le lockup visuel (immorun + IMMOBEL) est un arbitrage de marque (§ 7 Q13). Aucun lockup combiné n'est dessiné par un agent (§ 1.4-3 des règles)Interdit de marque
CO6Le NAP de la co-marque n'est pas publié par Tero sans autorisation écrite du partenaireRisque juridique
CO7Si IMMOBEL est coproducteur, la structure devient organizer: [{"@id": immorun}, {"@id": immobel}] — deux organisateurs déclarés, jamais un sponsor déguiséExactitude avant commodité
CO8Le texte de la page nomme les deux entités dans la première phrase : « immorun, organisé par Tero Sport Events avec IMMOBEL »Réponse citable (§ 3.3 G2)

À faire trancher [À VALIDER CLIENT] : IMMOBEL est-il sponsor, coproducteur, ou propriétaire de la marque immorun ? Les trois donnent trois graphes différents. Sans réponse, aucun nœud partenaire n'est émis — la page porte seulement immorun + parentOrganization Tero. C'est la seule option sûre (§ 7 Q13).

---

3. GEO — être l'entité citée, pas la page aspirée

3.1 robots.txt — liste unique du groupe

Constat mesuré (15/10/2026), https://tero.be/robots.txt, 994 octets :

ÉlémentÉtat liveVerdict
User-agent: * / Disallow:Présent✔
Blocs Allow: / explicitesGPTBot, Google-Extended, ClaudeBot, AmazonBot, Applebot-Extended, Bytespider, CCBot, meta-externalagent⚠ 8 agents seulement
Sitemap:https://tero.be/sitemap.xml✘ 404 mesuré
OAI-SearchBot, ChatGPT-UserAbsents✘
PerplexityBot, Perplexity-UserAbsents✘ manque le bot de réponse le plus utilisé en Europe
Claude-User, Claude-SearchBotAbsents✘
Bingbot, Applebot, Google-CloudVertexBot, MistralAI-User, DuckAssistBotAbsents✘
Avertissement juridique anti-scraping en têtePrésent, avec exception RAG✔ à conserver (il autorise explicitement le RAG)

robots.txt cible — copiable tel quel [REGLE]

# Tero Group — robots.txt

# Le crawling est autorisé, y compris pour la recherche et la génération augmentée (RAG).

# Toute autre collecte automatisée nécessite une autorisation écrite.

User-agent: *

Allow: /

# Moteurs de recherche

User-agent: Googlebot

Allow: /

User-agent: Bingbot

Allow: /

User-agent: Applebot

Allow: /

# Indexation étendue et entraînement

User-agent: Google-Extended

Allow: /

User-agent: Applebot-Extended

Allow: /

User-agent: CCBot

Allow: /

# Assistants et moteurs de réponse

User-agent: GPTBot

Allow: /

User-agent: OAI-SearchBot

Allow: /

User-agent: ChatGPT-User

Allow: /

User-agent: ClaudeBot

Allow: /

User-agent: Claude-User

Allow: /

User-agent: Claude-SearchBot

Allow: /

User-agent: PerplexityBot

Allow: /

User-agent: Perplexity-User

Allow: /

User-agent: AmazonBot

Allow: /

User-agent: meta-externalagent

Allow: /

User-agent: Google-CloudVertexBot

Allow: /

User-agent: MistralAI-User

Allow: /

User-agent: DuckAssistBot

Allow: /

# Robots de données SEO — non nécessaires au référencement

User-agent: SemrushBot

Disallow: /

User-agent: AhrefsBot

Disallow: /

User-agent: MJ12bot

Disallow: /

Sitemap: https://tero.be/sitemap_index.xml

Sitemap: https://tero.be/fr/sitemap_index.xml

Sitemap: https://tero.be/nl/sitemap_index.xml

Sitemap: https://tero.be/en/sitemap_index.xml

Règles [REGLE]

3.2 llms.txt et llms-full.txt

Constat mesuré — le « travail » demandé par § 13.3 est déjà fait, mal :

FichierStatut liveContenu mesuréDiagnostic
/llms.txt20076 779 caractères, 339 lignes, 12 sections, 275 liens tous en /fr/, 0 /nl/, 0 /en/, pas de bloc de résumé >, pas de ## Optional, pas d'adresse, pas de téléphone, pas de pilier, sections nommées d'après le CMS interne (« Theme Parts », « Listing Items/Components »)Ce n'est pas une fiche d'entité : c'est le sitemap en prose. Un moteur de réponse n'y apprend ni ce qu'est Tero, ni où il est, ni ce que valent ses offres
/llms-full.txt404Sert une page HTML noindex (GTM GTM-NKPLDKZ, Cookiebot, og:type article)Un moteur qui suit la convention llms.txt → llms-full.txt consomme une erreur

Action 1 [REGLE] — désactiver la génération Rank Math du llms.txt (elle produit un doublon du sitemap et publie du vocabulaire interne), puis servir deux fichiers statiques versionnés.

Action 2 [REGLE] — /llms.txt : fiche d'entité au format llmstxt.org. Cible < 8 ko. Structure imposée :

# Tero Group

> Tero est un groupe belge d'hospitalité, de loisirs et d'événements sportifs fondé en 2020

> par Arthur et Nicolas Lhoist. Le groupe réunit environ 125 personnes, 17 lieux en Belgique

> et au Luxembourg, et trois piliers : Tero Hospitality, Tero Leisure, Tero Sport Events.

> Siège : Chaussée de Tervuren 389, 1410 Waterloo, Belgique — +32 484 59 87 48.

> Signature : live. share. reconnect.

Tero organise des événements d'entreprise (séminaires, team building, soirées), loue des

lieux et des gîtes, assure le traiteur Teroir, exploite des clubs et académies de padel,

tennis et bien-être, et organise des courses et événements sportifs d'envergure en Belgique

et au Luxembourg.

## Les trois piliers

## Établissements et marques

impactrun, terotrail, Brussels Premier Padel, 12km Anderlecht — domaines : immorun.be,

immorun.lu, batirun.be, bouwrun.be, buildandrun.be, impactrun.be, terotrail.be,

www.brusselspremierpadel.be, 12kmanderlecht.be

## Contact

## Optional

Règles [REGLE]

Action 3 [REGLE] — /llms-full.txt : ~50-80 ko, en texte, sans HTML. Plan imposé :

SectionContenuSource obligatoire
1. IdentitéNom, alternateName, fondateurs, date de création, effectif, langues, signature§ 1.1 des règles
2. Les trois piliersDéfinition + périmètre + marques rattachées§ 1.2
3. Inventaire des 17 lieuxNom, ville, adresse, capacité, usagetero-group-facts.json
4. RestaurantsNom, ville, adresse, type, horairestero-group-facts.json
5. TraiteurTeroir, positionnement, zone desserviefaits client
6. Clubs et académiesMarque, ville, disciplines, publics, domaine canoniquefaits par domaine
7. Événements sportifsNom, édition, date, lieu, inscription, co-marques et leur rôleutm.json + § 2.7
8. Offres d'entrepriseSéminaire, team building, soirée, incentivepages service
9. FAQ d'entité12 à 20 questions, réponses de 40-60 mots§ 3.3
10. Glossaire de marqueTero, Tero Group, Teroir, Tero Lodges, team building, Tero Padel Club…§ 5.2
11. Coordonnées et NAPLes deux adresses, les deux téléphones, domaines canoniques, réseaux officielstero-group-facts.json
12. Sources et fraîcheur« Dernière mise à jour : AAAA-MM-JJ »—

Interdit [REGLE] : un llms-full.txt qui recopie les 275 pages. Il doit être écrit, pas généré. C'est un document éditorial avec un propriétaire.

3.3 Blocs de réponse citables — la règle qui fait gagner ou perdre une citation

Règles opposables [REGLE], dérivées de _ref/teropadelclub § 4.8 et durcies :

#RègleMesure de contrôle
G1Une réponse autonome de 40 à 60 mots immédiatement sous le H1 de chaque page clé, et sous chaque H2 formulé en questionCompteur de mots du bloc ; doit se comprendre hors contexte
G2Le nom complet et la catégorie dans la première phrase de l'accueil : « Tero est un groupe belge d'hospitalité, de loisirs et d'événements sportifs… »Présence de groupe + belge + les 3 piliers dans les 60 premiers mots
G3Aucun adjectif sans chiffre. « exceptionnel » est remplacé par la capacité, la distance, le délai, le prixzéro occurrence de la liste noire § 5.1-6
G4Chaque fait porte sa source dans le fichier de faits, et la page affiche une date de mise à jour visible sur les pages tarifs/horaires/lieuxdateModified = date affichée
G5Tableaux en HTML, jamais en imageTest : le texte du tableau apparaît dans le texte servi
G6Jamais de contenu séparé « pour l'IA » : le contenu citable est le contenu visible—
G7Bloc ItemList sur les hubs (3 piliers, 17 lieux, 13 marques)Nœud présent
G8Un seul H1 par page, hiérarchie H2/H3 sans sautcheck-headings

Gabarit de réponse citable (à réutiliser) [REGLE]

Tero Hospitality réunit les lieux, l'activité team building, le traiteur Teroir et les restaurants du groupe Tero. Le pilier exploite 17 lieux en Belgique et au Luxembourg et sert des entreprises de toute taille, pour des groupes allant de 10 à plusieurs centaines de personnes. Un team building Tero comprend le lieu, l'activité encadrée et la restauration.

Chaque phrase de ce gabarit répond à une question réelle : qui, quoi, où, combien, pour qui, qu'est-ce que je reçois. C'est ce bloc que reprendront ChatGPT, Perplexity ou AI Overviews.

3.4 Consolidation d'entité, NAP et sameAs

Le NAP du groupe [MESURE] — valeurs opposables, à recopier caractère pour caractère dans le site, le JSON-LD, les llms*.txt, les annuaires et les fiches Google Business Profile :

ChampBelgiqueLuxembourg
nameTeroTero
streetAddressChaussée de Tervuren 389Rives des Clausen 15
postalCode14102165
addressLocalityWaterlooLuxembourg
addressCountryBELU
telephone+32 484 59 87 48+352 671 315 015

Faute de NAP mesurée à ne pas reproduire [REGLE] : « Chau. de Tervuren » est la graphie du site ; écrire « Chaussée de Tervuren » partout. Toute variante (Tervueren, Ch. de Tervuren, +32 484 598 748) casse la consolidation d'entité.

Liste blanche sameAs [REGLE] — seules ces destinations sont autorisées, et aucune n'a été mesurée : le client doit fournir les URL avant émission (§ 7 Q2).

DestinationRôleStatut
Fiche Google Business Profile BelgiqueEntité locale principale<À FOURNIR>
Fiche Google Business Profile LuxembourgEntité locale secondaire<À FOURNIR>
LinkedIn (page entreprise)Entité professionnelle<À FOURNIR>
InstagramMarque<À FOURNIR>
FacebookMarque<À FOURNIR>
YouTubeMarque<À FOURNIR>
Wikidata (Q-id)Ancrage d'entité fort pour les moteurs de réponseÀ CRÉER — [REGLE]
Registre B Corp (si et seulement si certification obtenue)Crédibilité<À FOURNIR>

Interdits sameAs [REGLE] : URL de prévisualisation (*.preview.infomaniak.website — mesuré), secure.gravatar.com, tout /author/<compte-technique>/, un profil d'agence, un annuaire auto-généré.

Consolidation en 6 chantiers [REGLE]

#ChantierDétailContrôle
C1Un @id par entitéCorrection de E4. Un @id sans segment de languecheck-schema : refuse un @id contenant `(/fr//nl//en/)#organization`
C2parentOrganization sur les 11 sous-domaines canoniquesChaque domaine déclare son rattachement au groupecheck-schema sur chaque build de domaine
C3NAP unique et centraliséUne seule source tero-group-facts.json, injectée partoutcheck-nap : diff entre la source et tous les rendus
C4Fiche GBP par lieu17 lieux → 17 fiches, une seule entité par lieu, NAP identique au siteAudit manuel trimestriel
C5Fiche Wikidata1 item « Tero (groupe) » + subOrganization des 3 piliers, sameAs vers tero.beWikidata + sameAs réciproque
C6AnnuairesPages Jaunes BE/LU, LinkedIn, CCI, registres professionnels : NAP strictcheck-nap sur export manuel

Mesure GEO [REGLE] — protocole mensuel, requêtes témoins, à consigner dans docs/geo/rapports/AAAA-MM.md :

FamilleRequêtes témoins (extraits)
Entité« qu'est-ce que Tero Group », « qui est derrière Tero Belgique », « Tero Hospitality Knokke Out »
Lieu« team building Belgique 100 personnes », « séminaire résidentiel Ardennes »
Offre« traiteur événementiel farm to fork Luxembourg », « club de padel Bruxelles »
Événement« course à pied entreprise Bruxelles », « trail Belgique »
Comparaison« meilleur lieu de séminaire en Belgique », « où organiser un team building en Belgique »

Indicateurs : (1) Tero est-il cité, (2) avec la bonne catégorie, (3) avec le bon NAP, (4) avec un lien, (5) la source citée est-elle tero.be et non un annuaire tiers. Suivi du trafic utm_source=chatgpt.com, perplexity.ai, copilot.microsoft.com, gemini.google.com dans GA4.

---

4. Architecture d'information et URL

4.1 Arborescence recommandée — tero.be (maison mère)

Principes [REGLE] : 3 niveaux maximum entre l'accueil et une fiche ; FR à la racine ; /nl/ et /en/ ; slugs identiques dans les trois langues (héritage de la règle padel § 4.1, indispensable au hreflang) ; un segment d'URL = une entité.

NiveauFRNLENGabaritJSON-LD
0/ puis /fr//nl//en/Accueil groupeWebPage + ItemList piliers
—/a-propos//nl/over-ons//en/about/À proposAboutPage + Organization
—/impact//nl/impact//en/impact/Démarche impactWebPage
—/contact//nl/contact//en/contact/ContactContactPage
1/hospitality//nl/hospitality//en/hospitality/PilierOrganization pilier
1/leisure//nl/leisure//en/leisure/PilierOrganization pilier
1/sport-events//nl/sport-events//en/sport-events/PilierOrganization pilier
2/lieux//nl/locaties//en/venues/HubItemList
3/lieux/<slug>//nl/locaties/<slug>//en/venues/<slug>/Fiche lieuPlace
2/restaurants//nl/restaurants//en/restaurants/HubItemList
3/restaurants/<slug>/idemidemFiche restaurantRestaurant
2/team-building//nl/teambuilding//en/team-building/ServiceService + FAQPage
2/traiteur//nl/traiteur//en/catering/Marque TeroirOrganization + Brand
2/clubs//nl/clubs//en/clubs/Hub marques LeisureItemList
2/evenements//nl/evenementen//en/events/Hub Sport EventsItemList
3/evenements/<slug>/idemidemFiche événementEvent
2/actualites//nl/nieuws//en/news/BlogCollectionPage
3/actualites/<slug>/idemidemArticleArticle
—/mentions-legales//nl/juridische-informatie//en/legal-notice/Légalnoindex, follow
—/confidentialite//nl/privacy//en/privacy/Légalnoindex, follow
—/404idemidemErreuraucun JSON-LD

Règles [REGLE]

4.2 Domaines — une marque, un domaine canonique, un rattachement

Règle [REGLE] : chaque marque conserve son domaine (mesuré + complément du lead, § 1.3). Le groupe ne rapatrie pas les marques sous tero.be/<marque>/.

Table des domaines canoniques [MESURE live + lead, 15/10/2026] :

MarqueDomaine cité dans les docsDomaine canoniqueStatut
Tero Group (maison mère)tero.betero.beactif, FR/EN/NL
Tero Padel Clubteropadelclub.beteropadelclub.beactif, 7 hreflang (dont doublons)
Tero Studioterostudio.beterostudio.beactif, WordPress, logo TERO STUDIO
Garisart~~garisart.be~~garisartsportsclub.beredirection mesurée — à corriger dans les docs
Brussels Premier Padel~~brusselspremierpadel.be~~www.brusselspremierpadel.beredirection mesurée — à corriger
immorunimmorun.beimmorun.beactif, co-marque IMMOBEL (§ 2.7)
immorun Luxembourgimmorun.luimmorun.luactif
batirunbatirun.bebatirun.beactif
bouwrunbouwrun.bebouwrun.beactif
buildandrunbuildandrun.bebuildandrun.beactif
impactrunimpactrun.beimpactrun.beactif
terotrailterotrail.beterotrail.beactif
12km Anderlecht12kmanderlecht.be12kmanderlecht.beactif

Règles opposables [REGLE]

#RègleContrôle
R1Un domaine canonique par marque, déclaré dans tero-group-facts.json. Le domaine cité dans un document est toujours le canoniquediff automatique docs ↔ faits
R2Chaque domaine émet parentOrganization: https://tero.be/#organizationcheck-schema
R3Chaque domaine expose un lien visible vers tero.be et la mention du piliercheck-endossement
R4Le domaine qui redirige (garisart.be, brusselspremierpadel.be) sert une 301 vers le canonique : jamais un 200, jamais un 302 permanenttest HTTP
R5Aucun canonical inter-domaines sauf doublon avéré et documenté. Une marque n'est jamais canonicalisée vers tero.becheck-canonical
R6sameAs du domaine marque → https://tero.be/ et sa fiche GBP proprecheck-schema
R7Le domaine marque partage le même robots.txt socle (§ 3.1) et le même socle llms.txtdiff de fichiers
R8Le domaine marque ne redéfinit ni les couleurs, ni la typographie, ni le logo du groupe§ 17 des règles

Défaut mesuré E10 : terostudio.be et immorun.be déclarent une Organization sans parentOrganization et aucun hreflang — chaque marque se présente aujourd'hui comme une entité indépendante. C'est exactement ce que la règle d'endossement § 1.4 doit interdire, et elle ne figure nulle part dans les données structurées.

4.3 hreflang — politique unique du groupe

Cible [REGLE]

AttributValeur imposéePrécision
hreflangfr-BE, nl-BE, en, x-defaultCorrection de E9 : fr / nl sans région diluent vers FR/NL
x-defaultversion FRRègle § 14 + padel § 4.3
RéciprocitéChaque page liste toutes ses alternates, y compris elle-mêmecheck-hreflang
CibleLes alternates pointent des pages existantes (HTTP 200) au contenu réellement traduitcheck-hreflang
InterditDoublons région/global (en + en-GB sur la même cible — mesuré sur teropadelclub.be)Refus au build
Interditalternate sur /404Refus au build
LuxUn site .lu peut servir fr-LU en plus si la cible est le Luxembourg[À VALIDER CLIENT] § 7 Q4

Constat à corriger [MESURE] : tero.be sert aujourd'hui en, fr, nl, x-default → 4 fois sur 4, la région manque. teropadelclub.be sert 7 valeurs dont 3 paires en doublon.

4.4 canonical

Règle [REGLE]Détail
Auto-référenteChaque page se canonicalise elle-même
Absolue + slash finalhttps://tero.be/fr/lieux/tero-lodges-jalhay/
Une seule par pageJamais deux balises canonical
Aucun paramètrePas de ?utm_, pas de ?s=, pas de pagination dans le canonical de la page 1
Pagination/actualites/page/2/ auto-canonique ; ne jamais canonicaliser vers la page 1
Cross-langueJamais de canonical d'une langue vers une autre — c'est hreflang qui relie les langues
EnvironnementsPreview et staging en noindex + robots.txt fermé

Défaut mesuré à ne pas reproduire [MESURE] : https://teropadelclub.be/ a pour canonical https://teropadelclub.be/en — la racine d'un site belge francophone se canonicalise vers l'anglais, sans slash final. check-canonical doit refuser un canonical qui change de langue.

4.5 sitemap

Règle [REGLE]Détail
Index/sitemap_index.xml et un index par langue (/fr/, /nl/, /en/)
DéclarationLes 4 lignes Sitemap: dans robots.txt (§ 3.1) — jamais /sitemap.xml (404 mesuré)
ContenuUniquement des URL indexables, HTTP 200, canoniques
Interditsnoindex, redirections, 404, ?s=, pagination au-delà de la page 1, paramètres UTM
lastmodDate réelle de modification de contenu, jamais la date de build
hreflangNon requis dans le sitemap si les balises <link> sont correctes ; si émis, strictement cohérent
Témoignages unitairesRetirés du sitemap si passés en noindex (E12)

4.6 Redirections 301

Constat [MESURE] : le document existant (§ 13.5) dit « aucune URL existante ne change sans redirection 301 » mais ne fournit aucun plan, aucun format, aucune cible. Le padel, lui, a 129 règles (§ 4.7). Le groupe n'en a aucune.

Contrat à créer [REGLE] — docs/seo/redirections-301.csv :

ancienne_url;nouvelle_url;code;motif

RègleDétail
Format; séparateur, en-tête en première ligne, 4 colonnes, 301 partout
Source des anciennes URLsitemap_index.xml live figé le jour de la bascule (11 sous-sitemaps mesurés : page-sitemap1..3, blog-, sport-events-, restaurants-, testimonials-, location-, team-building-, category-, jet-theme-core-)
Casse et encodageConservés exactement (leçon padel § 4.7 : « toute correction de casse casse la redirection »)
Interditsdoublon de source, boucle, cible absente, chaîne de redirection
Cas à couvrir/fr/ racine, /fr/evenements/sur-mesure/… aplati en ≤ 3 niveaux, anciens slugs Elementor, /author/lumisys/ → /fr/actualites/, /testimonials/<slug>/, URLs NL/EN, et toutes les paires de redirection de domaine (garisart.be → garisartsportsclub.be, brusselspremierpadel.be → www.brusselspremierpadel.be)
Cible0 URL de l'ancien sitemap en 404 après bascule
NginxEn production, c'est deploy/nginx/redirects.conf qui sert, pas public/_redirects (leçon padel § 4.7)

Test [REGLE] check-redirections : 0 doublon, 0 boucle, 0 cible non-200, 0 chaîne > 1 saut.

4.7 Maillage interne

Structure imposée [REGLE], héritée de la règle padel § 4.2 et adaptée à 4 niveaux :

NiveauSourceCible obligatoire
Hub → piliers/les 3 piliers + /a-propos/ + /contact/
Pilier → hub d'entités/hospitality//lieux/, /restaurants/, /team-building/, /traiteur/
Hub → fiches/lieux/les 17 lieux
Fiche → hub + pairs/lieux/<slug>//lieux/ + pilier + 2 lieux voisins en réciproque
Marque → groupetout sous-domainehttps://tero.be/ + son pilier (R3)
Footertoutes les pagesles 3 piliers, /lieux/, /contact/, /actualites/, mentions légales

Règles chiffrées [REGLE]

---

5. Modèle éditorial multilingue

5.1 Nommage des marques et entités — jamais traduites

Règle cardinale [REGLE] : un nom propre de marque ne se traduit jamais, dans aucune langue, dans aucun cas. Seul le nom commun de catégorie se traduit.

EntitéFRNLENTraduisible ?
GroupeTero · Tero GroupTero · Tero GroupTero · Tero GroupNon
PiliersTero Hospitality · Tero Leisure · Tero Sport EventsidemidemNon
TraiteurTeroirTeroirTeroirNon
HébergementTero LodgesTero LodgesTero LodgesNon
LieuxTero House17 · Tero River House · Tero Foresthouse Martué · Tero Eventhouse Waterloo · Château de Terblock · Hôtel La Malle PosteidemidemNon
Marques conservéesKnokke Out Zoute · Bistro 17 · Bistro Pilko · Garisart Sports Club · Lime Justine Henin Sports Hub · River Woods · Nest Zwin Bistro · Jackfly School · Sportero · TeroGOidemidemNon
ClubsTero Padel Club · Tero Padel Academy · Tero StudioidemidemNon
Événementsimmorun · batirun · bouwrun · buildandrun · impactrun · terotrail · Brussels Premier Padel · 12km AnderlechtidemidemNon
Co-marqueIMMOBELIMMOBELIMMOBELNon
Catégorieteam building · traiteur · lieux · club de padel · bien-êtreteambuilding · traiteur · locaties · padelclub · welzijnteam building · catering · venues · padel club · wellnessOui
FondateursArthur Lhoist · Nicolas LhoistidemidemNon
Signaturelive. share. reconnect.idemidemNon — minuscules, points, invariable

Test [REGLE] check-noms-propres : aucune chaîne de la colonne « Non » ne doit apparaître traduite, translittérée ou accentuée différemment. En particulier : Knokke Out (jamais « Knokke-Out »), Teroir, Terblock, Garisart Sports Club (jamais « Garisart » seul pour le club), immorun en minuscules.

5.2 Lexique figé FR / NL / EN — le manque M2 comblé

Le § 5.2 existant ne couvre que le FR. Table complète, forme imposée dans les trois langues :

SujetFR (référence)NL (néerlandais belge)EN (anglais britannique)Forme interdite
Activité collectiveteam buildingteambuildingteam buildingFR : « teambuilding » · NL : « team building » en deux mots
Lieu d'hébergementTero Lodges, puis « gîtes »Tero Lodges, puis « verblijven »Tero Lodges, puis « lodges »« lodge » seul sans Tero
Restauration de marqueTeroirTeroirTeroir« traiteur Tero » quand on parle de la marque
Positionnement traiteurfarm to forkfarm to forkfarm to fork« farm-to-fork », « du champ à l'assiette »
Événement sur mesuresur-mesureop maattailor-madeFR : « custom » · EN : « bespoke » et « tailor-made » mélangés
OrthographeévénementevenementeventFR : « évènement »
Délai de réponse« endéans les 48 h »« binnen de 48 uur »« within 48 hours »« rapidement », « ASAP »
ImpactB Corp (démarche), impact, reconnexionB Corp, impact, herverbindingB Corp, impact, reconnection« écolo », « green » comme slogan
Naturese reconnecter à soi, aux autres, à la natureherverbindenreconnect« déconnexion », « évasion »
RéservationréserverreserverenbookNL : « boeken » pour un lieu, « reserveren » pour une activité
Lieuxlieuxlocatiesvenues« salles » pour désigner le domaine entier
Séminaireséminaireseminarieconference / seminarNL : « seminair »
Gîtegîtevakantiehuisself-catering lodge—
Bien-êtrebien-êtrewelzijnwellness—
Padelpadelpadelpadel« paddle », « padel tennis »
Terrainterrainbaan (copie) / terrein (nav, URL)court—
Mentions légalesmentions légalesjuridische informatielegal notice—
Politique de confidentialitéconfidentialitéprivacyprivacy—
TVATVAbtwVATNL : « TVA »
Fil d'Arianefil d'Arianekruimelpadbreadcrumb—

Règles [REGLE]

5.3 Ton par pilier

Le § 5.1 existant donne un ton pour tout le groupe. Les trois piliers ne parlent pas au même lecteur : ce manque (M6) rend les pages Leisure et Sport Events inévitablement génériques.

DimensionTero HospitalityTero LeisureTero Sport Events
LecteurOffice manager, DRH, assistante de directionPratiquant, parent, habitant du quartierResponsable RSE, DRH, coureur, entreprise partenaire
Bénéfice mis en avantL'organisation est prise en charge de bout en boutLa progression et le plaisir de jouerL'inscription collective et l'impact
Preuve17 lieux, capacité, traiteur Teroir, délai de réponseNombre de terrains, cours, horaires, tarifsDistance, date, nombre d'inscrits, cause
TonRassurant, professionnel, concret, vouvoiementChaleureux, dynamiqueFédérateur, factuel, chiffré
CTA« Demandez une proposition »« Réservez un terrain »« Inscrivez votre équipe »
Longueur de page700-1200 mots400-800 mots400-700 mots
Chiffre obligatoireAu moins 1 fait chiffré par sectionAu moins 1 fait chiffré par sectionDate + lieu + distance + inscription
Interdit spécifiqueSuperlatif sur le lieu (« exceptionnel » sans capacité)Comparaison avec un club concurrent nomméPromesse de dossard sans formulaire d'inscription opérationnel

Règles transverses [REGLE]

5.4 Longueurs et structures de titres

ÉlémentRègle [REGLE]Origine
title (balise)30 à 65 caractères, unique sur tout le groupe et toutes les languespadel § 4.1
title (forme)`<Intitulé de la page>Tero — le suffixe de marque est Tero, jamais TERO, jamais Tero Group` en alternance§ 5.1-3
meta description120 à 165 caractères, unique, avec un fait chiffré et un appel à l'actionpadel § 4.1
H1un seul par page, contient le mot-clé principal, sans le suffixe de marquepadel § 4.1
Réponse citable40 à 60 mots sous le H1, 40 à 60 mots sous chaque H2 interrogatif§ 3.3 G1
Chapô≤ 2 phrases, ≤ 25 mots chacune§ 5.3 existant
Paragraphe≤ 4 lignes en mobile§ 5.3 existant
FAQ4 à 8 questions par page clépadel § 4.8
Pagehospitality 700-1200 mots · leisure / sport-events 400-800 · fiche lieu 300-600 · fiche événement 250-500§ 5.3
og:title / og:descriptionPrésents sur toutes les pages ; og:image en 1200 × 630, dimensions déclarées = dimensions serviespadel § 4.1 + correction E11
altDescriptif et factuel, jamais le nom de fichier, jamais « image de »§ 15 des règles
Date visibleSur tarifs, horaires, lieux et événements : « Mis à jour le JJ mois AAAA »padel § 4.8
AccentsObligatoires en FR — « Reserver » disqualifie la pagepadel § 3.3-3

5.5 Carte de mots-clés — le manque M3 comblé

Règle [REGLE] : 1 intention principale + 3 à 6 variantes par page, présentes dans le title, la description, le H1 et la première phrase. Les volumes ne sont pas mesurés : ce sont des hypothèses à valider dans Search Console après 8 semaines (reprise de la règle padel § 4.9).

PageFRNLEN
Accueil groupegroupe hôtelier et événementiel Belgiquehoreca- en evenementengroep Belgiëhospitality and events group Belgium
/a-propos/qui est Tero Groupwie is Tero Groupabout Tero Group
/hospitality/team building entreprise Belgique, séminaire d'entreprise, location de lieuxteambuilding bedrijf België, seminarie, locatieverhuurcorporate team building Belgium, corporate seminar, venue hire
/leisure/club de padel Belgique, cours de tennis, bien-êtrepadelclub België, tennisles, welzijnpadel club Belgium, tennis lessons, wellness
/sport-events/course à pied entreprise Belgique, événement sportifloopwedstrijd bedrijf België, sportevenementcorporate running event Belgium, sports event
/lieux/lieu de séminaire, salle de réunion, gîte de groupevergaderlocatie, seminariehuis, groepsverblijfseminar venue, meeting room, group lodge
/traiteur/traiteur événementiel, farm to forkcatering evenementen, farm to forkevent catering, farm to fork
/restaurants/restaurant Knokke, bistrot Bruxellesrestaurant Knokke, bistro Brusselrestaurant Knokke, bistro Brussels
/evenements/<slug>/« inscription » + nom de la course« inschrijving » + naam« registration » + event name
/contact/contact Tero Groupcontact Tero Groupcontact Tero Group

Requêtes GEO témoins (en langage naturel, testées mensuellement, § 3.4) : « quel groupe organise des team buildings en Belgique », « où loger 100 personnes en Ardenne », « meilleur traiteur d'entreprise au Luxembourg », « qui est derrière Knokke Out Zoute », « combien coûte un séminaire résidentiel en Belgique », « best corporate event agency in Belgium ».

KPI 90 jours [REGLE]

IndicateurCible
URL de l'ancien sitemap en 4040
Erreurs de données structurées (Rich Results Test + validator.schema.org)0
Pages indexées / pages du sitemap≥ 95 %
title uniques et dans les bornes100 %
Entité citée avec la bonne catégorie≥ 3 requêtes témoins
llms.txt : URL citées valides100 %
Trafic utm_source IA (chatgpt.com, perplexity.ai, copilot, gemini)Tendance croissante, base à figer au jour 0

---

6. Modèle de contenu, sources de vérité et QA

6.1 Modèle d'entités, champs et relations

Contrat de données [REGLE] — un seul schéma, trois langues, mêmes clés :

src/content/fr/lieux/<slug>.json slug = tero-lodges-jalhay | knokke-out-zoute | …

src/content/fr/marques/<slug>.json slug = teropadelclub | terostudio | garisartsportsclub | teroir | …

src/content/fr/piliers/<slug>.json slug = hospitality | leisure | sport-events

src/content/fr/pages/<page>.json page = accueil | a-propos | impact | contact | …

src/content/fr/evenements/<slug>.json

src/content/nl/... src/content/en/... mêmes noms de fichiers, contenu natif

EntitéCléChamps obligatoiresRelationsSource de vérité
Groupe— (singleton)name, alternateName, legalName?, foundingDate, founders[], headcount, addresses[], phones[], slogan, values[], languages[], sameAs[]subOrganization[]tero-group-facts.json
Pilierslugname, description, knowsAbout[], brands[]parentOrganizationtero-group-facts.json
Lieuslugname, city, country, pillar, address, geo?, capacity?, usage[], images[], amenities[]pilier, lieuxVoisins[]tero-group-facts.json
Restaurantslugname, city, address, cuisine?, hours?, images[]lieu, piliertero-group-facts.json
Marqueslugname, domainCanonique, pillar, logo, description, partenaires[]parentOrganization, piliertero-group-facts.json
Partenaire co-endosséslugname, url, logo, role (sponsor/funder/contributor/coorganisateur)marquecontrat partenaire
Événementslugname, startDate, endDate?, location, registrationUrl, price?, distance?marque, lieu, partenaires[]utm.json + tero-group-facts.json
Serviceslugname, description, areaServed[], provider, ctaUrlpilierpage de contenu
Pageslugmeta{title,description}, hero{eyebrow,title,lead,image,imageAlt,cta}, sections[], faq[]—pages/<slug>.json
Personneslugname, jobTitle, sameAs?worksFortero-group-facts.json

Blocs de section — liste fermée [REGLE], héritée du padel (§ 3.2) : text, cards, list, stats, pricing, faq, cta, places, events, brands. Ne jamais inventer un type de bloc. Le rendu est générique.

Règles [REGLE]

6.2 Le fichier de faits — content/sources/tero-group-facts.json

Constat [MESURE] : § 1.5 des règles cite content/sources/tero-group-facts.md comme source de vérité. Ce fichier n'existe pas dans le dépôt (ni content/, ni src/). C'est le manque M7 : la règle « un fait = une source » n'a pas de source.

Schéma imposé [REGLE] — lisible par un script, pas seulement par un humain :

{
  "_meta": { "version": "1.0.0", "updatedAt": "2026-10-15", "source": "audit 2026-10-15 + client" },
  "group": {
    "name": "Tero",
    "alternateName": ["Tero Group", "groupe Tero"],
    "legalName": null,
    "foundingDate": "2020",
    "mergerDate": "2022",
    "headcount": { "value": 125, "approx": true, "status": "mesure" },
    "venuesCount": { "value": 17, "status": "mesure" },
    "expertiseYears": { "value": 25, "status": "mesure" },
    "slogan": "live. share. reconnect.",
    "idea": "Arrêter le temps, pour se reconnecter aux autres, à la nature, à soi.",
    "values": ["la passion", "l'engagement", "le respect", "l'authenticité"],
    "languages": ["fr", "nl", "en"],
    "sameAs": []
  },
  "founders": [
    { "slug": "arthur-lhoist", "name": "Arthur Lhoist", "jobTitle": null },
    { "slug": "nicolas-lhoist", "name": "Nicolas Lhoist", "jobTitle": null }
  ],
  "addresses": [
    { "country": "BE", "street": "Chaussée de Tervuren 389", "postalCode": "1410",
      "city": "Waterloo", "phone": "+32 484 59 87 48", "geo": null },
    { "country": "LU", "street": "Rives des Clausen 15", "postalCode": "2165",
      "city": "Luxembourg", "phone": "+352 671 315 015", "geo": null }
  ],
  "pillars": [
    { "slug": "hospitality",  "name": "Tero Hospitality",  "covers": ["lieux", "team building", "traiteur", "restaurants"] },
    { "slug": "leisure",      "name": "Tero Leisure",      "covers": ["clubs", "académies"] },
    { "slug": "sport-events", "name": "Tero Sport Events", "covers": ["événements sportifs", "consultance"] }
  ],
  "brands": [
    { "slug": "teropadelclub", "name": "Tero Padel Club", "domain": "teropadelclub.be", "pillar": "leisure" },
    { "slug": "terostudio",    "name": "Tero Studio",     "domain": "terostudio.be",    "pillar": "leisure" },
    { "slug": "garisartsportsclub", "name": "Garisart Sports Club", "domain": "garisartsportsclub.be",
      "domainCiteDansLesDocs": "garisart.be", "redirection": "garisart.be -> garisartsportsclub.be", "pillar": "leisure" },
    { "slug": "teroir",        "name": "Teroir",          "domain": null,               "pillar": "hospitality" },
    { "slug": "immorun",       "name": "immorun",         "domain": "immorun.be",       "pillar": "sport-events",
      "partenaires": [{ "slug": "immobel", "name": "IMMOBEL", "role": "a-trancher" }] },
    { "slug": "immorun-lu",    "name": "immorun",         "domain": "immorun.lu",       "pillar": "sport-events" },
    { "slug": "batirun",       "name": "batirun",         "domain": "batirun.be",       "pillar": "sport-events" },
    { "slug": "bouwrun",       "name": "bouwrun",         "domain": "bouwrun.be",       "pillar": "sport-events" },
    { "slug": "buildandrun",   "name": "buildandrun",     "domain": "buildandrun.be",   "pillar": "sport-events" },
    { "slug": "impactrun",     "name": "impactrun",       "domain": "impactrun.be",     "pillar": "sport-events" },
    { "slug": "terotrail",     "name": "terotrail",       "domain": "terotrail.be",     "pillar": "sport-events" },
    { "slug": "brusselspremierpadel", "name": "Brussels Premier Padel",
      "domain": "www.brusselspremierpadel.be", "domainCiteDansLesDocs": "brusselspremierpadel.be",
      "redirection": "brusselspremierpadel.be -> www.brusselspremierpadel.be", "pillar": "sport-events" },
    { "slug": "12kmanderlecht", "name": "12km Anderlecht", "domain": "12kmanderlecht.be", "pillar": "sport-events" }
  ],
  "places": [
    { "slug": "<a-completer-17>", "name": "Tero Lodges Jalhay", "city": "Jalhay",
      "country": "BE", "pillar": "hospitality",
      "address": null, "geo": null, "capacity": null, "hours": null, "status": "a-completer" }
  ],
  "restaurants": [
    { "slug": "knokke-out-zoute", "name": "Knokke Out Zoute", "city": "Knokke-Heist", "address": null },
    { "slug": "bistro-17",        "name": "Bistro 17",        "city": "Luxembourg",  "address": null },
    { "slug": "bistro-pilko",     "name": "Bistro Pilko",     "city": null,          "address": null }
  ]
}

Règles [REGLE]

6.3 Contrat UTM — content/sources/utm.json

Règle [REGLE]Détail
Sourcecontent/sources/utm.json, recopié caractère pour caractère depuis les liens fournis par le client
InterditAjouter, retirer, traduire, ré-encoder ou « corriger » un paramètre
Interdit absoluAucun UTM sur un lien interne
LibellésLe libellé du lien doit décrire la destination réelle (jamais « Réserver » vers une page d'information)
CouvertureChaque lieu, chaque événement, chaque marque a son lien, ou explicitement aucun
Contrôlecheck-utm : diff entre utm.json et tous les liens rendus ; refuse un UTM modifié et un UTM interne

6.4 Contrat QA — content/sources/site-expectations.json

Attentes chiffrées opposables [REGLE] :

{
  "seo": {
    "titleMin": 30, "titleMax": 65,
    "descriptionMin": 120, "descriptionMax": 165,
    "titlesUniques": true, "descriptionsUniques": true,
    "ogImageWidth": 1200, "ogImageHeight": 630,
    "minLiensEntrants": 3,
    "profondeurMax": 3
  },
  "i18n": {
    "langues": ["fr", "nl", "en"],
    "hreflang": ["fr-BE", "nl-BE", "en", "x-default"],
    "xDefault": "fr",
    "pariteDeStructure": true,
    "slugsIdentiques": true
  },
  "schema": {
    "autoriteUnique": "src/data/schema-core.ts",
    "typesInterditsSansSource": ["aggregateRating", "review", "vatID", "legalName"],
    "aucunArticleHorsBlog": true,
    "aucunAuteurTechnique": true,
    "aucuneUrlPreview": true,
    "organizationIdUnique": "https://tero.be/#organization",
    "parentOrganizationObligatoireSurSousDomaines": true
  },
  "domaines": {
    "canoniques": {
      "garisart": "garisartsportsclub.be",
      "brusselspremierpadel": "www.brusselspremierpadel.be"
    },
    "redirectionsObligatoires": [
      "garisart.be -> garisartsportsclub.be",
      "brusselspremierpadel.be -> www.brusselspremierpadel.be"
    ],
    "canonicalInterDomainesInterdit": true
  },
  "geo": {
    "llmsTxtMaxKo": 8,
    "llmsFullTxtMinKo": 30, "llmsFullTxtMaxKo": 90,
    "reponseCitableMots": [40, 60],
    "robotsBotsIa": ["GPTBot","OAI-SearchBot","ChatGPT-User","ClaudeBot","Claude-User","Claude-SearchBot","PerplexityBot","Perplexity-User","Google-Extended","Google-CloudVertexBot","Bingbot","Applebot","Applebot-Extended","CCBot","AmazonBot","meta-externalagent","MistralAI-User","DuckAssistBot"],
    "robotsBotsBloques": ["SemrushBot","AhrefsBot","MJ12bot"],
    "sitemapDeclare": "https://tero.be/sitemap_index.xml"
  },
  "redirections": { "format": "csv-4-colonnes", "code": 301, "doublonsInterdits": true, "cibleAbsenteInterdite": true },
  "placeholders": { "interdit": "<À FOURNIR" }
}

Arbitrage [REGLE] : foundingDate est autorisé si et seulement si tero-group-facts.json porte "foundingDate": "2020" avec status: "mesure". Le contrôle lit la source, il ne fait pas confiance à la page. legalName, vatID, aggregateRating et review restent interdits sans source écrite.

6.5 Les contrôles exécutables à créer

Constat [MESURE] : § 19 des règles impose « build puis vérification » et « la sortie de la commande à l'appui », mais aucune commande n'existe dans le dépôt (content/, src/, package.json absents). Le padel a 10 scripts nommés (§ 7.3) ; le groupe n'en a aucun. C'est le manque qui rend tout le reste inapplicable.

ScriptCe qu'il refuse (échec = build bloqué)
check-schema"@type" littéral hors schema-core.ts ; @id d'organisation avec segment de langue ; Article hors blog ; Person d'auteur sur page non éditoriale ; sameAs hors liste blanche ; aggregateRating/review/vatID ; JSON-LD non JSON.parse-able ; parentOrganization absent sur un sous-domaine
check-seotitle hors 30-65 ; description hors 120-165 ; doublon de title ou de description ; absence de og:title/og:image ; og:image ≠ 1200×630 ; deux H1 ; saut de niveau Hn
check-hreflangNon-réciprocité ; x-default ≠ FR ; cible non-200 ; doublon région/global ; alternate sur /404 ; manque de région (fr au lieu de fr-BE)
check-canonicalCanonical absent, relatif, sans slash final, changeant de langue, ou multiple ; canonical inter-domaines non déclaré
check-domaineDomaine cité ≠ domaine canonique de tero-group-facts.json ; redirection de domaine manquante ou en 302 ; domaine canonique qui répond autre chose que 200
check-llmsllms.txt > 8 ko ; URL citée non-200 ; absence des 3 piliers, du NAP, du bloc > ; llms-full.txt absent ou < 30 ko ; vocabulaire CMS interne (« Theme Parts », « Listing Items »)
check-robotsDisallow: / global ; Sitemap: pointant /sitemap.xml ; bot IA de la liste site-expectations absent ; bot de la liste bloquée autorisé
check-napToute divergence, caractère par caractère, entre tero-group-facts.json et les rendus (site, JSON-LD, llms*.txt)
check-lexiqueForme interdite du § 5.2 (« teambuilding » en FR, « farm-to-fork », « évènement », « TERO » dans une phrase, TERO en logo, homepage comme titre) ; accent manquant
check-noms-propresNom de marque traduit, translittéré, mal capitalisé, ou nom de lieu traduit (§ 5.1)
check-placeholdersPrésence de <À FOURNIR dans tout artefact publié
check-endossementPage de marque sans mention du pilier ou sans lien vers tero.be ; parentOrganization absent ; rôle de co-marque ambigu (§ 2.7 CO4)
check-maillagePage < 3 liens entrants ; ancre générique (« cliquez ici ») ; lien interne cassé ; UTM sur lien interne
check-redirectionsDoublon, boucle, cible absente, chaîne > 1 saut
check-pariteNombre de pages/sections/FAQ différent entre FR, NL et EN ; clé présente dans une langue et absente dans une autre

Ordre imposé [REGLE] : build puis verify (tous les check-*), jamais l'inverse. Un écart se consigne avec la page et la raison ; jamais de livraison sans la sortie de commande (§ 19, conservé tel quel).

---

7. Ce qui reste à trancher par le client

#QuestionCe qu'on ne peut pas faire sans réponseImpact
Q1Combien de lieux, exactement, et avec quelles adresses ? « 17 lieux » est mesuré [MESURE] ; 13 lieux sur 17 n'ont ni adresse ni coordonnées dans nos sourcesImpossible d'émettre 13 LocalBusiness et 13 fiches GBPBloquant GEO local (C4)
Q2Les URL officielles des réseaux sociaux du groupe (Instagram, LinkedIn, Facebook, YouTube)sameAs reste vide → consolidation d'entité impossibleBloquant C1/C5
Q3Bytespider : autorisé ou bloqué ? tero.be l'autorise [MESURE], la règle padel le bloqueDeux socles robots contradictoires dans le même groupeNon bloquant
Q4Le Luxembourg est-il une cible SEO distincte ? (site .lu, hreflang fr-LU, NAP LU)Détermine si immorun.lu est un site à part ou une varianteStructurant (§ 4.3)
Q5La raison sociale (legalName) et le titre exact des fondateurs (co-fondateur, CEO, président ?)legalName et Person.jobTitle non émisNon bloquant
Q6Les piliers sont-ils des entités juridiques (sociétés distinctes) ou des regroupements commerciaux ?Organization + parentOrganization (piliers = entités) vs Brand + ItemList (piliers = catégories). Aujourd'hui Organization est posé par hypothèseStructurant (§ 2.3)
Q7/fr/ à la racine, ou / = FR sans préfixe ?Deux politiques possibles ; le padel met le FR à la racine, tero.be utilise /fr/Structurant (§ 4.1)
Q8Les témoignages unitaires restent-ils indexables ?Décide noindex, follow + retrait du sitemap (E12)Non bloquant
Q9La démarche B Corp est-elle une certification obtenue, à quelle date, sous quel nom d'entité ?Interdit d'émettre hasCredential / award / sameAs B Corp en attendantNon bloquant
Q10Un llms.txt unique ou un par langue ?La convention llmstxt.org ne prévoit pas de variante linguistique : recommandation = un llms.txt FR à la racine + /nl/ et /en/ en optionNon bloquant
Q11Qui possède éditorialement le llms-full.txt et à quelle fréquence est-il mis à jour ?Un fichier sans propriétaire dérive comme les 536 CSSNon bloquant
Q12Le mot-symbole tero minuscules est-il définitif comme logo de référence ?Confirme la correction E1 avant réécriture de la charteBloquant charte
Q13Quel est le rôle exact d'IMMOBEL sur immorun : sponsor, coproducteur, ou propriétaire de la marque ?Trois graphes différents ; sans réponse, aucun nœud partenaire n'est émis (§ 2.7)Bloquant sur les pages immorun
Q14Le lockup visuel co-marqué (immorun + IMMOBEL) est-il autorisé, et sous quelles règles ?Aucun lockup combiné n'est dessiné par un agent (§ 1.4-3) ; le header actuel affiche déjà IMMOBEL [MESURE lead]Non bloquant
Q15garisart.be et brusselspremierpadel.be restent-ils des domaines de redirection, ou faut-il les abandonner définitivement ?Décide s'ils figurent au plan 301 et au llms.txt, ou s'ils sont retirés des documentsNon bloquant

---

DELTA A INTEGRER DANS LA CHARTE

Liste numérotée des modifications concrètes à appliquer à craft/tero-group-rules.md, au design system (DESIGN.md, tokens.css, design-tokens.json, manifest.json) et aux skills du plugin.