Aller au contenu

Données structurées publiques

src/lib/server/public-structured-data.ts projette explicitement les données publiques déjà chargées dans les loads. Aucune requête supplémentaire ni accès direct du navigateur au backend n’est ajouté. Le layout racine rend un seul script JSON-LD issu de ces projections.

  • LodgingBusiness décrit Le Clos des Eucalyptus avec son URL, logo et les coordonnées de la configuration publique, affichées dans le pied de page. Les comptes sociaux acceptés sont les mêmes comptes publics configurés et affichés, limités aux plateformes reconnues.
  • Apartment décrit uniquement la fiche consultée : nom, URL, médias publics reconnus, surface, pièces et capacité maximale exposées dans la page. L’occupation tarifaire recommandée et les tarifs ne sont pas transformés en offre ou disponibilité.
  • Article décrit uniquement une actualité publiée sélectionnée sur sa page autonome : titre, introduction, date de publication valide et image publique reconnue. L’auteur n’est pas ajouté car son nom n’est pas affiché dans le contenu actuel ; aucune date de modification n’est déduite. Les guides locaux sont des pages éditoriales, sans être arbitrairement qualifiés d’articles de presse.

Le fil d’Ariane visible ayant été retiré à la demande du propriétaire, aucun BreadcrumbList n’est désormais publié.

Les références d’entités sont stables sur https://www.leclosdeseucalyptus.com : /#residence, /apartments/<slug>#apartment et /news?post=<slug>#article. Les URL de consultation sont localisées ; les identifiants d’établissement et de logement ne changent pas entre langues. Les hôtes de requête, de preview ou de backend ne construisent pas ces identités.

Les images inconnues, externes ou privées sont omises plutôt que remplacées par une photographie générique. Les références reconnues passent par le relais public /api/media/files/ et leurs paramètres et fragments sont supprimés. Ni identifiant interne de logement, ni token, prix, avis, note, disponibilité, propriétaire ou champ d’audit ne sont copiés dans les graphes. L’adresse reste le texte public fourni ; aucun découpage en rue, code postal ou pays n’est deviné. Schema.org accepte Text ou PostalAddress pour cette propriété de LodgingBusiness.

Le rendu JSON-LD est supprimé sur les pages privées, erreurs, variantes noindex, variantes dont la canonical ne correspond pas à la projection et aperçu d’article en modale du catalogue. La navigation vers une page autonome rétablit sa projection. La preview reste non indexable selon la politique existante, même si son HTML permet de tester les données structurées.

serializeJsonLd échappe <, >, & et les séparateurs Unicode U+2028/U+2029. Un texte CMS contenant </script> reste une valeur JSON et ne peut fermer le script. Le seul point @html reçoit l’enveloppe fixe du script et ce JSON échappé ; l’exception lint est limitée à cette ligne. Le test d’injection vérifie que le JSON décodé conserve le texte original sans balise littérale.

Les tests unitaires vérifient les projections, les URL, l’omission des données privées et des dates invalides, les identifiants stables et l’échappement. L’E2E e2e/public-structured-data.test.ts vérifie le HTML serveur et l’absence de fil visible dans les cinq langues, ainsi que les erreurs et la transition catalogue/modale/page autonome.

Fenêtre de terminal
# Après le build et les E2E sur une base/backend isolés :
curl --fail https://schema.org/version/latest/schemaorg-current-https.jsonld \
-o /tmp/schemaorg-vocabulary.jsonld
node scripts/validate-public-jsonld.mjs /tmp/schemaorg-vocabulary.jsonld \
/tmp/harmony-223-graphs/*.json

Ce contrôle indépendant utilise les types, héritages, domaines et plages de valeurs du vocabulaire officiel téléchargé. Il complète les tests du DOM et ne constitue pas une certification Google. Un extrait représentatif peut aussi être collé dans le validateur Schema.org. Le Rich Results Test teste l’éligibilité des types pris en charge par Google ; les recommandations facultatives absentes ne doivent pas être remplies avec des informations inventées. Sur une preview protégée, utiliser le mode code.

Validation initiale de #223 du 13 octobre 2026, avant le retrait du fil d’Ariane, sur la base seedée isolée et non sur le site déployé : 25 graphes / 145 nœuds passent le contrôle du vocabulaire officiel ; le validateur Schema.org signale 0 erreur et 0 avertissement sur l’extrait représentatif établissement/fil/article. Le Rich Results Test Google détecte 4 éléments valides (Article, fil d’Ariane, établissement local et organisation), sans erreur critique. Il signale notamment l’auteur et l’image facultatifs manquants pour cet article de test : l’auteur n’est pas affiché et son image externe n’est pas reprise par la projection. Ces recommandations ne justifient pas d’inventer des données. Les coordonnées seedées de cet extrait servent seulement au test ; la projection utilise les coordonnées réellement configurées et affichées dans l’environnement consulté.

Ces modèles décrivent l’établissement et ses logements sans prétendre activer le programme Google VacationRental. Ce programme demande notamment une intégration avec Google et l’accès à Hotel Center, avec ses propres données et conditions d’éligibilité. Un script JSON-LD seul n’est pas une inscription à ce programme. Cette PR ne publie donc pas de VacationRental, Product, FAQPage, note ou avis pour promettre un résultat enrichi. Même un balisage valide ne garantit pas l’affichage d’un résultat enrichi.

Sources officielles consultées le 13 octobre 2026 : LodgingBusiness, Apartment, Article, BreadcrumbList et VacationRental.