Skip to main content

JSON-LD recipes for AI visibility: the five blocks that matter

Structured data is the weakest layer in the AI-readiness benchmark. Five copy-pasteable JSON-LD recipes fix most of it: Organization, Person, WebSite, FAQPage, and Dataset, annotated from this site's production graph.

A panel framed by curly braces holding a small graph of connected nodes, one node lit in mint
By Lars Nyman5 min readUpdated

Ground rules before the recipes

One graph, consistent IDs

Give your Organization and Person nodes stable @id values (we use https://site.com/#organization and #person-name) and reference them everywhere else instead of redefining them per page. Engines reconcile entities by ID; ten slightly different copies of your Organization is entity mush.

JSON-LD over microdata

One script tag, no markup entanglement, and it is the format Google's own documentation leads with.

Only claim what is true

Schema is a claims format, and the claims get checked. Self-assigned star ratings on your own services are the canonical example of markup that hurts more than it helps.

Validate before shipping

The Schema.org validator and Google's Rich Results Test both parse JSON-LD; a syntax error silently voids the whole block. Parse errors are an explicit fail in the audit rubric.

Recipe 1: Organization, the entity anchor

The block everything else hangs off. Ours doubles as ProfessionalService because the firm is one; use the most specific type that is honestly yours.

{
  "@context": "https://schema.org",
  "@type": ["Organization", "ProfessionalService"],
  "@id": "https://www.nyman.media/#organization",
  "name": "Nyman Media",
  "url": "https://www.nyman.media",
  "email": "hello@nyman.media",
  "logo": {
    "@type": "ImageObject",
    "url": "https://www.nyman.media/images/nm-logo.svg"
  },
  "description": "Fractional CMO leadership for tech companies.",
  "founder": { "@id": "https://www.nyman.media/#person-lars-nyman" },
  "sameAs": ["https://www.linkedin.com/company/nymanmedia"],
  "knowsAbout": [
    "Fractional CMO leadership",
    "Generative Engine Optimization (GEO)",
    "AI search visibility"
  ],
  "areaServed": "Global"
}

The decision that matters

knowsAbout. It is the closest schema.org gets to "what should this entity be retrieved for". Ours lists the specific disciplines we want associated with the entity; a generic list ("marketing", "business") wastes the property.

The mistake to avoid

Defining Organization separately on every page with small variations. Define once in the layout, reference by @id everywhere else.

Recipe 2: Person, the expertise carrier

AI engines weigh who stands behind content. A Person node connects the byline to a real, corroborated identity.

{
  "@context": "https://schema.org",
  "@type": "Person",
  "@id": "https://www.nyman.media/#person-lars-nyman",
  "name": "Lars Nyman",
  "jobTitle": "Fractional CMO & Founder",
  "worksFor": { "@id": "https://www.nyman.media/#organization" },
  "sameAs": ["https://www.linkedin.com/in/larsnyman"],
  "subjectOf": [
    {
      "@type": "NewsArticle",
      "url": "https://fortune.com/2024/10/06/ai-assistants-ratting-out-for-badmouthing-coworkers/",
      "publisher": { "@type": "Organization", "name": "Fortune" }
    }
  ]
}

sameAs is the corroboration channel

Every profile you list is a place an engine can confirm the person exists and matches the claims. List only profiles you control and keep current.

subjectOf carries press

Articles that quote the person, attached as NewsArticle nodes. We re-verified every URL in ours against the published text before shipping it; machine-readable claims invite machine-speed fact-checking.

Connect authorship

Articles should reference this node as author by @id, which turns one identity into sitewide E-E-A-T instead of a disconnected byline string.

Recipe 3: WebSite, small but cheap

{
  "@context": "https://schema.org",
  "@type": "WebSite",
  "@id": "https://www.nyman.media/#website",
  "name": "Nyman Media",
  "url": "https://www.nyman.media",
  "inLanguage": "en",
  "publisher": { "@id": "https://www.nyman.media/#organization" },
  "speakable": {
    "@type": "SpeakableSpecification",
    "cssSelector": [".nm-h1", ".nm-lede"]
  }
}
  • Why bother: It is three minutes of work, it closes a named check in most structured-data audits, and the speakable selector tells voice and answer surfaces which elements carry the quotable summary.

Recipe 4: FAQPage, the retrieval shape

Question-and-answer pairs are the unit AI answers are assembled from. Mark up real FAQs that exist visibly on the page; invisible-markup-only FAQs are a guideline violation.

{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "How is pricing structured?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Monthly retainer, not hourly. Most engagements sit between $10K and $25K per month depending on stage, scope, and time commitment."
      }
    }
  ]
}

Write answers as the quote you want

The text field is lifted verbatim into AI answers more often than any other property on this list. Two to four sentences, self-contained, no "see above".

Ask real buyer questions

Mirror the questions your prospects actually ask, price ranges included. A FAQ that only asks softballs earns no retrievals.

Recipe 5: Dataset, if you publish original data

The rarest block on this list and the strongest. If you publish research or benchmarks, Dataset markup makes the asset legible to engines and the journalists using them.

{
  "@context": "https://schema.org",
  "@type": "Dataset",
  "@id": "https://www.nyman.media/state-of-ai-visibility#dataset",
  "name": "State of AI Visibility: aggregate AI-readiness benchmarks",
  "creator": { "@id": "https://www.nyman.media/#organization" },
  "isAccessibleForFree": true,
  "license": "https://creativecommons.org/licenses/by/4.0/",
  "measurementTechnique": "https://www.nyman.media/audit/methodology",
  "distribution": {
    "@type": "DataDownload",
    "encodingFormat": "application/json",
    "contentUrl": "https://www.nyman.media/state-of-ai-visibility/data.json"
  }
}

The distribution property is the difference

A Dataset node without a real DataDownload is decoration. Point contentUrl at an actual machine-readable file and the markup describes something engines can verify and pull.

measurementTechnique earns trust

Link your public methodology. A dataset whose collection method is documented outranks a bare claim in any credibility weighing, human or machine.

Schema is not decoration for crawlers; it is the difference between an engine quoting you precisely and an engine paraphrasing a guess about you.

What to do next

Ship recipes 1 to 3 this week (they are sitewide and take an afternoon), add FAQPage to your three most-asked-about pages, then run the audit to confirm the structured-data section moves.

Frequently asked

Questions