Structured data and schema.org: the foundation of AI SEO
Everything so far in this series has been about what a page says. Structured data — JSON-LD markup following the schema.org vocabulary — is explicit metadata about what a page is: an article, with this exact headline, published on this exact date, by this specific author. This part covers the three schema types that matter most, with real, verified examples.
Article: the baseline for any content page
{
"@context": "https://schema.org",
"@type": "TechArticle",
"headline": "Making HTTP requests in Python without the footguns",
"description": "GET, POST, timeouts, sessions, and error handling with Python's requests library.",
"datePublished": "2026-08-13",
"dateModified": "2026-08-13",
"author": { "@type": "Organization", "name": "TechPurAI", "url": "https://www.techpurai.com" },
"publisher": { "@type": "Organization", "name": "TechPurAI", "url": "https://www.techpurai.com" }
}This is a real, live JSON-LD block from a published tutorial. TechArticle (a subtype of the more general Article) is the correct type for technical, instructional content specifically — using the more specific subtype where one exists is itself a small, real signal of accurate classification, over defaulting to the generic Article for everything.
BreadcrumbList: a page's place in the site
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{ "@type": "ListItem", "position": 1, "name": "Home", "item": "https://www.techpurai.com" },
{ "@type": "ListItem", "position": 2, "name": "Tutorials", "item": "https://www.techpurai.com/tutorials" },
{ "@type": "ListItem", "position": 3, "name": "Making HTTP requests in Python without the footguns", "item": "https://www.techpurai.com/tutorials/python-requests-library" }
]
}Also real, from the same page. This is what powers the breadcrumb trail Google sometimes shows directly in a search result in place of the raw URL — a small but genuine visibility improvement, and a second, independent structural signal about where a page sits in a site's hierarchy.
HowTo: generated automatically from real content
{
"@context": "https://schema.org",
"@type": "HowTo",
"name": "Making HTTP requests in Python without the footguns",
"step": [
{ "@type": "HowToStep", "name": "Installing it" },
{ "@type": "HowToStep", "name": "A basic GET request" },
{ "@type": "HowToStep", "name": "The default nobody expects: no timeout" }
]
}This is the most structurally interesting real example in this series: on this site, this exact block is generated automatically from a tutorial's own <h2> headings (covered directly in part 3) — there is no separately maintained list of steps anywhere. Every tutorial gets accurate HowTo markup for free, and it can never drift out of sync with the actual content, since it's derived from that content directly rather than duplicated by hand.
Why this specifically matters for AI answer engines
A traditional search engine can infer a page's structure from prose with reasonable accuracy. An AI system generating a direct answer — ChatGPT browsing a page, Perplexity synthesizing a response, Google's AI Overviews — benefits far more from data that's already structured and unambiguous than from having to parse it back out of paragraph text itself. HowTo markup with explicit, named steps is close to ideal input for a system trying to answer "how do I do X" by lifting a clean, ordered list directly — which is exactly the mechanism part 19's AI SEO discussion builds on directly.
Validating it
Google's Rich Results Test and the more general Schema.org Validator both check JSON-LD for correctness before it ships — a syntax error in a JSON-LD block doesn't break page rendering (browsers ignore malformed script content silently) but does mean the intended structured-data benefit is quietly lost, with no visible symptom to notice without testing directly.
Hand-writing structured data as a static block with hardcoded values, disconnected from the page's actual content. The moment a title or date changes, a hardcoded JSON-LD block goes stale silently — generating it from the same data the page itself renders, the way the HowTo example above works, makes that structurally impossible rather than relying on remembering to update it.
Next: page speed and Core Web Vitals — technical factors that are both a direct ranking signal and, independently, exactly what a real visitor experiences.