Featured Snippets & PAA Extraction
Featured Snippets sit at "position 0" — above organic result #1. People Also Ask reveals the questions Google thinks are adjacent to a query. Both are gold for content strategy, and both are scrapable with respectful pacing through mobile proxies.
1. Why SERP Features Matter
Google's own data shows Featured Snippets capture a meaningful share of clicks and, more importantly, an outsized share of voice-assistant reads (Google Assistant reads the snippet aloud for spoken queries). People Also Ask is different but related — it's Google broadcasting what intent clusters around the head query.
Featured Snippet signals
- • Who owns "position 0" for your target queries
- • Format Google prefers (paragraph / list / table / video)
- • Length of snippet text (typical target: 40-60 words)
- • Source URL and domain — useful for competitor gap analysis
PAA signals
- • Question clusters Google associates with the topic
- • Recursive expansion — more questions load on click
- • Source page ranked for each PAA answer
- • Raw material for FAQ schema and topic-cluster planning
2. Types of Featured Snippets
| Type | Looks like | Typical triggers |
|---|---|---|
| Paragraph | 40-60 word answer box | "what is X", "why does X", definitions |
| Ordered list | Numbered steps 1, 2, 3... | "how to X", step-by-step queries |
| Unordered list | Bulleted items | "best X", "types of X", "examples of X" |
| Table | Rows × columns grid | Comparisons, rankings, specs |
| Video | Inline YouTube clip with chapter jump | Tutorials, physical demos |
The format Google chooses for a query is itself data — it reveals the intent shape. A ranking optimization that writes paragraph content for a query Google answers as a list will under-rank.
3. PAA Recursive Expansion
Out of the box, a Google SERP shows 3-4 PAA questions. Each click expands that question inline (answer + source URL) and — crucially — triggers Google to append new related questions to the bottom of the PAA list. Keep clicking and you can often harvest 40-60+ questions per seed query before the tree exhausts.
This recursive property is what makes PAA the single best source of "topic-adjacent questions" — better than AlsoAsked or AnswerThePublic because it's Google's own live tree, not a cached snapshot.
PAA requires a real browser. The expansion happens via JavaScript click handlers that fetch an internal XHR. A plain requests call only gets the initial 3-4 questions. For full expansion, use Playwright or Selenium.
4. Extracting Featured Snippets & PAA (Python)
Two parts: (a) pull the featured snippet from the initial HTML — often possible with plain requests; (b) expand PAA recursively with Playwright.
from playwright.sync_api import sync_playwright
from urllib.parse import quote_plus
import time, random
proxy_config = {
"server": "http://proxy.mobileproxies.org:8000",
"username": "your-username",
"password": "your-password",
}
def extract_snippet_and_paa(query, max_expansions=20):
with sync_playwright() as p:
browser = p.chromium.launch(headless=True, proxy=proxy_config)
ctx = browser.new_context(locale="en-US")
ctx.add_cookies([{
"name": "CONSENT", "value": "YES+1", "domain": ".google.com", "path": "/",
}])
page = ctx.new_page()
page.goto(
f"https://www.google.com/search?q={quote_plus(query)}&hl=en&gl=us",
wait_until="domcontentloaded",
timeout=30000,
)
# ── Featured Snippet (answer box) ──
snippet = None
snippet_box = page.locator("div[data-attrid='wa:/description'], div.xpdopen, div.c2xzTb").first
if snippet_box.count():
snippet_text = snippet_box.inner_text(timeout=3000)
source = snippet_box.locator("a[href]").first.get_attribute("href") if snippet_box.locator("a[href]").count() else None
snippet = {"text": snippet_text.strip(), "source": source}
# ── PAA recursive expansion ──
paa_selector = "div[jsname='N760b']" # PAA question container (drifts)
seen = set()
for i in range(max_expansions):
questions = page.locator(paa_selector).all()
clicked_new = False
for q in questions:
try:
text = q.inner_text(timeout=1000).strip().split("\n")[0]
except Exception:
continue
if text and text not in seen:
seen.add(text)
try:
q.click(timeout=2000)
page.wait_for_timeout(random.randint(800, 1600))
clicked_new = True
except Exception:
pass
if not clicked_new:
break
paa_questions = list(seen)
browser.close()
return {"featured_snippet": snippet, "paa": paa_questions}
if __name__ == "__main__":
data = extract_snippet_and_paa("what is a mobile proxy")
print("Snippet:", data["featured_snippet"])
print(f"PAA ({len(data['paa'])} questions):")
for q in data["paa"]:
print(" -", q)
Expect 20-60 PAA questions per seed when expansion runs to completion. Pace expansions (800-1600ms jitter between clicks) so the browser timing doesn't look robotic.
5. Using the Data for Content Strategy
- →Snippet target formatting: mirror Google's chosen format. If the query currently returns a numbered list, your content needs a matching
<ol>block. - →PAA as topic outline: after expanding 40+ questions for a seed, cluster them into sub-topics and write one H2 per cluster. That's an article structure Google has already validated as topically coherent.
- →FAQ schema feed: the top 5-8 PAA questions, verbatim, with your short answers, become
FAQPageJSON-LD. - →Competitive tracking: snippet ownership changes weekly. Monitor target queries daily and alert when the snippet flips domains — that's your window.
6. AlsoAsked, AnswerThePublic — and Their Limits
AlsoAsked visualizes PAA trees nicely but runs on cached data — the tree you see for a query might be weeks old. AnswerThePublic uses autocomplete (different data source — suggestions, not PAA). Both are fine for inspiration, but for rank tracking or freshness-sensitive analysis you want live PAA expansion, and that's a you-build job.
Related Guides
Live PAA + Snippet Data, Daily
Mobile proxies keep Playwright browsing stable across thousands of PAA expansions. Try for $5 and see.