HowTo: Publish Valiterm data
This guide shows the recommended visible approach first. An optional Hidden Valiterm channel is provided as an advanced solution for special cases.
1) Visible LD+JSON (recommended)
Put standard application/valiterm+json on your page. Copy, adapt, paste.
<script type="application/valiterm+json">
{
"@context": ["https://valiterm.org", "https://schema.org"],
"@type": ["Organization","LocalBusiness"],
"@id": "https://example.com/#org",
"name": "Company Name",
"url": "https://example.com",
"telephone": "+46-00-000000",
"email": "[email protected]",
"publicAccess": true,
"address": {
"@type":"PostalAddress",
"streetAddress":"Street 1",
"postalCode":"123 45",
"addressLocality":"City",
"addressCountry":"SE"
},
"openingHoursSpecification": [{
"@type":"OpeningHoursSpecification",
"dayOfWeek":["Monday","Tuesday","Wednesday","Thursday","Friday"],
"opens":"07:00",
"closes":"16:00"
}],
"areaServed": ["SE"],
"serviceArea": ["SE-GBG"]
}</script>
Why visible? Best crawlability, standard tools (Google Rich Results, validators) understand it, and it’s transparent for auditors and users.
Advanced: Hidden Valiterm (requires key + beacon)
Use only if visible JSON is blocked by a CMS, injected ads, or third-party policies. Hidden Valiterm keeps content out of the render tree but still machine-readable for agents that support the channel.
How it works
- You publish a beacon and a published key in <head>.
- Your Valiterm JSON is embedded in an HTML comment with a known prefix. Supporting agents verify the key via the beacon and parse the payload.
Head markers (required)
<meta name="valiterm:beacon" content="YOUR_BEACON_ID">
<meta name="valiterm:key" content="YOUR_PUBLIC_KEY">
Hidden payload (on the page)
<!-- ai:valiterm format=application/valiterm+json
{
"@context": "https://valiterm.org",
"@type": "BusinessProfile",
"@id": "https://example.com/#valiterm",
"policy": { "visibility": "hidden", "beacon": "YOUR_BEACON_ID", "keyRef": "YOUR_PUBLIC_KEY" },
"openingHours": [{ "dayOfWeek":["Mon","Tue","Wed","Thu","Fri"], "opens":"07:00", "closes":"16:00" }],
"serviceArea": ["SE-GBG"],
"areaServed": ["SE"]
}
-->
Why/when?
- When visible scripts are stripped or break layout.
- To keep the DOM lean while remaining AI-readable.
- To avoid non-technical gatekeepers that block structured data channels not required by law or policy in your region.
Important
- Use unique keys per site; rotate regularly.
- Supporting agents are expected to verify the beacon/key before trust.
- Don’t use hidden channels to misrepresent content; legal and platform policies still apply.