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 :
| Étiquette | Signification | Consé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 technique | Opposable à 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 existant | Ce que j'ai mesuré le 15/10/2026 | Correction exigée | Étiquette | ||
|---|---|---|---|---|---|---|
| E1 | tero-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] | ||
| E2 | AUDIT § 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] | ||
| E3 | tero-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 Article | La 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] | ||
| E4 | tero-group-rules § 13.1 : 5 défauts listés | Il 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 (`/fr | en | nl/author/lumisys/`) | Ajouter ces trois corrections en tête de priorité : une seule organisation, un seul @id, url = https://tero.be/ | [MESURE] |
| E5 | tero-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] | ||
| E6 | tero-group-rules § 13.3 : « llms.txt et llms-full.txt décrivant le groupe… » — présenté comme une règle à appliquer | https://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] | ||
| E7 | tero-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 bloque | Fixer 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 → FR | Le 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 **« homepage | Tero Padel Club »** sur les deux | La 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] | |
| E9 | tero-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égion | Passer à 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] | ||
| E10 | tero-group-rules § 1.4-2 et § 6.3 : la maison mère n'est jamais présentée à plat | Sur 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 à Tero | L'endossement doit être aussi dans les données structurées, pas seulement à l'écran | [MESURE] | ||
| E11 | AUDIT § 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 = 534 | Corriger. Norme cible : og:image en 1200 × 630 | [MESURE] | ||
| E12 | Non documenté | /fr/testimonials/<slug>/ est listé dans le sitemap (testimonials-sitemap.xml) et donc indexable. La page liste a pour type CollectionPage | Tranché en § 4.5 : témoignages unitaires en noindex, follow sauf enrichissement (≥ 150 mots, nom, société, lieu, date) | [MESURE] + [REGLE] | ||
| E13 | tero-group-rules § 1.3 cite garisart.be comme domaine du groupe ; AUDIT § 2.2 aussi | Complément du lead (15/10/2026) : garisart.be redirige vers garisartsportsclub.be ; brusselspremierpadel.be redirige vers www.brusselspremierpadel.be | Le 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 | ||
| E14 | Aucun document ne traite la co-endossement | Complément du lead (15/10/2026) : immorun.be affiche la co-marque IMMOBEL dans son en-tête | Deux 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)
| # | Manque | Pourquoi c'est bloquant | Où c'est traité ici |
|---|---|---|---|
| M1 | Aucun modèle de contenu : pas de schéma de page, pas de contrat de fichiers, pas de type de blocs | Sans 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 |
| M2 | Aucun lexique NL/EN : § 5.2 ne donne que le FR | L'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 |
| M3 | Aucune carte de mots-clés : § 13 ne cite aucun mot-clé cible | Impossible de mesurer la performance ; le padel a la sienne (11 lignes), le groupe aucune | § 5.5 |
| M4 | Aucun 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 |
| M5 | Aucune règle de longueur (title, description, réponse citable) | Le padel les a (§ 4.1, § 4.8) ; le groupe non | § 5.4 |
| M6 | Aucun ton par pilier | § 5.1 donne un ton unique pour un groupe à trois publics | § 5.3 |
| M7 | Aucun 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 |
| M8 | Aucun plan de redirections | § 13.5 dit « 301 » sans liste, sans format, sans cible. Le groupe a 13 domaines et 399 pages | § 4.6 |
| M9 | Aucune 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 |
| M10 | Aucune règle de domaine canonique ni de co-endossement de marque | 13 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/#organization | Organization |
| Site web groupe | https://tero.be/#website ; un par langue : https://tero.be/fr/#website | WebSite |
| Page | <url-canonique>#webpage | WebPage |
| Pilier | https://tero.be/#hospitality · #leisure · #sport-events | Organization (ou Brand — voir § 7 Q6) |
| Marque opérationnelle | https://<domaine>/#organization + https://tero.be/#brand-<slug> | Organization + Brand |
| Lieu | https://tero.be/fr/lieux/<slug>/#place | Place (et LocalBusiness si éligible) |
| Restaurant | https://tero.be/fr/restaurants/<slug>/#restaurant | Restaurant |
| Événement | https://<domaine>/fr/evenements/<slug>/#event | Event |
| Service | https://tero.be/fr/<pilier>/<service>/#service | Service |
| Personne | https://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#organizationet 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 |
|---|---|
vatID | Interdit par § 13.2 du document existant — aucune source mesurée du numéro |
legalName | Aucune raison sociale mesurée. À fournir par le client avant toute émission |
award, aggregateRating, review | Interdits — aucune source |
sameAs rempli | Les URL sociales n'ont pas été mesurées. Placeholder bloquant (§ 3.4) |
hasCredential / B Corp | La « 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) :
Organization.logo= le mot-symbole en minusculestero, ratio intrinsèque 2,5:1 conservé (viewBox0 0 100 40[MESURE]).- Le monogramme (anneau + barre, ratio 0,683 [MESURE]) est déclaré comme
ImageObjectséparé, utilisé en favicon,apple-touch-icon,mask-iconetOrganization.imagesecondaire — jamais danslogo. - Le recadrage « carré » d'un mot-symbole 2,5:1 est interdit (déformation = logo recomposé, piège § 17.12).
- Interdiction de déclarer un SVG dans
logosans repli PNG : Google lit lelogoen raster. Émettrelogoen PNG (≥ 112 × 112, ici 1000 × 400) etimageen SVG.
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]
- Les
Personfondateurs vivent sur le domaine groupe (tero.be) et nulle part ailleurs.worksForpointe l'@id racine, jamais une URL de page. - Les @id de piliers sont stables : ils ne contiennent pas d'URL de page et survivent à un changement d'arborescence.
- Le
jobTitleexact (co-fondateur, CEO, président ?) est [À VALIDER CLIENT] (§ 7 Q5). - Une marque opérationnelle (
teropadelclub.be,terostudio.be,garisartsportsclub.be,immorun.be, …) émet toujoursparentOrganization: {"@id": "https://tero.be/#organization"}dans sa propreOrganizationde domaine. Correction de E10. - Le groupe est né de l'alliance de Tero, People First (devenu Tero Team Building) et Knokke Out [MESURE] : ces trois noms vivent dans le récit éditorial (
/a-propos/), pas comme entités séparées dans le graphe —People Firstn'existe plus sous ce nom.
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]
Placeest obligatoire pour les 17 lieux ; l'ajout deLocalBusinessest conditionnel : seulement si le lieu a une adresse postale propre, des horaires d'accueil du public et une fiche Google Business Profile. SinonPlaceseul (unLocalBusinesssans horaires nigeoest un signal faible, voire un avertissement Search Console).streetAddress,postalCode,geo,openingHoursSpecification: jamais estimés. Non fourni = champ omis, jamais inventé.- Le NAP du lieu doit être caractère pour caractère identique à
content/sources/tero-group-facts.json(§ 6.2).
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"
}
}
EventsansstartDateest invalide et sera rejeté : mieux vaut ne pas émettre le nœud que l'émettre incomplet. Événement passé → page archivée ennoindexet 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ée | Correction 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 agence | Person @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 Person | Supprimer — fuite d'environnement. sameAs n'existe que sur l'Organization racine, contre liste blanche (§ 3.4) | ||
Organization.logo non représentatif | TERO_MONOGRAM-1.png, 1 272 × 1 861 | Déclarer le mot-symbole tero (2,5:1) ; monogramme réservé à favicon / image | ||
og:image incohérent | og:image = …-1024x683.jpg, width = 800, height = 534 | Gé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 versions | url = 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 | `/fr | en | nl/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 page | Organization racine | WebSite | WebPage | BreadcrumbList | Autre |
|---|---|---|---|---|---|
| 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]
FAQPageuniquement si la FAQ est visible sur la page. Le texte deacceptedAnswerest strictement identique au texte affiché.- 4 à 8 questions par page clé (reprise de
_ref/teropadelclub§ 4.8). - Une
Questiondont la réponse n'est pas sourcée n'est pas émise. - Le chiffre « 17 lieux » ci-dessus est [MESURE] (§ 1.3). Si le client en annonce un autre, c'est lui qui tranche (§ 7 Q1).
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ôle | Propriété | Qui la porte | Ne jamais utiliser |
|---|---|---|---|
| Propriétaire de la marque (le groupe) | parentOrganization sur l'Organization de la marque | Toujours Tero | — |
| Organisateur de l'événement | Event.organizer | L'entité qui porte juridiquement l'événement | sponsor pour un organisateur |
| Partenaire / sponsor | Event.sponsor (ou funder) | La co-marque (IMMOBEL) | organizer, parentOrganization, publisher |
| Contributeur éditorial (si IMMOBEL fournit du contenu) | Event.contributor | La co-marque | author |
{
"@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ègle | Raison |
|---|---|---|
| CO1 | Une seule Organization propriétaire du site par domaine. La co-marque est un nœud secondaire, jamais un second propriétaire | Sinon chaque moteur choisit un « propriétaire » différent |
| CO2 | La co-marque ne reçoit jamais parentOrganization vers le groupe Tero : elle n'est pas une sous-marque de Tero | Sinon la hiérarchie du groupe est fausse |
| CO3 | La co-marque n'apparaît jamais dans subOrganization de https://tero.be/#organization | Idem |
| CO4 | Le 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 |
| CO5 | Le 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 |
| CO6 | Le NAP de la co-marque n'est pas publié par Tero sans autorisation écrite du partenaire | Risque juridique |
| CO7 | Si IMMOBEL est coproducteur, la structure devient organizer: [{"@id": immorun}, {"@id": immobel}] — deux organisateurs déclarés, jamais un sponsor déguisé | Exactitude avant commodité |
| CO8 | Le 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+parentOrganizationTero. 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 live | Verdict |
|---|---|---|
User-agent: * / Disallow: | Présent | ✔ |
Blocs Allow: / explicites | GPTBot, Google-Extended, ClaudeBot, AmazonBot, Applebot-Extended, Bytespider, CCBot, meta-externalagent | ⚠ 8 agents seulement |
Sitemap: | https://tero.be/sitemap.xml | ✘ 404 mesuré |
OAI-SearchBot, ChatGPT-User | Absents | ✘ |
PerplexityBot, Perplexity-User | Absents | ✘ manque le bot de réponse le plus utilisé en Europe |
Claude-User, Claude-SearchBot | Absents | ✘ |
Bingbot, Applebot, Google-CloudVertexBot, MistralAI-User, DuckAssistBot | Absents | ✘ |
| Avertissement juridique anti-scraping en tête | Pré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]
- La ligne
Sitemap:pointe/sitemap_index.xml, pas/sitemap.xml(correction de E5). - Chaque sous-domaine du groupe sert le même socle, avec son propre
Sitemap:. - Bytespider est un arbitrage client (§ 7 Q3) :
_ref/teropadelclub§ 4.5 le bloque, tero.be l'autorise. Recommandation : le bloquer sur les deux (il ne génère aucune citation, il consomme). Non tranché = on ne change rien et on le signale. - Ne jamais bloquer tout le site.
check-robotsrefuse unDisallow: /global. - Le robots.txt est versionné dans le dépôt, pas généré par une extension.
3.2 llms.txt et llms-full.txt
Constat mesuré — le « travail » demandé par § 13.3 est déjà fait, mal :
| Fichier | Statut live | Contenu mesuré | Diagnostic |
|---|---|---|---|
/llms.txt | 200 | 76 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.txt | 404 | Sert 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
- Tero Hospitality : lieux, team building, traiteur Teroir, restaurants.
- Tero Leisure : clubs et académies — padel, tennis, bien-être.
- Tero Sport Events : courses et événements sportifs, consultance.
## Établissements et marques
- Lieux : 17 lieux d'exception en Belgique et au Luxembourg.
- Restaurants : Knokke Out Zoute, Bistro 17, Bistro Pilko.
- Teroir : traiteur, farm to fork.
- Tero Padel Club : clubs de padel.
- Tero Studio : Reformer, yoga, Pilates.
- Garisart Sports Club : club et académie de tennis.
- Tero Sport Events : immorun, batirun, bouwrun, buildandrun,
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
- Belgique : Chaussée de Tervuren 389, 1410 Waterloo — +32 484 59 87 48
- Luxembourg : Rives des Clausen 15, 2165 Luxembourg — +352 671 315 015
- Contact · À propos
- Langues : français, néerlandais, anglais
## Optional
Règles [REGLE]
- Les trois langues :
llms.txtreste en FR (langue de référence) ; le fichier NL/EN est servi par/nl/llms.txtet/en/llms.txtavec le même squelette. - Aucun fait non mesuré. Les chiffres (2020, ~125, 17 lieux, deux adresses, deux téléphones) sont ceux de § 1.1. Le nombre de lieux « 17 » est [MESURE] — voir § 7 Q1.
- Domaines canoniques :
garisartsportsclub.be(et nongarisart.be) etwww.brusselspremierpadel.be(E13). Unllms.txtqui cite un domaine qui redirige gaspille une citation. - Une URL citée dans
llms.txtdoit répondre 200 (check-llms-urls). Le fichier Rank Math actuel viole probablement déjà cette règle : 275 URL jamais vérifiées.
Action 3 [REGLE] — /llms-full.txt : ~50-80 ko, en texte, sans HTML. Plan imposé :
| Section | Contenu | Source obligatoire |
|---|---|---|
| 1. Identité | Nom, alternateName, fondateurs, date de création, effectif, langues, signature | § 1.1 des règles |
| 2. Les trois piliers | Définition + périmètre + marques rattachées | § 1.2 |
| 3. Inventaire des 17 lieux | Nom, ville, adresse, capacité, usage | tero-group-facts.json |
| 4. Restaurants | Nom, ville, adresse, type, horaires | tero-group-facts.json |
| 5. Traiteur | Teroir, positionnement, zone desservie | faits client |
| 6. Clubs et académies | Marque, ville, disciplines, publics, domaine canonique | faits par domaine |
| 7. Événements sportifs | Nom, édition, date, lieu, inscription, co-marques et leur rôle | utm.json + § 2.7 |
| 8. Offres d'entreprise | Séminaire, team building, soirée, incentive | pages service |
| 9. FAQ d'entité | 12 à 20 questions, réponses de 40-60 mots | § 3.3 |
| 10. Glossaire de marque | Tero, Tero Group, Teroir, Tero Lodges, team building, Tero Padel Club… | § 5.2 |
| 11. Coordonnées et NAP | Les deux adresses, les deux téléphones, domaines canoniques, réseaux officiels | tero-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ègle | Mesure de contrôle |
|---|---|---|
| G1 | Une réponse autonome de 40 à 60 mots immédiatement sous le H1 de chaque page clé, et sous chaque H2 formulé en question | Compteur de mots du bloc ; doit se comprendre hors contexte |
| G2 | Le 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 |
| G3 | Aucun adjectif sans chiffre. « exceptionnel » est remplacé par la capacité, la distance, le délai, le prix | zéro occurrence de la liste noire § 5.1-6 |
| G4 | Chaque fait porte sa source dans le fichier de faits, et la page affiche une date de mise à jour visible sur les pages tarifs/horaires/lieux | dateModified = date affichée |
| G5 | Tableaux en HTML, jamais en image | Test : le texte du tableau apparaît dans le texte servi |
| G6 | Jamais de contenu séparé « pour l'IA » : le contenu citable est le contenu visible | — |
| G7 | Bloc ItemList sur les hubs (3 piliers, 17 lieux, 13 marques) | Nœud présent |
| G8 | Un seul H1 par page, hiérarchie H2/H3 sans saut | check-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 :
| Champ | Belgique | Luxembourg |
|---|---|---|
name | Tero | Tero |
streetAddress | Chaussée de Tervuren 389 | Rives des Clausen 15 |
postalCode | 1410 | 2165 |
addressLocality | Waterloo | Luxembourg |
addressCountry | BE | LU |
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).
| Destination | Rôle | Statut |
|---|---|---|
| Fiche Google Business Profile Belgique | Entité locale principale | <À FOURNIR> |
| Fiche Google Business Profile Luxembourg | Entité locale secondaire | <À FOURNIR> |
| LinkedIn (page entreprise) | Entité professionnelle | <À FOURNIR> |
| Marque | <À FOURNIR> | |
| Marque | <À FOURNIR> | |
| YouTube | Marque | <À 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]
| # | Chantier | Détail | Contrôle | ||
|---|---|---|---|---|---|
| C1 | Un @id par entité | Correction de E4. Un @id sans segment de langue | check-schema : refuse un @id contenant `(/fr/ | /nl/ | /en/)#organization` |
| C2 | parentOrganization sur les 11 sous-domaines canoniques | Chaque domaine déclare son rattachement au groupe | check-schema sur chaque build de domaine | ||
| C3 | NAP unique et centralisé | Une seule source tero-group-facts.json, injectée partout | check-nap : diff entre la source et tous les rendus | ||
| C4 | Fiche GBP par lieu | 17 lieux → 17 fiches, une seule entité par lieu, NAP identique au site | Audit manuel trimestriel | ||
| C5 | Fiche Wikidata | 1 item « Tero (groupe) » + subOrganization des 3 piliers, sameAs vers tero.be | Wikidata + sameAs réciproque | ||
| C6 | Annuaires | Pages Jaunes BE/LU, LinkedIn, CCI, registres professionnels : NAP strict | check-nap sur export manuel |
Mesure GEO [REGLE] — protocole mensuel, requêtes témoins, à consigner dans docs/geo/rapports/AAAA-MM.md :
| Famille | Requê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é.
| Niveau | FR | NL | EN | Gabarit | JSON-LD |
|---|---|---|---|---|---|
| 0 | / puis /fr/ | /nl/ | /en/ | Accueil groupe | WebPage + ItemList piliers |
| — | /a-propos/ | /nl/over-ons/ | /en/about/ | À propos | AboutPage + Organization |
| — | /impact/ | /nl/impact/ | /en/impact/ | Démarche impact | WebPage |
| — | /contact/ | /nl/contact/ | /en/contact/ | Contact | ContactPage |
| 1 | /hospitality/ | /nl/hospitality/ | /en/hospitality/ | Pilier | Organization pilier |
| 1 | /leisure/ | /nl/leisure/ | /en/leisure/ | Pilier | Organization pilier |
| 1 | /sport-events/ | /nl/sport-events/ | /en/sport-events/ | Pilier | Organization pilier |
| 2 | /lieux/ | /nl/locaties/ | /en/venues/ | Hub | ItemList |
| 3 | /lieux/<slug>/ | /nl/locaties/<slug>/ | /en/venues/<slug>/ | Fiche lieu | Place |
| 2 | /restaurants/ | /nl/restaurants/ | /en/restaurants/ | Hub | ItemList |
| 3 | /restaurants/<slug>/ | idem | idem | Fiche restaurant | Restaurant |
| 2 | /team-building/ | /nl/teambuilding/ | /en/team-building/ | Service | Service + FAQPage |
| 2 | /traiteur/ | /nl/traiteur/ | /en/catering/ | Marque Teroir | Organization + Brand |
| 2 | /clubs/ | /nl/clubs/ | /en/clubs/ | Hub marques Leisure | ItemList |
| 2 | /evenements/ | /nl/evenementen/ | /en/events/ | Hub Sport Events | ItemList |
| 3 | /evenements/<slug>/ | idem | idem | Fiche événement | Event |
| 2 | /actualites/ | /nl/nieuws/ | /en/news/ | Blog | CollectionPage |
| 3 | /actualites/<slug>/ | idem | idem | Article | Article |
| — | /mentions-legales/ | /nl/juridische-informatie/ | /en/legal-notice/ | Légal | noindex, follow |
| — | /confidentialite/ | /nl/privacy/ | /en/privacy/ | Légal | noindex, follow |
| — | /404 | idem | idem | Erreur | aucun JSON-LD |
Règles [REGLE]
- Un seul segment de profondeur par entité. La structure mesurée du
llms.txtmontre des URL jusqu'à/fr/evenements/sur-mesure/voyages-entreprise/annecy/= 5 niveaux. Cible : ≤ 3. - Les slugs sont identiques dans les 3 langues pour les entités (
<slug>) ; seuls les segments d'ossature changent (lieux/locaties/venues). Les noms de marques sont toujours identiques (teroir,knokke-out-zoute,bistro-pilko). - Trailing slash : toujours. Les URL sans slash redirigent en 301 vers la version avec slash. Constat mesuré :
teropadelclub.besertcanonical https://teropadelclub.be/ensans slash alors que/fr→https://teropadelclub.be/fr: politique incohérente dans le groupe. À unifier. - Aucune URL construite à la main : passer par les helpers (
PAGE_SLUGS,pagePath(),placePath(),brandPath()). /fr/et/:/redirige en 301 vers/fr/(le FR est la version de référence [REGLE] § 14). Interdiction de servir deux accueils.
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] :
| Marque | Domaine cité dans les docs | Domaine canonique | Statut |
|---|---|---|---|
| Tero Group (maison mère) | tero.be | tero.be | actif, FR/EN/NL |
| Tero Padel Club | teropadelclub.be | teropadelclub.be | actif, 7 hreflang (dont doublons) |
| Tero Studio | terostudio.be | terostudio.be | actif, WordPress, logo TERO STUDIO |
| Garisart | ~~garisart.be~~ | garisartsportsclub.be | redirection mesurée — à corriger dans les docs |
| Brussels Premier Padel | ~~brusselspremierpadel.be~~ | www.brusselspremierpadel.be | redirection mesurée — à corriger |
| immorun | immorun.be | immorun.be | actif, co-marque IMMOBEL (§ 2.7) |
| immorun Luxembourg | immorun.lu | immorun.lu | actif |
| batirun | batirun.be | batirun.be | actif |
| bouwrun | bouwrun.be | bouwrun.be | actif |
| buildandrun | buildandrun.be | buildandrun.be | actif |
| impactrun | impactrun.be | impactrun.be | actif |
| terotrail | terotrail.be | terotrail.be | actif |
| 12km Anderlecht | 12kmanderlecht.be | 12kmanderlecht.be | actif |
Règles opposables [REGLE]
| # | Règle | Contrôle |
|---|---|---|
| R1 | Un domaine canonique par marque, déclaré dans tero-group-facts.json. Le domaine cité dans un document est toujours le canonique | diff automatique docs ↔ faits |
| R2 | Chaque domaine émet parentOrganization: https://tero.be/#organization | check-schema |
| R3 | Chaque domaine expose un lien visible vers tero.be et la mention du pilier | check-endossement |
| R4 | Le domaine qui redirige (garisart.be, brusselspremierpadel.be) sert une 301 vers le canonique : jamais un 200, jamais un 302 permanent | test HTTP |
| R5 | Aucun canonical inter-domaines sauf doublon avéré et documenté. Une marque n'est jamais canonicalisée vers tero.be | check-canonical |
| R6 | sameAs du domaine marque → https://tero.be/ et sa fiche GBP propre | check-schema |
| R7 | Le domaine marque partage le même robots.txt socle (§ 3.1) et le même socle llms.txt | diff de fichiers |
| R8 | Le 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.beetimmorun.bedéclarent uneOrganizationsansparentOrganizationet aucunhreflang— 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]
| Attribut | Valeur imposée | Précision |
|---|---|---|
hreflang | fr-BE, nl-BE, en, x-default | Correction de E9 : fr / nl sans région diluent vers FR/NL |
x-default | version FR | Règle § 14 + padel § 4.3 |
| Réciprocité | Chaque page liste toutes ses alternates, y compris elle-même | check-hreflang |
| Cible | Les alternates pointent des pages existantes (HTTP 200) au contenu réellement traduit | check-hreflang |
| Interdit | Doublons région/global (en + en-GB sur la même cible — mesuré sur teropadelclub.be) | Refus au build |
| Interdit | alternate sur /404 | Refus au build |
| Lux | Un 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érente | Chaque page se canonicalise elle-même |
| Absolue + slash final | https://tero.be/fr/lieux/tero-lodges-jalhay/ |
| Une seule par page | Jamais deux balises canonical |
| Aucun paramètre | Pas 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-langue | Jamais de canonical d'une langue vers une autre — c'est hreflang qui relie les langues |
| Environnements | Preview et staging en noindex + robots.txt fermé |
Défaut mesuré à ne pas reproduire [MESURE] :
https://teropadelclub.be/a pourcanonicalhttps://teropadelclub.be/en— la racine d'un site belge francophone se canonicalise vers l'anglais, sans slash final.check-canonicaldoit 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éclaration | Les 4 lignes Sitemap: dans robots.txt (§ 3.1) — jamais /sitemap.xml (404 mesuré) |
| Contenu | Uniquement des URL indexables, HTTP 200, canoniques |
| Interdits | noindex, redirections, 404, ?s=, pagination au-delà de la page 1, paramètres UTM |
lastmod | Date réelle de modification de contenu, jamais la date de build |
hreflang | Non requis dans le sitemap si les balises <link> sont correctes ; si émis, strictement cohérent |
| Témoignages unitaires | Retiré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ègle | Détail |
|---|---|
| Format | ; séparateur, en-tête en première ligne, 4 colonnes, 301 partout |
| Source des anciennes URL | sitemap_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 encodage | Conservés exactement (leçon padel § 4.7 : « toute correction de casse casse la redirection ») |
| Interdits | doublon 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) |
| Cible | 0 URL de l'ancien sitemap en 404 après bascule |
| Nginx | En 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 :
| Niveau | Source | Cible 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 → groupe | tout sous-domaine | https://tero.be/ + son pilier (R3) |
| Footer | toutes les pages | les 3 piliers, /lieux/, /contact/, /actualites/, mentions légales |
Règles chiffrées [REGLE]
- ≥ 3 liens internes entrants par page indexable (
check-maillage). - Ancres descriptives, jamais « cliquez ici » : « Tero Hospitality — 17 lieux », « Réserver un team building », « Tero Padel Club Waterloo ».
- Réciprocité obligatoire entre lieux d'une même région et entre marques d'un même pilier.
- Proximité imposée : les 17 lieux sont liés depuis
/lieux/et depuis leur pilier ; les marques Sport Events depuis/sport-events/. - Pages exemptées :
/404,/merci/,/nl/bedankt/,/en/thank-you/, légal. - 0 lien interne cassé ni vers une ressource introuvable.
- Aucun UTM sur un lien interne [REGLE absolue, reprise du padel § 4.6] : l'UTM est réservé aux liens externes de réservation.
---
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é | FR | NL | EN | Traduisible ? |
|---|---|---|---|---|
| Groupe | Tero · Tero Group | Tero · Tero Group | Tero · Tero Group | Non |
| Piliers | Tero Hospitality · Tero Leisure · Tero Sport Events | idem | idem | Non |
| Traiteur | Teroir | Teroir | Teroir | Non |
| Hébergement | Tero Lodges | Tero Lodges | Tero Lodges | Non |
| Lieux | Tero House17 · Tero River House · Tero Foresthouse Martué · Tero Eventhouse Waterloo · Château de Terblock · Hôtel La Malle Poste | idem | idem | Non |
| Marques conservées | Knokke Out Zoute · Bistro 17 · Bistro Pilko · Garisart Sports Club · Lime Justine Henin Sports Hub · River Woods · Nest Zwin Bistro · Jackfly School · Sportero · TeroGO | idem | idem | Non |
| Clubs | Tero Padel Club · Tero Padel Academy · Tero Studio | idem | idem | Non |
| Événements | immorun · batirun · bouwrun · buildandrun · impactrun · terotrail · Brussels Premier Padel · 12km Anderlecht | idem | idem | Non |
| Co-marque | IMMOBEL | IMMOBEL | IMMOBEL | Non |
| Catégorie | team building · traiteur · lieux · club de padel · bien-être | teambuilding · traiteur · locaties · padelclub · welzijn | team building · catering · venues · padel club · wellness | Oui |
| Fondateurs | Arthur Lhoist · Nicolas Lhoist | idem | idem | Non |
| Signature | live. share. reconnect. | idem | idem | Non — 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 :
| Sujet | FR (référence) | NL (néerlandais belge) | EN (anglais britannique) | Forme interdite |
|---|---|---|---|---|
| Activité collective | team building | teambuilding | team building | FR : « teambuilding » · NL : « team building » en deux mots |
| Lieu d'hébergement | Tero Lodges, puis « gîtes » | Tero Lodges, puis « verblijven » | Tero Lodges, puis « lodges » | « lodge » seul sans Tero |
| Restauration de marque | Teroir | Teroir | Teroir | « traiteur Tero » quand on parle de la marque |
| Positionnement traiteur | farm to fork | farm to fork | farm to fork | « farm-to-fork », « du champ à l'assiette » |
| Événement sur mesure | sur-mesure | op maat | tailor-made | FR : « custom » · EN : « bespoke » et « tailor-made » mélangés |
| Orthographe | événement | evenement | event | FR : « évènement » |
| Délai de réponse | « endéans les 48 h » | « binnen de 48 uur » | « within 48 hours » | « rapidement », « ASAP » |
| Impact | B Corp (démarche), impact, reconnexion | B Corp, impact, herverbinding | B Corp, impact, reconnection | « écolo », « green » comme slogan |
| Nature | se reconnecter à soi, aux autres, à la nature | herverbinden | reconnect | « déconnexion », « évasion » |
| Réservation | réserver | reserveren | book | NL : « boeken » pour un lieu, « reserveren » pour une activité |
| Lieux | lieux | locaties | venues | « salles » pour désigner le domaine entier |
| Séminaire | séminaire | seminarie | conference / seminar | NL : « seminair » |
| Gîte | gîte | vakantiehuis | self-catering lodge | — |
| Bien-être | bien-être | welzijn | wellness | — |
| Padel | padel | padel | padel | « paddle », « padel tennis » |
| Terrain | terrain | baan (copie) / terrein (nav, URL) | court | — |
| Mentions légales | mentions légales | juridische informatie | legal notice | — |
| Politique de confidentialité | confidentialité | privacy | privacy | — |
| TVA | TVA | btw | VAT | NL : « TVA » |
| Fil d'Ariane | fil d'Ariane | kruimelpad | breadcrumb | — |
Règles [REGLE]
- Le tableau est fermé : une forme nouvelle n'entre qu'avec l'accord du lead.
- Le lexique s'applique au texte, aux métas, aux alt, aux libellés d'interface, aux ancres, aux fichiers de contenu et aux données structurées.
- Défaut mesuré à corriger : le
llms.txtlive publieteambuildingcomme mot-clé, alors que § 5.2 interdit cette forme en texte FR neuf. La source de vérité doit être une seule : ce tableau. - Les libellés d'interface NL/EN vivent dans
src/data/ui.ts(leçon padel § 5.2) : aucun libellé en dur dans une page.
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.
| Dimension | Tero Hospitality | Tero Leisure | Tero Sport Events |
|---|---|---|---|
| Lecteur | Office manager, DRH, assistante de direction | Pratiquant, parent, habitant du quartier | Responsable RSE, DRH, coureur, entreprise partenaire |
| Bénéfice mis en avant | L'organisation est prise en charge de bout en bout | La progression et le plaisir de jouer | L'inscription collective et l'impact |
| Preuve | 17 lieux, capacité, traiteur Teroir, délai de réponse | Nombre de terrains, cours, horaires, tarifs | Distance, date, nombre d'inscrits, cause |
| Ton | Rassurant, professionnel, concret, vouvoiement | Chaleureux, dynamique | Fédérateur, factuel, chiffré |
| CTA | « Demandez une proposition » | « Réservez un terrain » | « Inscrivez votre équipe » |
| Longueur de page | 700-1200 mots | 400-800 mots | 400-700 mots |
| Chiffre obligatoire | Au moins 1 fait chiffré par section | Au moins 1 fait chiffré par section | Date + lieu + distance + inscription |
| Interdit spécifique | Superlatif 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]
- Le vouvoiement est la norme en FR sur les trois piliers [MESURE § 5.1-2].
- Le tutoiement est la norme en NL (leçon padel § 5.3 : « Reserveer je baan », jamais « u ») — c'est un écart volontaire entre langues, à documenter dans
ui.ts, pas un oubli. - L'EN adopte le « you » neutre ; interdiction de « our valued clients » et de tout registre corporate creux.
5.4 Longueurs et structures de titres
| Élément | Règle [REGLE] | Origine | |
|---|---|---|---|
title (balise) | 30 à 65 caractères, unique sur tout le groupe et toutes les langues | padel § 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 description | 120 à 165 caractères, unique, avec un fait chiffré et un appel à l'action | padel § 4.1 | |
H1 | un seul par page, contient le mot-clé principal, sans le suffixe de marque | padel § 4.1 | |
| Réponse citable | 40 à 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 | |
| FAQ | 4 à 8 questions par page clé | padel § 4.8 | |
| Page | hospitality 700-1200 mots · leisure / sport-events 400-800 · fiche lieu 300-600 · fiche événement 250-500 | § 5.3 | |
og:title / og:description | Présents sur toutes les pages ; og:image en 1200 × 630, dimensions déclarées = dimensions servies | padel § 4.1 + correction E11 | |
alt | Descriptif et factuel, jamais le nom de fichier, jamais « image de » | § 15 des règles | |
| Date visible | Sur tarifs, horaires, lieux et événements : « Mis à jour le JJ mois AAAA » | padel § 4.8 | |
| Accents | Obligatoires en FR — « Reserver » disqualifie la page | padel § 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).
| Page | FR | NL | EN |
|---|---|---|---|
| Accueil groupe | groupe hôtelier et événementiel Belgique | horeca- en evenementengroep België | hospitality and events group Belgium |
/a-propos/ | qui est Tero Group | wie is Tero Group | about Tero Group |
/hospitality/ | team building entreprise Belgique, séminaire d'entreprise, location de lieux | teambuilding bedrijf België, seminarie, locatieverhuur | corporate team building Belgium, corporate seminar, venue hire |
/leisure/ | club de padel Belgique, cours de tennis, bien-être | padelclub België, tennisles, welzijn | padel club Belgium, tennis lessons, wellness |
/sport-events/ | course à pied entreprise Belgique, événement sportif | loopwedstrijd bedrijf België, sportevenement | corporate running event Belgium, sports event |
/lieux/ | lieu de séminaire, salle de réunion, gîte de groupe | vergaderlocatie, seminariehuis, groepsverblijf | seminar venue, meeting room, group lodge |
/traiteur/ | traiteur événementiel, farm to fork | catering evenementen, farm to fork | event catering, farm to fork |
/restaurants/ | restaurant Knokke, bistrot Bruxelles | restaurant Knokke, bistro Brussel | restaurant Knokke, bistro Brussels |
/evenements/<slug>/ | « inscription » + nom de la course | « inschrijving » + naam | « registration » + event name |
/contact/ | contact Tero Group | contact Tero Group | contact 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]
| Indicateur | Cible |
|---|---|
| URL de l'ancien sitemap en 404 | 0 |
| 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 bornes | 100 % |
| Entité citée avec la bonne catégorie | ≥ 3 requêtes témoins |
llms.txt : URL citées valides | 100 % |
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 obligatoires | Relations | Source de vérité |
|---|---|---|---|---|
| Groupe | — (singleton) | name, alternateName, legalName?, foundingDate, founders[], headcount, addresses[], phones[], slogan, values[], languages[], sameAs[] | subOrganization[] | tero-group-facts.json |
| Pilier | slug | name, description, knowsAbout[], brands[] | parentOrganization | tero-group-facts.json |
| Lieu | slug | name, city, country, pillar, address, geo?, capacity?, usage[], images[], amenities[] | pilier, lieuxVoisins[] | tero-group-facts.json |
| Restaurant | slug | name, city, address, cuisine?, hours?, images[] | lieu, pilier | tero-group-facts.json |
| Marque | slug | name, domainCanonique, pillar, logo, description, partenaires[] | parentOrganization, pilier | tero-group-facts.json |
| Partenaire co-endossé | slug | name, url, logo, role (sponsor/funder/contributor/coorganisateur) | marque | contrat partenaire |
| Événement | slug | name, startDate, endDate?, location, registrationUrl, price?, distance? | marque, lieu, partenaires[] | utm.json + tero-group-facts.json |
| Service | slug | name, description, areaServed[], provider, ctaUrl | pilier | page de contenu |
| Page | slug | meta{title,description}, hero{eyebrow,title,lead,image,imageAlt,cta}, sections[], faq[] | — | pages/<slug>.json |
| Personne | slug | name, jobTitle, sameAs? | worksFor | tero-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]
- Mêmes noms de fichiers et mêmes slugs dans les 3 langues — indispensable au
hreflang. - Un champ absent côté FR reste absent côté NL/EN. Jamais de valeur ajoutée « pour compléter ».
- Quand le FR change, NL et EN changent dans le même commit.
- Les valeurs décrivant la même entité dans les 3 langues (
price,capacity,latitude,telephone) sont strictement identiques. Seul le texte est natif. - Une entité sans
geoniaddressn'émet pasLocalBusiness— elle émetPlaceouService(§ 2.4).
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]
- Tout
nullest un chantier, pas une valeur. Unnullinterdit l'émission du champ correspondant en JSON-LD et interdit l'affichage du fait sur le site. statusvautmesure/client/a-completer. Seulsmesureetclientsont publiables.- Les 17 lieux sont inventoriés nommément (§ 1.3) mais 13 d'entre eux n'ont ni adresse ni
geomesurés : ils sont donc non publiables enLocalBusinessaujourd'hui. C'est un chantier client majeur, pas un détail. - Le fichier est écrit à la main, relu, daté. Il n'est jamais généré par scraping : c'est la source de vérité, pas un miroir.
- Il est la seule source des valeurs factuelles pour le site, le JSON-LD,
llms.txtet les annuaires (§ 3.4 C3). - Le domaine canonique de chaque marque y est déclaré, avec la trace du domaine erroné et de sa redirection (E13), pour que les documents ne reproduisent plus
garisart.benibrusselspremierpadel.be.
6.3 Contrat UTM — content/sources/utm.json
| Règle [REGLE] | Détail |
|---|---|
| Source | content/sources/utm.json, recopié caractère pour caractère depuis les liens fournis par le client |
| Interdit | Ajouter, retirer, traduire, ré-encoder ou « corriger » un paramètre |
| Interdit absolu | Aucun UTM sur un lien interne |
| Libellés | Le libellé du lien doit décrire la destination réelle (jamais « Réserver » vers une page d'information) |
| Couverture | Chaque lieu, chaque événement, chaque marque a son lien, ou explicitement aucun |
| Contrôle | check-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] :
foundingDateest autorisé si et seulement sitero-group-facts.jsonporte"foundingDate": "2020"avecstatus: "mesure". Le contrôle lit la source, il ne fait pas confiance à la page.legalName,vatID,aggregateRatingetreviewrestent 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.
| Script | Ce 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-seo | title 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-hreflang | Non-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-canonical | Canonical absent, relatif, sans slash final, changeant de langue, ou multiple ; canonical inter-domaines non déclaré |
check-domaine | Domaine 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-llms | llms.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-robots | Disallow: / global ; Sitemap: pointant /sitemap.xml ; bot IA de la liste site-expectations absent ; bot de la liste bloquée autorisé |
check-nap | Toute divergence, caractère par caractère, entre tero-group-facts.json et les rendus (site, JSON-LD, llms*.txt) |
check-lexique | Forme 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-propres | Nom de marque traduit, translittéré, mal capitalisé, ou nom de lieu traduit (§ 5.1) |
check-placeholders | Présence de <À FOURNIR dans tout artefact publié |
check-endossement | Page de marque sans mention du pilier ou sans lien vers tero.be ; parentOrganization absent ; rôle de co-marque ambigu (§ 2.7 CO4) |
check-maillage | Page < 3 liens entrants ; ancre générique (« cliquez ici ») ; lien interne cassé ; UTM sur lien interne |
check-redirections | Doublon, boucle, cible absente, chaîne > 1 saut |
check-parite | Nombre 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
| # | Question | Ce qu'on ne peut pas faire sans réponse | Impact |
|---|---|---|---|
| Q1 | Combien 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 sources | Impossible d'émettre 13 LocalBusiness et 13 fiches GBP | Bloquant GEO local (C4) |
| Q2 | Les URL officielles des réseaux sociaux du groupe (Instagram, LinkedIn, Facebook, YouTube) | sameAs reste vide → consolidation d'entité impossible | Bloquant C1/C5 |
| Q3 | Bytespider : autorisé ou bloqué ? tero.be l'autorise [MESURE], la règle padel le bloque | Deux socles robots contradictoires dans le même groupe | Non bloquant |
| Q4 | Le 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 variante | Structurant (§ 4.3) |
| Q5 | La raison sociale (legalName) et le titre exact des fondateurs (co-fondateur, CEO, président ?) | legalName et Person.jobTitle non émis | Non bloquant |
| Q6 | Les 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èse | Structurant (§ 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) |
| Q8 | Les témoignages unitaires restent-ils indexables ? | Décide noindex, follow + retrait du sitemap (E12) | Non bloquant |
| Q9 | La 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 attendant | Non bloquant |
| Q10 | Un 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 option | Non bloquant |
| Q11 | Qui 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 CSS | Non bloquant |
| Q12 | Le mot-symbole tero minuscules est-il définitif comme logo de référence ? | Confirme la correction E1 avant réécriture de la charte | Bloquant charte |
| Q13 | Quel 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 |
| Q14 | Le 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 |
| Q15 | garisart.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 documents | Non 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.
- Corriger le mot-symbole en minuscules. Remplacer partout «
TERO= mot-symbole /Tero= rédaction » par «tero(minuscules) = mot-symbole /Tero= graphie rédactionnelle ». Fichiers concernés :tero-group-rules§ 4.1, § 4.2, § 5.1-3, § 17.6, § 18 ;DESIGN.md§ 8 et § 9-1 ;SKILL.mdsi la mention y figure. Ajouter au § 17 un piège : « écrireTEROen capitales dans le mot-symbole ». - Requalifier le défaut du monogramme. Dans
tero-group-rules§ 13.1-4 etAUDIT§ 3.1 : ne plus décrireTERO_MONOGRAM-1.png(1 272 × 1 861) comme « un anneau sans monogramme lisible », mais comme le glypheostylisé (anneau + barre), monogramme légitime — invalide commeOrganization.logo(portrait, sans mot-symbole). Conséquence : le monogramme reçoit une règle d'usage (favicon, app icon, avatar, filigrane) au lieu d'un interdit. - Remplacer la correction
Article→WebPage. Au § 13.1-1 : corriger la formulation en « supprimer le nœudArticlesurnuméraire (@id…#richSnippet) présent sur toutes les pages non éditoriales, en plus duWebPage». Ajouter la règle :Articleuniquement sur/actualites/<slug>/, avec auteur réel. - Ajouter la section « Identifiants d'entité » (
tero-group-rules§ 1.6, nouvelle) : un @id par entité, jamais de segment de langue,https://tero.be/#organizationunique,Organization.url=https://tero.be/. Corriger § 13.1 en conséquence : les @id/fr|en|nl/#organization/et/fr|en|nl/author/lumisys/sont le défaut mesuré n° 1, avant même l'auteur. - Corriger la ligne
Sitemap:du robots.txt :https://tero.be/sitemap_index.xml(+ un index par langue). Ajouter au § 13.3 et à la checklist § 18 : « leSitemap:déclaré répond 200 ». - Réécrire § 13.3 « Fichiers machine » :
llms.txtexiste déjà (auto-généré Rank Math, 76 779 caractères, 275 URL FR, 0 NL, 0 EN, sections « Theme Parts » / « Listing Items/Components ») → action = désactiver Rank Math, écrire un fichier statique ;llms-full.txt= 404 → à créer ; ajouter l'exigence « une URL citée = une URL qui répond 200 ». - Ajouter au design system une section « Logo — déclinaisons autorisées » (
DESIGN.md§ 4, et un bloclogodanstokens.css/design-tokens.json) : mot-symboleteroratio 2,5:1 (source_audit/logo-tero-2025.svg, viewBox0 0 100 40, 5 tracés), monogramme ratio 0,683, tailles minimales, zone de protection, interdiction du recadrage carré du mot-symbole. - Ajouter la table « Nœuds JSON-LD par type de page » (
tero-group-rules§ 13.6, nouvelle) — 14 lignes, reprise du § 2.5 de ce document. C'est le chaînon manquant qui a produit le défautArticle. - Ajouter la liste blanche
sameAset les interdits (tero-group-rules§ 13.7, nouvelle) : Google Business Profile BE/LU, LinkedIn, Instagram, Facebook, YouTube, Wikidata ; interdits :*.preview.infomaniak.website,secure.gravatar.com,/author/<compte-technique>/. - Réécrire § 14 « Langues » :
hreflang=fr-BE/nl-BE/en/x-default(et nonfr/nl),x-default→ FR, interdiction des doublons région/global, interdiction d'alternatesur/404,canonicalauto-référent avec slash final, interdiction d'uncanonicalchangeant de langue (défaut mesuré surteropadelclub.be). - Ajouter une section « Lexique NL / EN » (
tero-group-rules§ 5.4, nouvelle) : la table FR/NL/EN complète du § 5.2 de ce document (20 lignes). Le § 5.2 actuel ne couvre que le FR. - Ajouter une section « Ton par pilier » (
tero-group-rules§ 5.5, nouvelle) : 3 colonnes Hospitality / Leisure / Sport Events (lecteur, bénéfice, preuve, ton, CTA, longueur, interdits) + la règle du tutoiement NL et du « you » EN. - Ajouter une section « Longueurs et structures SEO » (
tero-group-rules§ 13.8, nouvelle) :title30-65,description120-165, réponse citable 40-60 mots, 1 H1, 4-8 FAQ,og:image1200 × 630, date visible, accents obligatoires. - Ajouter la carte de mots-clés (
tero-group-rules§ 13.9, nouvelle) : 10 lignes × 3 langues + les 6 requêtes GEO témoins + le KPI 90 jours. - Ajouter le contrat de contenu (
tero-group-rules§ 12.2, nouvelle) : arborescencesrc/content/<lang>/, schémas d'entités (groupe, pilier, lieu, restaurant, marque, partenaire, événement, service, page, personne), liste fermée des types de blocs, règle « mêmes noms de fichiers dans les 3 langues », règle « champ absent en FR = absent ailleurs ». - Créer et câbler les sources de vérité :
content/sources/tero-group-facts.json(schéma du § 6.2, avecstatusetnullexplicites, et le domaine canonique de chaque marque),content/sources/utm.json,content/sources/site-expectations.json(attentes chiffrées du § 6.4). Aujourd'hui ces trois fichiers sont cités par § 1.5 mais n'existent pas. - Ajouter la section « Contrôles exécutables » (
tero-group-rules§ 16.4, nouvelle) : les 15 scriptscheck-*du § 6.5 et la règle « build puis verify, sortie de commande à l'appui ». Remplacer les lignes génériques<commande de build>/<commande de vérification>de l'AGENTS.mddu plugin par des commandes réelles. - Ajouter le plan de redirections 301 au § 13.5 : format
ancienne_url;nouvelle_url;code;motif, source d'anciennes URL =sitemap_index.xmlfigé le jour de la bascule, casse conservée, 0 doublon / 0 boucle / 0 cible absente, nginx en production. - Ajouter la règle de maillage chiffrée au § 13.5 : ≥ 3 liens internes entrants par page, ancres descriptives, réciprocité lieux ↔ lieux et marques ↔ marques, aucun UTM sur un lien interne, pages exemptées (
/404, remerciements, légal). - Compléter la checklist § 18 de 6 lignes : « le mot-symbole est en minuscules
tero» ; « un seul @idhttps://tero.be/#organization, aucun @id porté par la langue » ; « leSitemap:déclaré répond 200 etllms-full.txtexiste » ; «parentOrganizationprésent sur chaque page de marque » ; « le domaine cité est le domaine canonique » ; « aucun<À FOURNIRdans l'artefact publié ». - Ajouter au § 20 les questions Q1 à Q15 du § 7 de ce document, en particulier Q1 (nombre et adresses des 17 lieux), Q2 (URL sociales), Q6 (piliers = entités juridiques ou catégories ?), Q12 (mot-symbole minuscules définitif) et Q13 (rôle exact d'IMMOBEL sur immorun).
- Corriger les sous-marques dans les données structurées (nouvelle règle § 1.4-6) : chaque domaine du groupe émet
parentOrganization: https://tero.be/#organizationet un lien visible verstero.be. Mesuré : 0 occurrence deparentOrganizationsur les 4 domaines testés. - Trancher
Bytespiderdans la liste robots unique du groupe : tero.be l'autorise (mesuré),_ref/teropadelclub§ 4.5 le bloque. Aligner les deux documents sur une seule décision client (Q3). - Ajouter une règle de sortie de données structurées pour l'
Organization:logoen PNG (repli raster) etimageen SVG ; interdiction d'unlogoportrait ou recadré ; dimensions déclarées = dimensions servies. - Corriger le piège n° 9 du § 17 : « Du JSON-LD faux :
Articlesurnuméraire en plus duWebPage, auteurlumisys,sameAsde prévisualisation, @id d'organisation porté par la langue → trois organisations distinctes déclarées,Organization.url=/frsur les pages EN et NL ». - Mettre
/fr/testimonials/<slug>/ennoindex, followet retirer letestimonials-sitemap.xmldu sitemap index, ou enrichir chaque témoignage (≥ 150 mots, nom, société, lieu, date) pour justifier son indexation. Ajouter la règle au § 13.5. - Interdire le vocabulaire interne du CMS dans un artefact public (nouvelle règle § 16.5) : aucun identifiant de taxonomie, de
post_typeou de composant Elementor (« Theme Parts », « Listing Items/Components », « jet-theme-core ») ne doit apparaître dansllms.txt, un sitemap, une URL ou une donnée structurée. - Corriger la table des domaines du groupe (§ 1.3 de
tero-group-ruleset § 2.2 deAUDIT) : remplacergarisart.bepargarisartsportsclub.beetbrusselspremierpadel.beparwww.brusselspremierpadel.be, et ajouter la règle « un domaine canonique par marque » (E13). - Ajouter la section « Marques co-endossées » (
tero-group-rules§ 1.7, nouvelle) : les 8 règles CO1-CO8 du § 2.7 de ce document, le tableau des rôles (propriétaire / organisateur / sponsor / contributeur) et l'interdiction de publier le NAP d'un partenaire sans autorisation écrite. Cas d'application mesuré : immorun + IMMOBEL. - Ajouter la règle « rôle de partenaire explicite » au § 13.6 (nœuds par page) : sur une page co-endossée, le rôle de la co-marque est déclaré par
sponsor/funder/contributor/ deuxorganizer— jamais unpartnergénérique, jamais un second propriétaire de site.