Ground rules before the recipes
One graph, consistent IDs
@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
Only claim what is true
Validate before shipping
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
@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
subjectOf carries press
Connect authorship
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
speakableselector 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
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
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
contentUrl at an actual machine-readable file and the markup describes something engines can verify and pull.measurementTechnique earns trust
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.
