{"slug": "how-to-architect-json-ld-entity-graphs-for-ai-search-llm-citation-geo", "title": "How to Architect JSON-LD Entity Graphs for AI Search & LLM Citation (GEO)", "summary": "Farrukh Abdullah Advisory published a three-layer JSON-LD entity-graph approach for making brands machine-verifiable to AI answer engines such as Google AI Overviews, ChatGPT Search and Perplexity. The method assigns each entity a persistent @id on a canonical \"Entity Home\" page, corroborates identity through sameAs links to Wikidata, ORCID, GitHub and B2B directories, and maps services and local entities with attribute-rich markup, with credentials and published research attached via hasCredential and CreativeWork nodes rather than sameAs.", "body_md": "Entity SEO for AI search runs on 3 layers: a canonical Entity Home, cross-platform `sameAs` corroboration, and attribute-rich service and local entity mapping. This post shows the JSON-LD behind each layer, as we apply it at Farrukh Abdullah Advisory, where [AI SEO Consulting & Visibility Measurement](https://farrukh.top/services/ai-seo-consulting) restructures websites into verifiable knowledge graphs.\n\nEntity SEO differs from keyword SEO in its unit of optimization: **the entity (an organization, person, service, or place)** rather than the keyword string. Google AI Overviews, ChatGPT Search, and Perplexity each compose answers from retrieved sources, so a brand with no unambiguous entity markup gives those systems less to verify. JSON-LD is a disambiguation signal, not a ranking switch.\n\nLayer 1 turns that principle into markup by giving each entity one permanent address.\n\nAn Entity Home is **the single page on your domain that holds the canonical record of one entity**, identified in JSON-LD by a persistent `@id`. Assign each entity one `@id` as a URI fragment, such as `https://yourdomain.com/#organization` and `https://yourdomain.com/#person`, and reference that `@id` from every service page and article instead of redeclaring the entity.\n\nMarkup without an `@id` creates an anonymous node, so two pages that each declare an Organization produce two unconnected Organizations instead of one shared one. A service page that references the Entity Home's `@id` joins the existing node:\n\n```\njson\n{\n  \"@context\": \"[https://schema.org](https://schema.org)\",\n  \"@type\": \"Service\",\n  \"name\": \"Local SEO for HVAC Companies\",\n  \"provider\": { \"@id\": \"[https://farrukh.top/#organization](https://farrukh.top/#organization)\" }\n}\n\nOnce each entity has an @id, layer 2 connects that node to Wikidata, ORCID, GitHub, and Crunchbase.\n\nLayer 2: What belongs in a sameAs array?\nFour types of identity nodes belong in a sameAs array: structured knowledge bases, researcher registries, developer hubs, and B2B verification directories. Each entry is an independent page describing the same entity, so each one corroborates your Entity Home.\n\nStructured knowledge bases, such as Wikidata item Q141886354\n\nResearcher registries, such as ORCID profile 0009-0001-9570-3897\n\nDeveloper hubs, such as the GitHub profile yes155\n\nB2B verification directories, such as GoodFirms, Clutch, and Crunchbase\n\nEach node belongs on the entity it describes: a Crunchbase person profile belongs on the Person, and a GoodFirms or Clutch company profile belongs on the Organization.\n\nTwo further node types attach through other properties. Published research, such as the Zenodo whitepaper (DOI 10.5281/zenodo.23701870), belongs on a CreativeWork node whose author is your Person @id. Industry credentials from IBM, Moz, and BrightLocal belong under hasCredential. Those pages describe your work and qualifications rather than your identity, so sameAs is the wrong property for them.\n\nThe full graph looks like this:\n\nJSON\n{\n  \"@context\": \"[https://schema.org](https://schema.org)\",\n  \"@graph\": [\n    {\n      \"@type\": \"Organization\",\n      \"@id\": \"[https://farrukh.top/#organization](https://farrukh.top/#organization)\",\n      \"name\": \"Farrukh Abdullah Advisory\",\n      \"url\": \"[https://farrukh.top/](https://farrukh.top/)\",\n      \"sameAs\": [\n        \"[https://www.goodfirms.co/company/farrukh-abdullah-geo-semantic-seo-consultant](https://www.goodfirms.co/company/farrukh-abdullah-geo-semantic-seo-consultant)\",\n        \"[https://clutch.co/pk/affiliate-marketing?page=2](https://clutch.co/pk/affiliate-marketing?page=2)\"\n      ]\n    },\n    {\n      \"@type\": \"Person\",\n      \"@id\": \"[https://farrukh.top/#person](https://farrukh.top/#person)\",\n      \"name\": \"Farrukh Abdullah\",\n      \"jobTitle\": \"Semantic SEO & GEO Consultant\",\n      \"worksFor\": { \"@id\": \"[https://farrukh.top/#organization](https://farrukh.top/#organization)\" },\n      \"sameAs\": [\n        \"[https://orcid.org/0009-0001-9570-3897](https://orcid.org/0009-0001-9570-3897)\",\n        \"[https://www.wikidata.org/wiki/Q141886354](https://www.wikidata.org/wiki/Q141886354)\",\n        \"[https://github.com/yes155](https://github.com/yes155)\",\n        \"[https://www.crunchbase.com/person/farrukh-abdullah](https://www.crunchbase.com/person/farrukh-abdullah)\"\n      ]\n    },\n    {\n      \"@type\": \"CreativeWork\",\n      \"name\": \"Entity-First Generative Engine Optimization (GEO): Structuring Machine-Readable Knowledge Graphs for AI Search Citation\",\n      \"url\": \"[https://zenodo.org/records/23701870](https://zenodo.org/records/23701870)\",\n      \"identifier\": \"[https://doi.org/10.5281/zenodo.23701870](https://doi.org/10.5281/zenodo.23701870)\",\n      \"author\": { \"@id\": \"[https://farrukh.top/#person](https://farrukh.top/#person)\" }\n    }\n  ]\n}\nWhich attributes must match across every node?\nThree attributes must match character for character on every node: the entity name, the job title, and the third-person description. Entity reconciliation compares strings first, so \"SEO Consultant\" on one profile and \"SEO Specialist\" on another introduces an ambiguity that a single canonical string prevents. Copy each value from the Entity Home into every external profile, and re-check them whenever one changes.\n\nWith identity established, layer 3 attaches areaServed and outcome metrics to those entities.\n\nLayer 3: How do you map service and local entities?\nTo map service and local entities, declare areaServed with an explicit City or GeoShape in markup, and publish at least one verifiable outcome metric on the same page. The pattern holds for every local service vertical, and Local Entity SEO: Accurate Business Information and Useful Service Content covers the general case.\n\nThe following example declares one named city and a 50 km radius for a hypothetical HVAC business:\n\nJSON\n{\n  \"@context\": \"[https://schema.org](https://schema.org)\",\n  \"@type\": \"HVACBusiness\",\n  \"@id\": \"[https://example-hvac.com/#organization](https://example-hvac.com/#organization)\",\n  \"name\": \"Example HVAC Co.\",\n  \"areaServed\": [\n    { \"@type\": \"City\", \"name\": \"Austin\" },\n    {\n      \"@type\": \"GeoCircle\",\n      \"geoMidpoint\": { \"@type\": \"GeoCoordinates\", \"latitude\": 30.2672, \"longitude\": -97.7431 },\n      \"geoRadius\": 50000\n    }\n  ]\n}\nareaServed accepts City, GeoShape, and plain text; a typed City or GeoCircle states the service area exactly, while plain text leaves it open to interpretation.\n\nThe case studies below show what those attributes produced.\n\nDoes entity clustering produce measurable results?\nEntity clustering produced measurable results in two documented case studies: +112% organic lead growth in 6 months and 1,200+ attributed inbound calls in 12 months.\n\nThe +112% organic lead growth came from FinTech platform Windcave (windcave.com), where payment category entity clusters and a payment-processing taxonomy restructuring drove the 6-month deployment.\n\nThe 1,200+ inbound calls came from 12 regional US service assets in four competitive verticals (contractors, HVAC, plumbing, and legal), attributed through dedicated call-tracking numbers, with the assets ranked in the Google Local 3-Pack.\n\nEach metric names its measurement source, which keeps the figure verifiable. The SEO Case Studies page documents both results.\n\nWhere can developers find the open-source GEO toolkit?\nThe open-source GEO toolkit lives at github.com/yes155/awesome-geo-seo, the curated collection for generative engine optimization.\n```\n\n", "url": "https://wpnews.pro/news/how-to-architect-json-ld-entity-graphs-for-ai-search-llm-citation-geo", "canonical_source": "https://dev.to/farrukh_abdullah_seo/how-to-architect-json-ld-entity-graphs-for-ai-search-llm-citation-geo-5hg7", "published_at": "2026-10-28 10:35:08+00:00", "updated_at": "2026-10-28 10:41:14.513619+00:00", "lang": "en", "topics": ["generative-engine-optimization", "structured-data", "ai-search"], "entities": ["Farrukh Abdullah Advisory", "Farrukh Abdullah", "Google AI Overviews", "ChatGPT Search", "Perplexity", "Wikidata", "ORCID", "GitHub"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/how-to-architect-json-ld-entity-graphs-for-ai-search-llm-citation-geo", "markdown": "https://wpnews.pro/news/how-to-architect-json-ld-entity-graphs-for-ai-search-llm-citation-geo.md", "text": "https://wpnews.pro/news/how-to-architect-json-ld-entity-graphs-for-ai-search-llm-citation-geo.txt", "jsonld": "https://wpnews.pro/news/how-to-architect-json-ld-entity-graphs-for-ai-search-llm-citation-geo.jsonld"}}