Native HTML5 tags already carry most of these roles automatically. Only add an explicit role when you're stuck with<div>-based markup (older CMS, page builder) and can't use the real tag.
Role
Native tag it matches
Purpose
Example
role="banner"
<header> (page-level)
The site header, one per page
<header role="banner">
role="navigation"
<nav>
A navigation block
<div role="navigation">...</div>
role="main"
<main>
The page's main content
<div role="main">...</div>
role="complementary"
<aside>
Tangential content, sidebar
<div role="complementary">...</div>
role="contentinfo"
<footer> (page-level)
The site footer
<div role="contentinfo">...</div>
role="search"
none native
A search form or region
<div role="search"><input type="search"></div>
role="form"
<form> with a name
A form, only counts as a landmark once it has an accessible name
<form role="form" aria-label="Newsletter signup">
role="region"
<section> with a label
Generic labelled landmark for content that doesn't fit the others
<div role="region" aria-label="Customer stats">
Labelling attributes
Used alongside landmarks and headings:
Attribute
Purpose
Example
aria-label="..."
Gives an accessible name when there's no visible heading
<nav aria-label="Breadcrumb">
aria-labelledby="id"
Points to an existing visible heading as the name
<section aria-labelledby="pricing-h">
aria-describedby="id"
Points to extra descriptive text (not the name itself)
<input aria-describedby="pwd-hint">
aria-hidden="true"
Hides purely decorative content from screen readers and AI parsers
<span aria-hidden="true">→</span>
aria-current="page"
Marks the current item in a set (nav link, breadcrumb, tab)
~50–60 characters displays fully in Google. Longer titles get truncated, but length itself isn't a ranking factor
<meta name="description">
SERP snippet
~150–160 characters displays fully. Same rule — it's a display limit, not a ranking signal
<meta charset="UTF-8">
Character encoding
Should be the first tag in <head>. Missing this can break special characters for both browsers and AI parsers
<meta name="viewport">
Mobile rendering
Required for mobile-first indexing — a genuine ranking factor
Robots & crawler control
Two tags share the same directive syntax: <meta name="robots">applies to all crawlers, <meta name="googlebot"> is a Google-specific override with the same directives.
Directive
Effect
index / noindex
Allow / block page from search results
follow / nofollow
Allow / block crawling of links on the page
max-snippet:-1
No limit on text snippet length in search results and AI Overviews
Google-Extended controls Gemini/AI training only — it doesn't affect normal Google Search indexing. Blocking GPTBot,PerplexityBot or ClaudeBot also blocks those engines from ever citing you.
Canonical & language
Tag
Purpose
<link rel="canonical" href="...">
Declares the preferred URL when duplicate or near-duplicate content exists
A note before the table: schema.org itself has no required properties — every property in the vocabulary is technically optional. "Required" below means required by Google for rich result eligibility. Miss one and the markup is still valid schema, it just won't unlock the enhanced search result.
Common types
Type
Use for
Google-required properties
Status
Organization
Company homepage/about, brand identity
None required
Active Supports Knowledge Panel and logo display
WebSite
Homepage
url; add potentialAction (SearchAction) for the sitelinks search box
A knowledge graph connects your separate schemas into one confirmed web of entities, rather than leaving each type isolated on its own page. This is what gives AI models and Google's own Knowledge Graph confidence about who and what you are.
The two mechanisms that build it:
sameAs: an array of URLs confirming "this is the same entity as the one listed here." Use it onOrganization, Person and Productalike — LinkedIn, Wikidata, Crunchbase, Companies House, industry directories, official social profiles.
@id references: give each entity a stable, unique ID (usually a URL fragment on your own domain) so other schemas can point to it instead of repeating the whole object. This is the actual technique behind "nesting" and "connecting" entities.
Every entity is defined once, then referenced everywhere it applies. AProduct can point to the same Organization anArticle does, which points to the same WebSite, and so on.
A sensible starting graph for most sites:Organization + WebSite + Person(for each author), connected by @id, before going deeper into Product- or Article-level graphs.
05
Other structured data on the web
Format
Purpose
Notes
XML sitemap
List of every indexable page + metadata (last modified, priority)
Submit via Search Console. Essential for discovery, not a ranking factor itself
RSS/Atom feed
Structured feed of updates (blog posts, releases)
Used by feed readers and some AI crawlers to spot fresh content
robots.txt
Site-wide crawl rules by bot
Different from meta robots: this is site/directory-level. Can target specific bots: GPTBot, Google-Extended, CCBot, PerplexityBot, ClaudeBot
llms.txt
Markdown file at the root, plain-language summary of the site for AI agents
See reality check below
06
Reality checks and rules
Google's own guidance: no special markup is required for AI Overviews or AI Mode. It uses standard Search ranking. Don't chunk content into fragments "for AI" — write normal paragraphs and headings for people. Writing separate content variants targeted at AI risks Google's scaled content abuse spam policy.
FAQPage and HowTo rich results are dead in Google Search. HowTo was retired in 2023, FAQ followed on 7 May 2026. The schema types are still valid and Google still parses them to understand a page, but neither produces a SERP feature any more for any site.
Google prunes rich result types regularly. January 2026 removed several niche types (Practice Problems, Nutrition Facts, Nearby Offers, Local Bikeshare Station Status). Check current eligibility before investing heavily in a less common type.
Unused schema doesn't need panic-removing. Google has confirmed structured data that isn't triggering a feature causes no harm to Search — it just has no visible effect.
Other engines (ChatGPT, Perplexity, Claude) do actively favour extractable structure: lists, tables, definition blocks. This helps those engines and doesn't hurt Google, since it's just good content organisation.
Character limits on title/meta description are display truncation points, not ranking rules.
hreflang is a signal search engines weigh, not a directive they must obey.
JavaScript-only rendering is the single biggest blocker. If content only appears after client-side JS runs, most AI crawlers never see it, regardless of how good the tags are. Structured data must also be present in the initial HTML, not injected client-side, for Google Shopping crawls specifically.
Schema accuracy matters more than coverage. Markup that doesn't match visible page content (price, date, rating) risks a manual action, not just lost rich results.
BreadcrumbList needs at least two items to be considered valid.
Review rich results only attach to specific entity types (Product, LocalBusiness, Recipe, Event, Book, Movie, SoftwareApplication, etc.), never as a standalone page, and self-serving reviews are excluded.
llms.txt has no proven ranking or citation effect. Google has stated it has no bearing on rankings or AI Overviews, and large-scale tracking found no meaningful adoption or citation correlation. The one genuine use case is developer docs and API tools, where coding assistants use it as an efficient entry point.
Subscribe to The Lumin Letter and learn how to craft a high-converting website without spending a penny. You also get a fortnightly newsletter with 1 strategic insight, 1 quick website tip and 1 piece of visual website inspiration.
We won't share your details. Ever. By subscribing you agree with our Privacy Policy and provide consent to receive updates from Lumin.