Summarize this article with AI
Your rankings held, but clicks on a page dropped. Or picture a client asking why one of their top queries bled half its traffic while average position barely budged. SERP feature tracking answers it. On each date, for every query you care about, log which features Google shows (AI Overview, People Also Ask (PAA), video, images, snippets), where the first organic result lands beneath them, and whether you own a slot in any of them.
For this piece we pulled Ahrefs' stored US SERPs for 20 queries this blog targets, across seven dates from May to October 2026, which gave us 140 snapshots. We also read Google's own Search Console help and each tracker's product pages on October 31, 2026, then tested a small Python script on the real data. Every number below comes from that run, not from memory.
By the end you'll have the fields to record per check, the split between presence, ownership and displacement, what Search Console shows for free (and what it quietly doesn't), a routine you can actually keep, a tested diff script with a copy-paste change log, and the join to clicks most guides skip.
SERP feature tracking: the short answer
SERP feature tracking is simple to describe. Pick the queries that matter to you. On every check date, write down three things: which features Google is showing (AI Overview, People Also Ask, video and image blocks, sitelinks, discussions and forums, top stories, featured snippets, local packs, ads), where the first organic result sits beneath them, and whether your site owns a slot in any of them. That's it. Three fields plus a date and a query.
Why bother? Rank position alone can't explain a click change when the page around your result changes. Say your page holds its blue-link spot. An AI Overview or a video carousel lands on top of it, and the clicks dry up anyway. The reverse happens too. Say your result holds at #3. The featured snippet above it disappears, clicks can jump, and your rank hasn't budged.
Three questions sit under the practice. Only two of them actually explain your clicks.
- Presence: is the feature showing at all on this SERP?
- Ownership: are you in it (cited in the AI Overview, holding the snippet, in the video or image block, in a sitelink)?
- Displacement: how far down does the feature push the first organic result?
Presence by itself is trivia. Ownership and displacement are what you act on.
Here's the compact record to keep per check:
| Field | Why it matters |
|---|---|
| Check date (the tool's capture date, not today) | Lets you place the change in time |
| Query | The thing you're tracking |
| Page that targets it | Needed later for the click join |
| Features present (AI Overview, PAA, video...) | Presence |
| First organic position | Displacement |
| Your position | Where you sit under it all |
| Your slots in features (AI Overview citation, snippet, video, sitelinks) | Ownership |
| Note | What's hidden, missing, unusual |
One number to put a scale on this. In our run of 20 SEO queries, an AI Overview was on the page in 18 of the 20 latest snapshots, and in 109 of 140 snapshots the first organic result sat below position 1. Looking at rank changes alone? Most of that movement would have slipped past you.
Search Console covers two slices here: the rich results your pages have earned, and (since 2026) how often those pages show up in AI features. A tracker, or a provider's stored SERPs, shows what the SERP looks like, with or without you in it. You need both.
What each feature means: presence, ownership, displacement
Most SERP guides treat every feature as an opportunity. That's the mistake. An ad you can't win? A local pack you can't be in? Those are displacement facts, not tasks you can act on. A feature you could be in and aren't is a different story.
Here's the honest split, with how Google counts each one in the Performance report.
| Feature | Can you win a slot? | What you control | How Google counts the position |
|---|---|---|---|
| AI Overview / AI Mode | Yes, as a cited link | Page indexed, eligible to show with a snippet; nosnippet and max-snippet limit it; the Search Console control that includes a site in AI features is on by default |
One position; every link shares it |
| Featured snippet | Yes | You can't mark a page as one; nosnippet opts out, max-snippet may shorten it (no guarantee) |
Typically position 1 (Google), not "position zero" |
| People Also Ask | Sometimes | No markup route; Google calls them algorithmic suggestions, and an expanded question shows a featured snippet | Standard rules; impressions only when expanded |
| Video block | Yes, with content Google can find | Videos Google can find and index; see our video sitemap guide | One position for the whole block |
| Image block / thumbnails | Yes, with indexable images | Serve crawlable images with context; see our image sitemap guide | One position for the block |
| Sitelinks | Only under your own organic result | You don't set them; Google picks them | They share your organic result's position |
| Discussions and forums | Only community pages, forums, Q&A sites | Having a page on the right kind of domain | Block shares one position |
| Top stories | News publishers | Publishing news Google surfaces | One position for the block |
| Local pack | Local businesses | Google Business Profile | One position for the block; for everyone else it only displaces |
| Ads | No | Nothing on your side | Ads do not occupy a search position |
| Knowledge panel | Only for the entity's own site | Being the entity it describes | All links in the panel share its position |
| Merchant listings, product snippets, review snippet | Yes, with structured data | Product data, review markup | Has its own Search appearance value |
Two bits of dead advice to drop while you're updating your playbook. FAQ rich results stopped showing in Google on May 7, 2026. How-to rich results went away earlier, on September 13, 2023. You'll still see current SERP guides pushing FAQ markup as a way to win People Also Ask slots. Google calls PAA algorithmic. That schema doesn't earn a slot. And the FAQ rich result it was built for isn't a thing anymore.
One aside from our run. Across 140 requests on 20 queries, no row typed snippet (Ahrefs' name for a featured snippet) came back. Different query types pull in different features. Our set is informational, SEO tools and Search Console topics, so recipe cards, local packs and shopping blocks never surfaced. Commercial and local queries behave differently. You're more likely to see shopping carousels there, plus local pack results and product listings. Your mix will differ. Check your own.
Link each feature's effect back to the question it answers: if a feature appeared above you and your title now competes with a snippet or a row of AI Overview citations, click-through rate is where you'll see the impact. Our organic CTR guide separates layout losses from title problems. If you're optimizing a page that sits under AI features, monitor your own slot and the competitors cited around it, not just the organic rank. Optimization is a different job once the layout above you keeps changing.
What we found tracking 20 of our own queries for six months
The 20 queries this blog targets were picked across SEO tools and Search Console topics (seo dashboard, organic ctr, htaccess redirect, ahrefs vs moz, crawled currently not indexed, and 15 more of the same shape). We pulled Ahrefs' stored US SERPs through its API on the first of each month from May to October 2026, plus the latest capture, 140 requests in all. Ahrefs returns the last SERP it captured on or before the date, and in our data the captures sat 1 to 52 days before the requested date (median 11). The API doesn't say which device the stored SERP comes from, so these are "Ahrefs' stored US SERP", not desktop or mobile. In Ahrefs' own words, rankings are "snapshots of the SERP, reflecting the most relevant features and elements at the time of sampling".
Presence. AI Overview on 16 of 20 SERPs on May 1 and 18 of 20 in the latest capture (19 of 20 at least once). People Also Ask on 13 of 20 in May, 20 of 20 by October 1 and in the latest. Sitelinks jumped around hard, from 10 on May 1 down to 3 in June and July, back up to 15 by the latest check. Video blocks showed up on 8 queries at some point. Eleven of Ahrefs' 27 row types occurred.
| Feature | May 1 | Oct 1 | Latest |
|---|---|---|---|
| AI Overview | 16 | 16 | 18 |
| People Also Ask | 13 | 20 | 20 |
| Sitelinks | 10 | 13 | 15 |
| Discussions and forums | 4 | 6 | 4 |
| Video block | 0 | 2 | 5 |
Displacement. The first organic result sat below position 1 in 109 of 140 snapshots. An AI Overview was above it every single time (one capture also had People Also Ask above, pushing the first organic result to #3). Of the 119 snapshots with an AI Overview, 109 had it sitting at position 1. Features take position numbers, so a "top 10" rarely held ten blue links. It held between 5 and 10 organic results, with 8 the most common count (74 of 140). So when tracker data says "top 10", check whether it counts features. In Ahrefs' data, it does.
Change. Between consecutive monthly captures (110 pairs with different capture dates) we counted 151 feature appearances or disappearances, 20 to 30 per step. Every query changed at least once. Most volatile: chatgpt for seo with 14 changes. Least: pagerank sculpting and pagination seo with 3 each. The AI Overview itself appeared 6 times and disappeared 4 times across the run; on monthly seo report, for example, it appeared in June, was gone by early September, and back by late October.
Snapshot frequency matters. Compare September 1 directly with the latest snapshot and the script finds 28 feature changes. Walk the two monthly steps in between and you count 52. Features that come and go between checks cancel out. The less often you check, the less you see.
Ownership and citations. Not one of our 140 snapshots had our domain inside positions 1 to 10. Call it a baseline, not a win. 19 of the 20 posts only went live on or after September 20, 2026. So 7 queries had no capture after our post went live, and 12 had only one. The latest AI Overviews cited 150 distinct URLs on 92 domains, and only 58 of those (39%) also ranked in the same SERP's top 10. The reverse is more interesting than the ownership gap: a page can be cited by the AI Overview without ranking in positions 1 to 10. youtube.com was cited in 15 of the 18 latest AI Overviews, semrush.com in 9.
Reading all this: 20 queries in one niche, one country, one data provider, one capture window. Don't read the percentages as industry rates. Read them as the shape of the change you should expect to see on a short run of your own.
What Search Console shows about SERP features for free
The free baseline is better than most guides give it credit for in some ways, and worse in others. Two reports and a filter cover it.
Search appearance filter (Performance → Search results → Search appearance). It groups data by result type and lists only the types your site has impressions for. You can filter by one at a time, or Compare two side by side. Current values: Videos, Merchant listings, Product snippets, Review snippet, Recipe rich results, Recipe galleries, Discussion forums, Job listings and details, Q&A, Education Q&As, Math solvers, Translated results, AMP articles, AMP non-rich results, AMP on image result, Web Stories, Media Actions, Subscribed content. FAQ rich results and How-to rich results are deprecated fields that read empty.
One caveat worth keeping on a sticky note. Google says that filtering a page by a Search appearance type doesn't guarantee the filtered clicks were on that feature: clicks are assigned to a URL, not to a URL plus a feature. So a page's clicks under the Recipe rich results filter tell you the page appeared with recipe results and got clicks. They don't prove every one of those clicks hit the recipe card itself.
Plenty of SERP features have no Search appearance value at all. No line of their own for AI Overviews, AI Mode, featured snippets, People Also Ask, top stories outside AMP articles, image blocks, sitelinks, knowledge panels or local packs. All of those are counted inside the Web search type with everything else. If a guide says you can filter Search Console by "AI Overview" or "FAQ", it's out of date: there's no AI Overview value, and the FAQ field has read empty since Google retired that result.
Generative AI performance report. Rolled out to all sites worldwide as of August 31, 2026. It shows impressions in AI Overviews and AI Mode by page, country, device and date. Google's help page names impressions only: no clicks, no CTR, no position, no query dimension. So you can see which of your pages appear in AI features; you can't see what those appearances earned you.
How Search Console counts position when a feature is on the page
Google counts each element on the SERP as one position, however many links it holds. A featured snippet typically takes position 1. An AI Overview takes one position and all its citation links share it.1 Ads take none. People Also Ask impressions count only when a reader expands the question.
The consequence, by Google's own counting rules: a page that stays the first blue link can report an average position of 2 once an AI Overview appears above it. The page didn't move. The number did.
Third-party trackers count differently again. Some record an AI Overview citation as #1, some count a featured snippet as #1, one puts a knowledge panel at #11, and some ignore most features. You'll see the detail in the tracker table below. The point to carry into the change log: record the first organic position next to yours, so you can tell displacement apart from a rank move.
Two newer Search Console tools help the click join later. Weekly views, Sunday to Saturday, have sat in the Performance report since December 2025. The Hourly / Daily / Weekly / Monthly switch is where you'll find them. Custom chart annotations landed in November 2025. You get 120 characters, a date, and everyone on the property sees them.2 They turn the report into something you can read next to a change log.
Here's a one-glance map of what Search Console does and doesn't do for SERP features:
| Question | Where in Search Console | The limit |
|---|---|---|
| Do my pages get video / merchant / review results? | Search appearance filter | Filtered clicks aren't tied to the feature |
| Do my pages appear in AI Overviews or AI Mode? | Generative AI performance report | Impressions only, no queries, no clicks |
| Is a featured snippet or PAA on this query? | Nowhere | Use a tracker or stored SERPs |
| Did my clicks change? | Performance, Pages, Weekly view | Can't be split by feature |
If you want to filter the Performance report into topical query groups before you track them, our Search Console regex cheat sheet has 15 patterns you can copy. For getting the clicks-by-page-and-week data past the 1,000-row cap for the join below, see our bulk export walkthrough.
How to track SERP features: a routine you can keep
Six steps make up the routine. Four are one-time decisions. Two happen every check.
- Pick the queries per page. For each page that matters, track the handful of queries that actually drive it, not your whole keyword list. On every query, tag the page that targets it. That tag, applied to each of your tracked keywords, is what makes the click join at the end work. Group them with Search Console regex filters if you want them as query groups too.
- Pick a data source that doesn't scrape Google. A paid rank tracker, or a SERP data provider's stored snapshots (through its API or a scheduled export). In Google's spam policy, "scraping results for rank-checking purposes" is called out as a violation of both its policies and the Google Terms of Service.3 Skip the DIY scraper. Pull from a tracker or a SERP provider's stored data instead.
- Record the first organic position next to yours, plus your slots in features. "Position 3" doesn't mean the same thing across Semrush, Moz, AWR, STAT, AgencyAnalytics, Ahrefs and Google itself. The one column that stays comparable across tools is the first-organic position.
- Set the frequency to how fast the query moves. Weekly is the default on quite a few of the big names: Ahrefs Rank Tracker, Moz Pro, AgencyAnalytics, seoClarity. On volatile queries (product launches, AI topics, anything news-adjacent), pay for daily. Hold our 28 vs 52 in your head. A longer gap hides changes; it doesn't make them stop happening. Ahrefs' own stored SERPs refresh "dependent on the popularity of each keyword" and low-volume keywords may sit for 1 to 2 months between captures.4
- Diff each check against the last and log only the changes. The template and the script come next.
- Join the changes to clicks. The next section.
A change log you can copy
The log is a flat CSV, one row per change. Eleven columns, five real rows from our run:
date_seen,previous_check,keyword,page,change,feature,our_slot_before,our_slot_after,note,clicks_week_before,clicks_week_after
2026-10-24,2026-09-06,monthly seo report,/knowledge/monthly-seo-report-a-copy-and-fill-template-built-on-search-console-data/,appeared,AI Overview,none,none,"Ahrefs US SERP; changed between the two checks",,
2026-10-29,2026-09-09,semrush vs moz,/knowledge/semrush-vs-moz-where-their-numbers-disagree-and-how-to-check-them/,appeared,video block,none,none,"Ahrefs US SERP; changed between the two checks",,
2026-10-30,2026-09-30,content audit,/knowledge/content-audit-keep-update-merge-or-remove-using-search-console-data/,appeared,image block,none,none,"Ahrefs US SERP; changed between the two checks",,
2026-10-20,2026-09-26,seo forecasting,/knowledge/seo-forecasting-how-to-project-organic-clicks-from-your-search-console-data/,disappeared,discussions and forums,none,none,"Ahrefs US SERP; changed between the two checks",,
2026-10-25,2026-09-06,seo quick wins,/knowledge/seo-quick-wins-a-prioritized-checklist-of-small-fixes-and-how-to-verify-them/,appeared,AI Overview,none,none,"Ahrefs US SERP; changed between the two checks",,
Two things worth flagging. date_seen is when the capture after the change happened, not when Google changed the SERP; previous_check is the capture before. The real change happened somewhere between the two. And the two Search Console click columns are empty in our example, because this run pulled SERP data only. You fill them from Search Console's weekly Performance report, one row at a time, when you're ready to read the join.
A tested script that diffs two snapshots
It's a 138-line Python 3 script, standard library only, called serp_feature_diff.py. Hand it an exported CSV with the columns keyword, snapshot, position, type, url plus a domain. Per keyword, you get a tidy diff: features that appeared (+) or disappeared (-), how far the first organic result shifted, and any domain's slots gained, lost or moved (organic results, sitelinks, AI Overview citations, anything carrying a URL). It never queries Google. If both snapshots for a keyword are the same capture, it says so and moves on. If either snapshot has rows that should carry a page URL but hide it behind a google.com/goto?url=... redirect (or have none), it warns you the slot read for that keyword may be wrong.
The type values are Ahrefs' row types (ai_overview, ai_overview_sitelink for a citation, question, sitelink, video...), joined with ; when a row has two. Does your tracker use different names? Remap them in the CSV (at least organic and the citation type), or just edit the two sets at the top of the script. Here's the whole thing:
#!/usr/bin/env python3
"""Compare two SERP feature snapshots and list what changed.
For every keyword: SERP features that appeared or disappeared, how far the first
organic result moved, and which slots one domain gained or lost (organic results,
sitelinks, AI Overview citations, anything with its URL).
python3 serp_feature_diff.py snapshots.csv --before 2026-09-01 --after latest --domain example.com
python3 serp_feature_diff.py before.csv after.csv --domain example.com
Input: one row per SERP row, with at least these columns:
keyword, snapshot, position, type, url
"type" may hold several values joined with ";" (e.g. organic;video_th), as Ahrefs returns them.
Python 3 standard library only. It reads exported snapshots; it never queries Google.
"""
import argparse
import csv
import sys
from collections import defaultdict
from urllib.parse import urlsplit
REQUIRED = ["keyword", "snapshot", "position", "type", "url"]
# Row types that aren't a feature of their own: the organic list itself, an AI Overview's
# citations (they belong to "ai_overview") and thumbnails (they decorate another row).
NOT_FEATURES = {"organic", "ai_overview_sitelink", "image_th", "video_th"}
THUMBS = {"image_th", "video_th"}
def load(path, snapshot=None):
"""Read a snapshots CSV into {keyword: [rows]}, keeping one snapshot if asked."""
with open(path, newline="", encoding="utf-8") as f:
reader = csv.DictReader(f)
missing = [c for c in REQUIRED if c not in (reader.fieldnames or [])]
if missing:
sys.exit(f"error: {path} has no column {', '.join(missing)} (needs: {', '.join(REQUIRED)})")
serps = defaultdict(list)
for row in reader:
if snapshot and row["snapshot"] != snapshot:
continue
if not row["position"].isdigit():
sys.exit(f"error: {path} line {reader.line_num}: position {row['position']!r} is not a number")
row["position"] = int(row["position"])
row["types"] = set(row["type"].split(";"))
serps[row["keyword"]].append(row)
if not serps:
sys.exit(f"error: no rows in {path}" + (f" for snapshot {snapshot!r}" if snapshot else ""))
return serps
def features(rows):
found = {t for r in rows for t in r["types"]} - NOT_FEATURES
# a video or image thumbnail on an organic result is worth tracking on its own
found |= {f"organic+{t}" for r in rows if "organic" in r["types"] for t in r["types"] & THUMBS}
return found
def first_organic(rows):
return min((r["position"] for r in rows if "organic" in r["types"]), default=None)
def slots(rows, domain):
"""The domain's slots as {slot type: sorted positions}; an AI Overview citation is ai_overview_sitelink."""
held = defaultdict(set)
for r in rows:
host = (urlsplit(r["url"]).hostname or "") if r["url"] else ""
if host == domain or host.endswith("." + domain):
held[";".join(sorted(r["types"] - THUMBS))].add(r["position"])
return {t: sorted(p) for t, p in held.items()}
def hidden(rows):
"""Rows that should carry a page URL but don't: empty, or a google.com redirect (/goto?url=...)
that hides the target. A domain's slot can hide behind these, so its slot changes aren't reliable."""
out = 0
for r in rows:
if r["types"] & {"question", "ai_overview"}: # PAA questions and the AI Overview row often have no URL
continue
u = urlsplit(r["url"]) if r["url"] else None
out += not u or (u.hostname or "").endswith("google.com") and (u.path == "/goto" or u.path.startswith("/CAES"))
return out
def fmt(positions):
return ",".join(f"#{p}" for p in positions) if positions else "none"
def main():
ap = argparse.ArgumentParser(description=__doc__.split("\n")[1])
ap.add_argument("csv", nargs="+", help="one snapshots CSV (with --before/--after) or two: before.csv after.csv")
ap.add_argument("--before", help="snapshot value to compare from (one-file mode)")
ap.add_argument("--after", help="snapshot value to compare to (one-file mode)")
ap.add_argument("--domain", required=True, help="domain whose slots to track, e.g. example.com")
a = ap.parse_args()
if len(a.csv) == 1 and not (a.before and a.after):
ap.error("with one CSV, give --before and --after")
before = load(a.csv[0], a.before)
after = load(a.csv[-1], a.after if len(a.csv) == 1 else None)
domain = a.domain.lower().removeprefix("www.")
totals = dict.fromkeys(["keywords", "changed", "feature changes", "first organic moved",
"slots gained", "slots lost", "slots moved", "with hidden URLs"], 0)
for kw in sorted(set(before) | set(after)):
if kw not in before or kw not in after:
print(f"{kw}: only in the {'after' if kw in after else 'before'} snapshot, skipped")
continue
b, n = before[kw], after[kw]
totals["keywords"] += 1
if b[0].get("capture_date") and b[0]["capture_date"] == n[0].get("capture_date"):
print(f"{kw}: same capture date in both snapshots ({b[0]['capture_date']}), nothing to compare")
continue
lines = []
gone, new = features(b) - features(n), features(n) - features(b)
if new or gone:
lines.append("features " + " ".join([f"+{f}" for f in sorted(new)] + [f"-{f}" for f in sorted(gone)]))
totals["feature changes"] += len(new) + len(gone)
fb, fn = first_organic(b), first_organic(n)
if fb != fn:
lines.append(f"first organic result #{fb} -> #{fn}")
totals["first organic moved"] += 1
sb, sn = slots(b, domain), slots(n, domain)
for t in sorted(set(sb) | set(sn)):
if sb.get(t) != sn.get(t):
lines.append(f"{domain} {t} {fmt(sb.get(t))} -> {fmt(sn.get(t))}")
kind = "slots gained" if t not in sb else "slots lost" if t not in sn else "slots moved"
totals[kind] += 1
totals["changed"] += bool(lines)
hb, hn = hidden(b), hidden(n)
if hb or hn:
lines.append(f"warning: rows with no readable URL: {hb} before, {hn} after; slot changes may be wrong")
totals["with hidden URLs"] += 1
print(kw + ("".join(f"\n {l}" for l in lines) if lines else ": no change"))
count = lambda serps: sum(len(p) for kw in serps for p in slots(serps[kw], domain).values())
print("\n" + ", ".join(f"{k} {v}" for k, v in totals.items()))
print(f"{domain} slots: {count(before)} before, {count(after)} after")
if __name__ == "__main__":
main()
Run it like this:
python3 serp_feature_diff.py snapshots.csv \
--before 2026-09-01 --after latest --domain example.com
An excerpt of the real output for our 20 queries, September 1 vs the latest snapshot:
htaccess redirect
features -ai_overview
first organic result #2 -> #1
...
keyword cannibalization checker: same capture date in both snapshots (2026-08-22T10:52:49Z), nothing to compare
monthly seo report
features +sitelink -video
first organic result #1 -> #2
...
seo forecasting: no change
...
keywords 20, changed 16, feature changes 28, first organic moved 2, slots gained 0, slots lost 0, slots moved 0, with hidden URLs 4
getseoheatmap.com slots: 0 before, 0 after
Our domain owns no slots on these queries, so those slot lines come back blank. Pointing the same command at semrush.com gives rows like semrush.com ai_overview_sitelink #4 -> #1 and semrush.com organic none -> #3: that's what an ownership change looks like.
Two guard rails worth knowing. A CSV missing a required column stops with a clear error (error: snapshots.csv has no column type, exit 1), so a bad export never silently produces half a diff. A non-numeric position stops with the exact line it's on. The hidden-URL warning matters more than it looks. In the September 1 snapshots of content audit and seo kpis, every URL was a google.com redirect, so any domain's slots there were unreadable, and a diff without the warning would report them as lost.
How to tell whether a SERP feature change cost you clicks
Here's the join nobody shows. For each change-log row, open Search Console → Performance → Search results. Filter Page = the row's page, switch to the Weekly view, and compare the weeks before and after date_seen. Use the capture window (date_seen minus previous_check), not a single day, because the SERP changed somewhere inside it. Right-click the chart to add a short annotation ("AI Overview appeared", "video block gone") so the next reader sees why that week is odd. Then fill the two click columns.
Read the result against a short decision table:
| What you see | Likely reading | What to do |
|---|---|---|
| Clicks down, feature appeared above you, organic position unchanged | Displacement | Chase the slot if it's winnable; reset expectations if it isn't |
| Clicks down, you lost a slot (snippet, AI Overview citation, video) | Ownership loss | Check what replaced you; adjust the page accordingly |
| Clicks up after you gained a slot | Likely ownership win | Keep watching; one week isn't a trend |
| Clicks flat, feature appeared | The change didn't matter for this page | Stop watching that query so closely |
| Clicks down, no feature change | The SERP layout isn't the cause | Check seasonality, rank moves and demand; our SEO data analysis guide has the drill |
A few honest limits. A tracker's date_seen is when it captured the SERP, not when Google changed it, so the "before" week can already hold the change. Most pages earn clicks from a bunch of queries. One query's change can drown in the rest of that traffic. In Search Console there's no way to split a page's clicks between its AI Overview citation and its blue link. And a tracker captures one location, one device, one moment.
Want scale on the AI Overview question? Ahrefs' 2026 study pulled 300,000 keywords (150,000 showing an AI Overview, 150,000 without one) and compared aggregated desktop Search Console CTR from December 2023 against December 2025. On queries with an AI Overview present, pages in the top spot showed a 58% lower average click-through rate.5 That's correlation, not cause, and the figure is for position one only. It's useful as a sanity check on how big a displacement effect can be on an informational query.
The change log belongs in your monthly report so it stops being a side project; see our monthly SEO report template. Feature ownership itself tends to live under "diagnostics" in our SEO KPIs breakdown, not up with the main numbers.
Not keen on the per-page scan? The Pages view in SEO Heatmap drops every page's clicks by week (or month, or quarter) into one grid. Instead of filtering page by page, you can scan the whole site for the week that jumps out next to a change-log entry. Free for one Search Console property.
What to look for in a SERP feature tracker
Two sides matter in a tracker, and a good one shows them together. Your side: how your pages hold their slots across the AI Overview citation, a featured snippet, a video thumbnail or a People Also Ask box. Their side: how competitor pages are gaining or losing those same slots. Keep an eye on competitor citations in AI Overviews. You'll catch search visibility trends and gaps that pure rank data buries. Any tool you pick should measure both sides.
A short checklist for your next vendor demo:
- AI Overview presence and whether your citation is flagged
- Ownership flag per feature, not just presence
- First organic position or a pixel-depth number
- Update frequency (and whether paying more buys you daily)
- Device and location granularity
- An export route (CSV or API) so you can feed your own change log
The capability table below is verified against each vendor's own help, pricing or product pages on October 31, 2026. Where a row says "Not stated", the vendor's pages don't say either way; it doesn't mean the tool can't do it. No prices (they age too fast) and no rankings here. Every tool on the list does the job for someone.
| Tool | AI Overview citation tracked | Default update frequency | Pixel depth | How features change "rank" |
|---|---|---|---|---|
| Semrush Position Tracking | Yes | Daily (within 24 to 48 hours) | Not stated | AI Overview citation counts as #1 by default (toggle to exclude); knowledge panel #11 |
| Ahrefs Rank Tracker | Not stated on product pages | Weekly on all plans | Not stated | Not documented |
| Moz Pro | Not in the Rankings feature list | Weekly | Not stated | Featured snippet counts as #1; top 20 only |
| Advanced Web Ranking | Yes, with citation rank | Daily, weekly, biweekly, monthly or on demand | Yes (pixels, above the fold) | Universal engine counts every feature (each PAA entry); Organic engine ignores them except featured snippets |
| STAT | Yes (cited sources) | Daily | Not a number; stores the full HTML SERP | "Google rank" includes features; "base rank" excludes them, featured snippet = 1 |
| seoClarity | Yes | Weekly by default | Yes | Not stated |
| AgencyAnalytics | Not in the Rank Tracker (separate AI Tracker add-on) | Weekly | Not stated | Only map pack, snippets and sitelinks affect the rank |
| SE Ranking | Yes, link and its position | Daily | Not stated | Not stated |
| AccuRanker | Yes ("owned" = your URL is one of the AI Overview URLs) | Daily | Yes (pixels from top, above the fold) | "Base Rank" plus settings "Ignore local results", "Ignore featured snippet" |
| keyword.com | Yes | Daily, weekly or on demand by plan | Not stated | Not stated |
AI Mode usually sits apart. Semrush tracks it as a search engine of its own, and AWR as a separate US-only engine at twice the units; SE Ranking (AI Results Tracker), AccuRanker (AccuLLM), seoClarity (ArcAI) and Moz (prompt tracking) cover it in separate AI visibility products. Plain rank tracking rarely includes it. If it matters, treat it as a second question when you compare tools.
Weekly as a default is the trap buried in the table. A feature that appears and disappears inside a week is invisible to a weekly tracker. On queries where AI Overviews are flipping on and off, that's the gap you're paying to close.
For a wider look at trackers alongside the dashboards and reporting tools that read them, our SEO reporting tools guide walks through the picks by team size. For the two big "rank numbers from different tools disagree" vendors in particular, see our Semrush vs Moz comparison.
Our tracking run above used Ahrefs' stored SERPs through its API because it returns the stored SERP for a past date, which a backdated run needs; that's not an endorsement of its rank tracker over the others.
What SERP feature tracking can't tell you
A tracker's SERP is one location, one device and one moment in time. The reader logged in on their phone from a different city sees something else, and personalized results widen the gap. Weekly or monthly checks miss features that come and go between captures (our 28 vs 52 numbers). Clicks? Not in the data. That belongs to Search Console, and even Search Console can't split a page's clicks between its AI Overview citation and its blue link. Google's own line is worth remembering here: no third-party tool sees its internal ranking or AI systems. Brand and navigational queries tend to tilt toward knowledge panels, sitelinks and the brand's own site in the first slot. Track those apart from the informational set.
The last limit is the one worth repeating. A tracker can tell you a feature appeared. Why Google decided to show it, and whether it'll keep showing it, both sit outside what the tracker can see. A change is a prompt to go open the page and the query and look. The change on its own doesn't diagnose anything.
Keep the change log weekly and SEO Heatmap starts pulling its weight. The Pages heatmap turns every page's weekly clicks into a grid. A week that matches a change-log entry jumps out instead of hiding behind a filter. Free for one Search Console property, Web search type, up to 16 months (the same window Search Console keeps). No, you won't see the SERP itself. But for spotting whether a feature change actually moved clicks on the pages you track, it's a quick check.
Frequently asked questions
Does Search Console tell you which SERP features your pages appear in?
Partly. In Performance → Search appearance, Google splits data by result type for the rich results your site has earned impressions for (Videos, Merchant listings, Product snippets, Review snippet, Recipe results, Discussion forums, Job listings, Q&A, Translated results, and more). AI Overviews, AI Mode, featured snippets, People Also Ask, image blocks, sitelinks, knowledge panels and local packs don't get a Search appearance value. They roll up inside the Web search type. For AI Overviews and AI Mode on their own, the Generative AI performance report shows impressions by page, since Google rolled it out to all sites on August 31, 2026.
Does Search Console show AI Overview clicks separately?
No. The Generative AI performance report breaks impressions in AI Overviews and AI Mode out by page, country, device and date. Clicks, CTR, position, query dimension? None of those turn up on Google's help page. AI feature traffic still rolls up with everything else inside the Web search type in the Performance report. That report also can't split a page's clicks between its AI Overview citation and the blue link.
Is a featured snippet position 0 or position 1?
Go by Google's counting and it's position 1. Per Google's docs, a featured snippet usually lands at position 1. The snippet links out to the source page, and each result element with a link takes one position. You'll still find "position zero" used as shorthand in tracker blogs and guides. That label never shows up in Google's own counting.
How often should you track SERP features, daily or weekly?
How fast your query moves decides it. Several big trackers set weekly as the default: Ahrefs Rank Tracker, Moz Pro, AgencyAnalytics, seoClarity. Volatile queries (product launches, news-adjacent terms, AI topics) usually justify paying for daily tracking. Our 20 queries tracked monthly: walking September 1 to the latest snapshot through the two monthly steps in between surfaced 52 feature changes. Comparing the two endpoints directly? Just 28. Features that pop in and vanish between checks cancel out. Longer gap, less you see.
Is there a free way to track SERP features?
Not fully. Search Console's Search appearance filter and the Generative AI performance report cover the features your own pages appear in, which is the free half. For presence, ownership and displacement on competing results you need a paid rank tracker or a SERP data provider's stored snapshots. Google's spam policy flags scraping its results for rank-checking as a violation of its policies and Terms of Service. The honest free option stops at Search Console.
Do FAQ rich results still show in Google?
No. On May 7, 2026, Google retired FAQ rich results. How-to rich results had already ended on September 13, 2023. In Search Console, the FAQ rich results field is deprecated and reads empty. FAQ markup no longer earns a rich result in Google Search. People Also Ask is an algorithmic feature with no markup route, so adding FAQPage schema today won't earn you a PAA appearance either.
Is it allowed to scrape Google to track SERP features?
No. Google's spam policy specifically names "scraping results for rank-checking purposes" as a violation of its policies and Terms of Service. If you need the data, read it from a rank tracker or a SERP data provider's stored snapshots, through an export or an API, instead of running a scraper of your own.
Can a page be cited in an AI Overview without ranking in the top 10?
Yes. In our run, the latest AI Overviews on 18 of our 20 queries cited 150 distinct URLs across 92 domains, and only 58 of those (39%) also ranked in the same SERP's top 10. Check AI Overview citations separately. A tracker that only logs blue-link positions will miss most of them.
Rankings say where you sit. The SERP around you decides how many people click. When your change log says a feature moved in, SEO Heatmap shows whether the page's weekly clicks moved with it, across every page at once. It's free for one Search Console property.
Sources (5)
SEO Heatmap Knowledge relies on primary sources: Google's documentation, web standards, peer-reviewed research, and vendors' own pages for their pricing and features. Our editorial standards
- Google Search Console Help. “Performance report (Search results): Advanced details.”
- Google Search Console Help. “Search Console annotations.”
- Google Search Central. “Spam policies for Google web search.”
- Ahrefs Help Center. “How often is the data in Keywords Explorer and Site Explorer updated?”
- Law and Guan, Ahrefs 2026. “AI Overviews Reduce Clicks by 34.5%, Updated Study for 2026.”