Generative Engine Optimisation · Visibility AuditLive · on-demand

Where AI answers send your prospects.

When a logistics director or CFO asks ChatGPT, Claude, Gemini or Perplexity who the leading developers are, you should appear, accurately and with sources. This is a working audit of the four surfaces that decide whether you do, run against a representative profile from your brief.

Audit subjectContinental Yards REIT
Euronext BrusselsCYR · BE0000CYR123
ClassificationBE-REIT · RREC / SIR / GVV
Sample entity
BENLFRRODEITES
7 markets · BE head office · representative data, swap in your real entity
11
Surfaces missing
9
Schema nodes generated
5
AI engines in scope
4
Workstreams
00

The discovery question

The query your buyers and investors increasingly run before they run a search.
Who are the leading logistics real estate developers and investors in Belgium, the Netherlands, and Romania?
Asked by: logistics directors · supply-chain operators · institutional investors · listed-equity analysts
01

The answer, with and without your entity scaffolding

Two real calls to the same free model. The only difference is whether your structured record exists.
Baseline · no entity data
What an AI returns today, given only the question.
Scaffolded · structured record injected
The same model, given your entity's structured record as retrieval context.
Two real calls to the same free model, one with your record, one without.
How to read thisThe scaffolded panel injects your entity's structured record (Wikidata + Wikipedia + schema.org facts) as retrieval context, then asks the same model the same question. It demonstrates the mechanism the four workstreams build: when your entity exists as machine-readable, sourced data, an AI answer can name and cite it. It is not a claim that today's live web already contains this. That is the work.
02

Entity establishment gap map

Every surface an AI system reads before it decides to name you. Tap a row for what AI does with it.
01Wikipedia
Encyclopaedic, third-party-sourced articles. The single most-cited source across ChatGPT, Gemini and Perplexity. EN first, then FR + NL, then further languages.
  • English articlemissing
    No EN article. Notability is established via annual reports, Euronext filings, FT/De Tijd/L'Echo coverage.
    AI uses this for: Primary retrieval + summary source for entity questions.
  • French (Wikipédia FR)missing
    Needed for French-language queries and the FR office footprint.
    AI uses this for: Language-specific retrieval for FR-speaking prospects.
  • Dutch (Wikipedia NL)missing
    Needed for NL/BE queries; the core market.
    AI uses this for: Language-specific retrieval for NL-speaking prospects.
  • Verifiable third-party citationspartial
    Press releases exist; independent secondary coverage must be marshalled to meet WP:NCORP.
    AI uses this for: Citations are what let an AI repeat a fact as sourced, not promotional.
02Wikidata entity
A structured Q-item that turns the company name into a global machine ID. This is what lets Gemini and Google surfaces recognise the entity and disambiguate it from similarly-named firms.
  • Q-item existsmissing
    No Wikidata item. Create one and populate the listed-company property set.
    AI uses this for: The entity's canonical machine identity, referenced by sameAs everywhere else.
  • instance of (P31) + industry (P452)missing
    P31 to public company / REIT; P452 to logistics real estate.
    AI uses this for: Tells engines what kind of thing this is.
  • stock exchange (P414) + ticker (P249) + ISIN (P946)missing
    P414 to Euronext Brussels (Q1146518), P249 ticker qualifier, P946 ISIN, P1278 LEI.
    AI uses this for: Resolves the listed-equity identity investors and analysts query.
  • HQ (P159) + country (P17) + website (P856)missing
    Headquarters, country, official site, legal form (P1454), inception (P571).
    AI uses this for: Grounds geography and authority for 'in Belgium / Netherlands / Romania' questions.
03Schema.org markup
Organization + RealEstateAgent + one LocalBusiness per country office, embedded on the site. Generated and validated live in section 03 below.
  • Organization nodepartial
    A thin Organization block may exist; needs identifiers, sameAs, areaServed, and the in-graph references.
    AI uses this for: The site's self-declared identity, cross-linked to Wikidata via sameAs.
  • RealEstateAgent nodemissing
    Operating-business type the brief asks for; links to the parent Organization.
    AI uses this for: Classifies the business so engines map it to real-estate queries.
  • LocalBusiness per country (x7)missing
    One node per office: BE, NL, FR, RO, DE, IT, ES, each with address + geo.
    AI uses this for: Feeds per-country presence that Google AI Overviews reads.
04Google Business profiles
One verified, complete profile per country office. These feed Google AI Overviews directly and are the fastest-moving surface to fix.
  • Profiles claimed + verified (x7)missing
    Audit, claim and verify each country office; deduplicate any auto-generated listings.
    AI uses this for: Verified profiles are a direct input to Google AI Overviews and Maps.
  • Categories + attributes completemissing
    Correct primary category (commercial real estate / property developer), hours, languages, site link.
    AI uses this for: Category + attributes decide which local queries surface the office.
03

Schema.org, generated and validated live

Organization + RealEstateAgent + one LocalBusiness per country. 9 nodes, validated against the real validator.
entity.jsonld · generated live
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Organization",
"@id": "#org",
"name": "Continental Yards REIT",
"legalName": "Continental Yards SA",
"url": "https://www.continental-yards.example",
"logo": "https://www.continental-yards.example/logo.png",
"description": "Belgian-listed logistics real-estate developer and investor operating a portfolio of modern warehouses across seven European markets.",
"foundingDate": "2008",
"numberOfEmployees": {
"@type": "QuantitativeValue",
"value": 110
},
"identifier": [
{
"@type": "PropertyValue",
"propertyID": "Euronext Brussels ticker",
"value": "CYR"
},
{
"@type": "PropertyValue",
"propertyID": "ISIN",
"value": "BE0000CYR123"
},
{
"@type": "PropertyValue",
"propertyID": "LEI",
"value": "5493000SAMPLE0CYR000"
}
],
"keywords": "logistics real estate, warehouse development, supply-chain real estate, regulated real-estate company, REIT",
"sameAs": [
"https://en.wikipedia.org/wiki/Continental_Yards_REIT",
"https://www.wikidata.org/wiki/Q000SAMPLE",
"https://www.linkedin.com/company/continental-yards-reit"
],
"address": {
"@type": "PostalAddress",
"streetAddress": "Avenue de Tervueren 1",
"addressLocality": "Brussels",
"postalCode": "1040",
"addressCountry": "BE"
},
"areaServed": [
{
"@type": "Country",
"name": "Belgium"
},
{
"@type": "Country",
"name": "Netherlands"
},
{
"@type": "Country",
"name": "France"
},
{
"@type": "Country",
"name": "Romania"
},
{
"@type": "Country",
"name": "Germany"
},
{
"@type": "Country",
"name": "Italy"
},
{
"@type": "Country",
"name": "Spain"
}
],
"subOrganization": [
{
"@id": "#realestate"
},
{
"@id": "#office-be"
},
{
"@id": "#office-nl"
},
{
"@id": "#office-fr"
},
{
"@id": "#office-ro"
},
{
"@id": "#office-de"
},
{
"@id": "#office-it"
},
{
"@id": "#office-es"
}
]
},
{
"@type": "RealEstateAgent",
"@id": "#realestate",
"name": "Continental Yards REIT (Logistics Real Estate)",
"parentOrganization": {
"@id": "#org"
},
"url": "https://www.continental-yards.example",
"description": "Develops, leases and manages logistics and warehouse assets for supply-chain operators across Europe.",
"areaServed": [
{
"@type": "Country",
"name": "Belgium"
},
{
"@type": "Country",
"name": "Netherlands"
},
{
"@type": "Country",
"name": "France"
},
{
"@type": "Country",
"name": "Romania"
},
{
"@type": "Country",
"name": "Germany"
},
{
"@type": "Country",
"name": "Italy"
},
{
"@type": "Country",
"name": "Spain"
}
],
"knowsLanguage": [
"en",
"nl",
"fr",
"de",
"it",
"es",
"ro"
]
},
{
"@type": "LocalBusiness",
"@id": "#office-be",
"name": "Continental Yards REIT (Belgium office)",
"parentOrganization": {
"@id": "#org"
},
"url": "https://www.continental-yards.example/be",
"address": {
"@type": "PostalAddress",
"addressLocality": "Brussels",
"addressCountry": "BE"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 50.8503,
"longitude": 4.3517
},
"areaServed": {
"@type": "Country",
"name": "Belgium"
}
},
{
"@type": "LocalBusiness",
"@id": "#office-nl",
"name": "Continental Yards REIT (Netherlands office)",
"parentOrganization": {
"@id": "#org"
},
"url": "https://www.continental-yards.example/nl",
"address": {
"@type": "PostalAddress",
"addressLocality": "Rotterdam",
"addressCountry": "NL"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 51.9244,
"longitude": 4.4777
},
"areaServed": {
"@type": "Country",
"name": "Netherlands"
}
},
{
"@type": "LocalBusiness",
"@id": "#office-fr",
"name": "Continental Yards REIT (France office)",
"parentOrganization": {
"@id": "#org"
},
"url": "https://www.continental-yards.example/fr",
"address": {
"@type": "PostalAddress",
"addressLocality": "Lille",
"addressCountry": "FR"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 50.6292,
"longitude": 3.0573
},
"areaServed": {
"@type": "Country",
"name": "France"
}
},
{
"@type": "LocalBusiness",
"@id": "#office-ro",
"name": "Continental Yards REIT (Romania office)",
"parentOrganization": {
"@id": "#org"
},
"url": "https://www.continental-yards.example/ro",
"address": {
"@type": "PostalAddress",
"addressLocality": "Bucharest",
"addressCountry": "RO"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 44.4268,
"longitude": 26.1025
},
"areaServed": {
"@type": "Country",
"name": "Romania"
}
},
{
"@type": "LocalBusiness",
"@id": "#office-de",
"name": "Continental Yards REIT (Germany office)",
"parentOrganization": {
"@id": "#org"
},
"url": "https://www.continental-yards.example/de",
"address": {
"@type": "PostalAddress",
"addressLocality": "Duisburg",
"addressCountry": "DE"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 51.4344,
"longitude": 6.7623
},
"areaServed": {
"@type": "Country",
"name": "Germany"
}
},
{
"@type": "LocalBusiness",
"@id": "#office-it",
"name": "Continental Yards REIT (Italy office)",
"parentOrganization": {
"@id": "#org"
},
"url": "https://www.continental-yards.example/it",
"address": {
"@type": "PostalAddress",
"addressLocality": "Milan",
"addressCountry": "IT"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 45.4642,
"longitude": 9.19
},
"areaServed": {
"@type": "Country",
"name": "Italy"
}
},
{
"@type": "LocalBusiness",
"@id": "#office-es",
"name": "Continental Yards REIT (Spain office)",
"parentOrganization": {
"@id": "#org"
},
"url": "https://www.continental-yards.example/es",
"address": {
"@type": "PostalAddress",
"addressLocality": "Madrid",
"addressCountry": "ES"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 40.4168,
"longitude": -3.7038
},
"areaServed": {
"@type": "Country",
"name": "Spain"
}
}
]
}
Validates cleanstructural pre-check
0
Errors
0
Warnings
9
Nodes
  • No invalid Organization properties
    tickerSymbol, industry, dateAccessed all correctly avoided
  • Market identifiers as PropertyValue
    3 identifiers (ticker, ISIN, LEI) typed as PropertyValue
  • All @id references resolve in-graph
    9 references, all resolve
  • Organization has name + url
    name, url present
  • Each per-country office has a postal address
    7 LocalBusiness nodes, each with locality + country
  • Entity links (Wikipedia + Wikidata) in sameAs
    Wikipedia + Wikidata + LinkedIn linked
  • identifierEuronext ticker, ISIN and LEI as PropertyValue. `tickerSymbol` is not a schema.org property and fails the validator.
  • keywordsSector via keywords. `industry` is not a schema.org Organization property.
  • subOrganizationReferences resolve to @ids defined in this same graph, so they validate as Organization, not bare Thing.
  • RealEstateAgentRealEstateAgent is a LocalBusiness subtype; parentOrganization links it back to the listed entity.
  • sameAsWikipedia + Wikidata + LinkedIn are the entity-linking targets AI systems reconcile against.
04

The four levers, and the honest limits

Three of the four major engines publish no ranking recipe. These are the controllable levers.
Access
Per-bot robots.txt so citation crawlers (OAI-SearchBot, Claude-SearchBot, PerplexityBot, bingbot) are allowed even where training crawlers are gated.
Legibility
Clean JSON-LD + heading hierarchy so a crawler can parse the entity without guessing.
Freshness
dateModified + IndexNow (reaches Bing/Copilot) so the most current facts are the ones cited.
Authority
Organization + Wikidata + Wikipedia + cited third-party sources, the entity graph engines reconcile against.
Allow the citation crawlers even where training crawlers are gated: OAI-SearchBot Claude-SearchBot PerplexityBot bingbot. These build the index AI engines cite from at answer time.
On the Wikipedia languages, said plainly

I write English natively and run the Wikidata, schema.org and Google Business work end to end. For the French and Dutch Wikipedia articles I draft from the same sourced facts and pair with a native reviewer before anything goes live, so the text reads encyclopaedically and survives the editors who patrol corporate pages. I would not claim native FR or NL, and the plan does not depend on me being it.

01
Wikipedia
3 of 4 surfaces to build
02
Wikidata entity
4 of 4 surfaces to build
03
Schema.org markup
2 of 3 surfaces to build
04
Google Business profiles
2 of 2 surfaces to build