What is a SERP? Anatomy of a Google results page in 2026, block by block
A SERP (search engine results page) is the page a search engine returns for a query. On Google in 2026 it is a stack of distinct blocks: ads, sometimes an AI Overview, organic results, People Also Ask, a local pack for local queries, shopping grids for product queries, a knowledge panel for entities, discussion threads, and related searches at the bottom. Which blocks appear, and in what order, depends on the query, market and device.
Below is each block, what it is for, and the field POST /v1/monitor/google returns for it, followed by the blocks that are not returned as fields.
Two kinds of result
Google’s own visual elements gallery (checked 2026-09-17) names the parts of a result. It distinguishes a text result, “based on the textual content of the page”, from a rich result, which “typically relies on structured data in the markup of your page”, and names the pieces of a result: title link, snippet, attribution (site name, favicon, visible URL, breadcrumb), byline date and sitelinks. The same gallery names two page-level groups: a related searches group, “a cluster of related searches that other people have done”, and a related questions group, “a cluster of questions related to the user’s initial search”, which is the block most SEOs call People Also Ask.
Everything else on the page is a SERP feature: a block that is not a plain organic listing.
The blocks
The order below is for reading convenience. Google changes which blocks appear and where per query, market and device, so treat it as a map, not a rule.
Ads
Text ads appear above and below the organic results; product-style sponsored cards appear in carousels at the top or on the right. In the response, ads[] holds both, with type (RESULT for text ads, SHOPPING_CARD for sponsored product cards), blockPosition (top, bottom, middle, rhs), position within the block, page, title, url, domain, displayedUrl, description and ad sitelinks[]. Shopping cards add price, oldPrice, store, category and imageUrl.
AI Overview
An AI Overview is a generated answer on the results page with links to supporting sources. Google’s documentation on AI features says AI Overviews “are only shown when our systems determine that it is additive to classic Search, and as such, often don’t trigger” (AI features and your website, checked 2026-09-17). The same page says pages need to be indexed and eligible to be shown with a snippet, and that there are no additional requirements.
The API returns it as aioverview when you send include.aioverview (for example {} or {"markdown": true}). The object carries text, markdown (when requested), sources[] (position, url, label, description), citationPills[] (the inline chips, grouped by citationPillId), relatedLinks[], videos[] and ads[] shown inside the overview. It is null when no overview was available. For how the overview relates to the older featured snippet, see featured snippets and AI Overviews.
Organic results
The classic “ten blue links”. Each item in organicResults[] has position (1-indexed, counted across all pages you requested), page, title, link, displayedLink, snippet, date and sitelinks.inline[]. The pages field fetches 1 to 10 pages. Positions here are organic only; ads and features are not counted. Rank tracking on a SERP API explains what that means for position reporting.
People Also Ask
An expandable list of related questions. Each item in peopleAlsoAsk[] has question and type:
LINK: answered by a web page, withtitle,linkandsnippet.AIOVERVIEW: answered by an AI-generated overview. Withinclude.paaAioverview: truethe item also carriesmarkdownandsources[].UNKNOWN: classified as neither.
The content-strategy use of this block is in People Also Ask for SEO; extraction and expansion mechanics are in PAA keyword research.
Local pack
For local-intent queries, a map with a short list of businesses. localResults[] returns each place with position, title, placeId, rating, reviews, price, type, yearsInBusiness, address, phone, hours, description and links (website, directions). localResultsMoreLink is the URL of the expanded list. It is returned for desktop searches only and omitted when there is no pack. Set location (a Google canonical name such as "Denver,Colorado,United States") or uule to see the pack a searcher in that city sees; see local rank tracking.
Shopping grids
Organic product grids such as “Popular products”. shoppingCards[] returns title, position, category (the grid’s header), price, oldPrice, promoLabel, store, rating, reviews, thumbnail and productLink, which is usually an empty string. Sponsored product cards are in ads[], not here.
Knowledge panel
A panel about an entity (a company, person, place or work). knowledgeGraph returns title, type, kgmid, description, source, website, imageUrl, attributes[] (key, value), profiles[] and peopleAlsoSearchFor[] (name, link), plus entity-specific arrays such as ratings[] for films or webRatings[] for local businesses. It is omitted when no panel appears. People also search for covers the related-entity list.
Discussions and forums
Google’s “What people are saying” or “Trending posts and discussions” module, often linking to Reddit or forum threads. peopleAreSaying[] returns position, title, link and date (Google’s relative text, such as “5 days ago”). Omitted when absent.
Related searches
Query suggestions at the bottom of the page. relatedSearches[] returns query and link (a Google search URL for that query).
Field map
| Block | Field in result |
Notes |
|---|---|---|
| Ads (text and sponsored products) | ads[] |
type, blockPosition, position per block |
| AI Overview | aioverview |
Only with include.aioverview; +2 credits; null if unavailable |
| Organic results | organicResults[] |
position across pages, page, sitelinks |
| People Also Ask | peopleAlsoAsk[] |
type LINK, AIOVERVIEW, UNKNOWN |
| Local pack | localResults[], localResultsMoreLink |
Desktop only; omitted when absent |
| Shopping grid | shoppingCards[] |
Omitted when absent |
| Knowledge panel | knowledgeGraph |
Omitted when absent |
| Discussions | peopleAreSaying[] |
Omitted when absent |
| Related searches | relatedSearches[] |
query, link |
| Raw page | html[] |
URLs of the raw HTML, with include.html |
Blocks with no structured field
These blocks are not returned as structured fields:
| Block | Structured field | How to get it |
|---|---|---|
| Featured snippet | None | include.html, then parse the raw page |
| Top stories | None | include.html; for news results use the Google News endpoint |
| Image pack | None | include.html |
| Video carousel on the results page | None (only videos inside an AI Overview, in aioverview.videos[]) |
include.html |
| Total result count, search time | None | Not returned |
| “People also search for” box shown after a back-click | None | Not returned; see people also search for |
include.html returns result.html[], one URL per results page with its raw HTML. Your own parsing of that HTML breaks when Google changes its markup, so use it for inspection and occasional analysis, not as a daily metric source.
AI Mode is a separate surface
Google AI Mode is not a block on the regular results page; it is its own conversational search experience. Google describes it as “particularly helpful for queries where further exploration, reasoning, or complex comparisons are needed” (AI features and your website, checked 2026-09-17). The API has a separate endpoint for it, POST /v1/monitor/aimode, which takes a prompt (not query) with country, location or uule, and device, and returns text, sources[], citationPills[] and, for some prompts, places[]. It is priced separately (4 credits per async task). See AI Mode and the AI Mode API post.
Why two people see different SERPs
The same query can produce different pages depending on:
- Country and language:
country(orgl) andhl. - City:
locationoruule. Local packs and many organic results change by city. - Device:
desktop, ormobile,ios,android, which return the mobile page.localResultsis returned for desktop only. - Time: blocks come and go between runs, so a single result is one observation.
When you collect SERPs for analysis, fix all of these per series. Google search parameters covers the targeting fields in more depth.
Request a SERP and list its blocks
curl -X POST https://api.answerline.dev/v1/monitor/google \
-H "Authorization: Bearer $ANSWERLINE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"query": "coffee roasters denver",
"country": "US",
"hl": "en",
"location": "Denver,Colorado,United States",
"device": "desktop",
"include": { "aioverview": {} }
}'
import os
import requests
res = requests.post(
"https://api.answerline.dev/v1/monitor/google",
json={
"query": "coffee roasters denver",
"country": "US",
"hl": "en",
"location": "Denver,Colorado,United States",
"device": "desktop",
"include": {"aioverview": {}},
},
headers={"Authorization": f"Bearer {os.environ['ANSWERLINE_API_KEY']}"},
timeout=(10, 330),
)
res.raise_for_status()
result = res.json()["result"]
blocks = {
"ads": len(result.get("ads") or []),
"aioverview": result.get("aioverview") is not None,
"organic": len(result.get("organicResults") or []),
"people_also_ask": len(result.get("peopleAlsoAsk") or []),
"local_pack": len(result["localResults"]) if "localResults" in result else None,
"shopping_grid": len(result["shoppingCards"]) if "shoppingCards" in result else None,
"knowledge_panel": "knowledgeGraph" in result,
"discussions": len(result["peopleAreSaying"]) if "peopleAreSaying" in result else None,
"related_searches": len(result.get("relatedSearches") or []),
}
print(blocks)
const res = await fetch("https://api.answerline.dev/v1/monitor/google", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.ANSWERLINE_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
query: "coffee roasters denver",
country: "US",
hl: "en",
location: "Denver,Colorado,United States",
device: "desktop",
include: { aioverview: {} },
}),
});
if (!res.ok) throw new Error(`HTTP ${res.status}: ${await res.text()}`);
const { result } = await res.json();
const present = [
["ads", (result.ads ?? []).length > 0],
["aioverview", result.aioverview != null],
["peopleAlsoAsk", (result.peopleAlsoAsk ?? []).length > 0],
["localResults", "localResults" in result],
["shoppingCards", "shoppingCards" in result],
["knowledgeGraph", "knowledgeGraph" in result],
["peopleAreSaying", "peopleAreSaying" in result],
].filter(([, on]) => on).map(([name]) => name);
console.log(present);
This synchronous call costs 3 credits base, +2 for the AI Overview and +2 for running synchronously: 7 credits. The same payload as an async GOOGLE task costs 5.
Two things to note in code:
- Test for the key rather than an empty array for
localResults,shoppingCards,knowledgeGraphandpeopleAreSaying. They are omitted when the block is absent. - Keep
include.aioverviewconstant across a series. Without it,aioverviewis missing, which is not the same asnull(requested but not shown).
What each block is useful for
| Block | Typical question it answers |
|---|---|
| Organic results | Where do we rank, and who ranks above us? |
| AI Overview | Is there a generated answer, and does it cite us? |
| People Also Ask | What do searchers ask next, and who answers? |
| Local pack | Which businesses does Google show for this city? |
| Ads | Who bids on this query, and where do their ads sit? |
| Shopping grid | Which products and stores appear, at what prices? |
| Knowledge panel | Has Google resolved the query to an entity, and is it ours? |
| Discussions | Which forum threads shape opinion on this topic? |
| Related searches | Which adjacent queries should we cover? |
Tracking how these blocks change over time is covered in SERP feature change tracking, and the data model behind the response in structured SERP data. If you are choosing a provider, best SERP APIs compares options.
Glossary
- SERP feature: any block on a results page other than a plain organic listing.
- Rich result: an organic result enhanced with extra information, often from structured data.
- Local pack: the map-backed list of businesses for local-intent queries.
- Knowledge panel: the entity panel built from Google’s Knowledge Graph;
kgmidis its identifier. - AI Overview: a generated answer with linked sources shown on some results pages.
More terms are in the glossary. To request your first results page, see the Google Search engine page.
Questions
What does SERP stand for?
SERP stands for search engine results page: the page a search engine returns for a query. On Google it combines organic results with blocks such as ads, an AI Overview, People Also Ask, a local pack and a knowledge panel.
Which SERP blocks does the Google Search endpoint return as structured fields?
organicResults, ads, aioverview (when requested), peopleAlsoAsk, relatedSearches, localResults, shoppingCards, knowledgeGraph and peopleAreSaying. localResults, shoppingCards, knowledgeGraph and peopleAreSaying are omitted when the block is not on the page.
Does the API return featured snippets, top stories, image packs or video carousels?
No. Featured snippets, top stories, image packs and video carousels on the results page are not returned as structured fields. Request include.html to get the raw page HTML if you need to inspect those blocks yourself.
Is Google AI Mode part of the SERP?
AI Mode is a separate Google surface with its own conversational answer, not a block on the regular results page. This API covers it with its own endpoint, POST /v1/monitor/aimode, which returns text, sources and citation pills.
Why does the same query show different SERPs to different people?
Results depend on country, language, location and device, among other things. The Google Search request lets you fix country or gl, hl, location or uule, and device so that runs are comparable.