An AI Overview is a summary of pages Google already has in the index. There is no second ranking for it, and no tag that puts a page in.
Google says this in its own guide. The generative features on Search use the same ranking and quality systems as normal results. You do not need special markup, and you do not need a page written for a model.
I keep being sent the opposite. A JSON-LD block full of facts the page does not state, a hidden data-ai-summary attribute, and a promise that citations will rise 150% to 300%. None of that is a mechanism.
Which searches get an overview
I see them on questions. How, why, what, how much, and the difference between two named things. A longer question gets one more often than a single word.
"WordPress" does not get an overview. "Hire a developer in Dublin" usually gets a map pack, because that query is looking for a business.
The queries that do look like "why is this WordPress site slow" or "how much does a website audit cost in Ireland". If you search one and there is no overview, markup will not create one. Google picks the query.
Google also runs related searches in the background and pulls pages for those. Publishing a separate page for every wording, so you can steer the answer, falls under the scaled content abuse policy. One page that answers the question is enough.
The page has to be eligible
A page can turn up in an overview only if it can already show in Search with a snippet. Indexed. Not noindex. Not nosnippet. Googlebot has to be able to fetch the HTML.
I went through the crawler names in a separate post. The line worth repeating: blocking Google-Extended does not remove you from Google, and it does not remove you from AI Overviews. That token is about training. Google's control page says the same thing.
The switch that does remove you is in Search Console, under Settings, then Search generative AI. The default is include. Exclude keeps your links and your text out of AI Overviews and AI Mode, and Google says that choice is not a ranking signal for normal results.
A child property inherits the parent setting until somebody changes it on the child. Open the setting before you blame the copy.
A shop can also show up from Merchant Center, and a local business from its Google Business Profile. Those are separate feeds. A block of JSON on the homepage does not stand in for either of them.
If the answer is in an image, or in a block that only exists after JavaScript runs, treat it as missing until you have seen it in the raw HTML. View source and look for the sentence in that file.
Write the answer on the page
Google has also said you do not need a special writing style for this, and you do not need to chop the page into small chunks for a model. Headings and paragraphs are for the reader.
If the page is answering a question, put the answer in the first paragraph. If there is a number, put the number in that paragraph. A price or a version belongs in the text. A heading can be the question itself.
A comparison is a <table>, with thead, tbody, th and td. A screenshot of a comparison cannot be quoted. A table drawn by a script after the page loads is often absent from the HTML Googlebot fetches first.
Schema, when the page already says it
Structured data is not required for an AI Overview, and there is no schema type that opts a page in. Google still says to keep it for rich results, which is a different box on the search page. Use it when it repeats what the visitor can already read.
An article can be BlogPosting, with the author and the dates. A product can be Product or SoftwareApplication, with an Offer whose price is the price on the page. On this site the article schema is printed by the theme. On WordPress sites I use W3P SEO for the same job, and I still read the source afterwards.
The blocks I get asked to paste in ignore that. If you are adding one by hand:
@idis the canonical URL of that page. Pointing every product page at the homepage makes them the same entity.availabilityis a full URL,https://schema.org/InStock.https://schema.orgon its own is not a value.- Print the JSON raw, inside
<script type="application/ld+json">. Do not run it throughesc_attr()orsanitize_text_field(). Both turn quotes into HTML entities, and the block stops being JSON. - Do not attach a
HowToto a sales page. Google removed HowTo rich results in 2023. Steps the page does not show are a description of a page you did not publish. - If the visible page does not state a PHP version or a price, the JSON should not state it either.
Here's a product page that follows that list. The name, the version and the price are stand-ins. Use whatever the page already prints, and delete any line the page does not state.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "SoftwareApplication",
"@id": "https://example.com/plugins/analytics/",
"name": "Analytics Plugin",
"url": "https://example.com/plugins/analytics/",
"applicationCategory": "BusinessApplication",
"operatingSystem": "WordPress",
"softwareVersion": "3.1.5",
"softwareRequirements": "WordPress 6.0+, PHP 8.0+",
"description": "Cookieless pageview counts, stored in the WordPress database.",
"offers": {
"@type": "Offer",
"url": "https://example.com/plugins/analytics/",
"price": "39.00",
"priceCurrency": "EUR",
"availability": "https://schema.org/InStock"
},
"featureList": [
"Pageview counts written from PHP into a local table.",
"No cookie set by this script."
]
}
</script>
The blocks I was sent also bolted a HowTo onto the homepage @id, on the same graph as the product. A how-to is a different URL. If the page is a tutorial, and these are the steps in the article, this is the shape of it.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "HowTo",
"@id": "https://example.com/blog/track-visits-without-a-cookie/",
"name": "How to track WordPress visits without a cookie",
"description": "Count pageviews in the WordPress database without setting a cookie.",
"step": [
{
"@type": "HowToStep",
"name": "Record the hit on the server",
"text": "On each page view, write a row to your own table from PHP. Do not set a cookie."
},
{
"@type": "HowToStep",
"name": "Read the totals in wp-admin",
"text": "Query that table for the page, the day and the referrer, and show the counts on an admin screen."
}
]
}
</script>
@id is that tutorial's own URL. The steps are the steps in the article.
What I would skip
A data-ai-summary attribute. Nothing in Google's documentation reads it.
llms.txt is in the same bucket for Google. The guide says Search ignores it, AI Overviews included. I publish one anyway, for the other bots. It will not move this.
A second copy of the page, written so a model has an easier time, is what the scaled content abuse policy is about. Write the page for the person who opened it.
A wp_head callback that sniffs the user agent and calls update_option() is not monitoring. It writes the database on a front-end request. If you want to know what fetched the page, read the access log.
Ignore any percentage attached to this. I have not measured a 200% rise in citations, and I am not going to print somebody else's invented one.
How to check
So here's what I check, in order.
- View source. The answer and the table rows are in the file.
- If there is JSON-LD, run the URL through the Schema Markup Validator. Valid JSON, and the same facts as the page. A rich result is a different feature.
- Open the Generative AI performance report in Search Console. It has been on all properties since 31 August 2026. It counts impressions in AI Overviews and AI Mode, grouped by page, country, device and date. It lives inside the Performance report. An empty report usually means the site has not had those impressions, or the control above is set to exclude.
Search the question while logged out as well. If Google is not showing an overview for that query, nothing on the page will create one.