How to optimise for featured snippets in 2026
You have a page sitting at position 3 to 8 for a question query, and someone else’s paragraph is sitting above it in a box. That box is the featured snippet. It takes the top of the results page, and it takes the click with it. Getting that box is less about tricks and more about formatting one answer properly and picking the right queries to attempt in the first place.
This tutorial is for people with a site that already ranks and who want a repeatable process. It’s the workflow I use across a handful of sites I run out of Singapore, and it works best on informational pages already on page one.
By the end you will have a list of snippet candidates pulled from your own Search Console data, a rewritten answer block on each page, a way to check whether you won, and a view of what breaks when the page count grows. Google picks snippets automatically and you can’t opt in to one. What you can do is make your page the easiest one to extract from.
what you need
- a verified Google Search Console property for the site, free
- a spreadsheet tool or Python 3.10+ with pandas installed, free
- edit access to the pages, plus a way to see raw HTML (browser view source is fine)
- a rank tracker that records SERP features. Ahrefs and Semrush both do, from roughly US$100 a month at entry level, but you can do the first pass manually with an incognito window
- about two hours for the first 10 pages
If your rank tracker and Search Console give you different positions, that is normal. I wrote up which one to trust in rank trackers disagree and which number to trust.
step by step
1. understand what Google actually says
Read Google’s featured snippets documentation once, because it removes a lot of myths. The short version: snippets are generated automatically from page content, there is no markup that guarantees one, and the page has to be eligible for a normal snippet in the first place. Your controls are the preview directives, covered in Google’s robots meta tag documentation.
Expected output: you know that you are optimising content structure, not adding a magic tag.
If it breaks: if a page never shows a snippet of any kind, check the page source for nosnippet or a very low max-snippet value. A plugin or a leftover template setting is the usual cause.
2. export your question queries from Search Console
Open the Performance report, set the date range to the last 3 months, and filter queries with a regex for question words. In the query filter choose “custom (regex)” and use:
^(how|what|why|when|where|which|who|can|does|is|are|should)\b
Export the result to CSV. The report itself is explained in Google’s Performance report help page.
Expected output: a CSV with query, page, clicks, impressions, CTR and position columns.
If it breaks: if the export is tiny, your site may not have many question queries. Widen the range to 16 months, or drop the regex and filter for “best”, “vs” and “checklist” instead.
3. shortlist candidates with a script
You want queries where you rank 2 to 8 with real impressions. Position 1 already gets the click, and anything below 10 is a different problem. Here is the script I use on the export:
import pandas as pd
df = pd.read_csv("Queries.csv")
df.columns = [c.lower() for c in df.columns]
# search console exports CTR as "3.2%", strip it
df["ctr"] = df["ctr"].astype(str).str.rstrip("%").astype(float)
cand = df[
(df["position"] >= 2) &
(df["position"] <= 8) &
(df["impressions"] >= 100)
].sort_values("impressions", ascending=False)
cand.head(50).to_csv("snippet_candidates.csv", index=False)
print(len(cand), "candidates")
If you export page-and-query rows, group by page so you edit each page once. Adjust the 100-impression cutoff to your volume.
Expected output: a file of up to 50 rows, sorted by impressions.
If it breaks: a KeyError on a column name usually means your export is in another language or uses different headers. Print df.columns and rename to match. If the numbers look odd compared with other reports, see search console numbers that do not add up.
4. look at the live snippet for each query
Search each query in an incognito window with location set to your target country. Note the snippet type and the format Google chose:
- paragraph: a 40 to 60 word answer pulled from one block of text
- list: ordered or unordered items, often pulled from headings or list markup
- table: rows and columns pulled from an HTML table
- none: no snippet at all, which means the query is not a snippet query and you should skip it
Log the type, the current owner and their answer length. If they win with a numbered list under a heading that repeats the query, that is your template.
Expected output: each candidate has a type and a competitor format noted beside it.
If it breaks: results vary by country, device and sometimes by minute. Check twice on different days before deciding a query has no snippet, and note that AI-generated answers can appear above or alongside snippets.
5. write the answer block
This is the actual work. Under a heading that matches the query wording, put the answer in the first one or two sentences, stated directly. Then expand underneath.
For a paragraph target, write 40 to 60 words that answer the question without needing the rest of the page to make sense. For a list target, use a real <ol> or <ul>, with short items, introduced by a heading. For a table target, use a real <table> with a header row.
A pattern that works for me:
<h2>How long does a content refresh take to show in rankings?</h2>
<p>Most refreshed pages are recrawled within days, but ranking changes
usually take several weeks to settle. Expect to judge the result after
four to six weeks, not four to six days.</p>
The heading is the question and the paragraph is self-contained, with no throat-clearing.
Expected output: one extractable block per target query, sitting high in the page.
If it breaks: if the editor strips your list or table markup, check the page source, not the editor view. Page builders sometimes turn lists into divs with CSS bullets, which are far harder to extract.
6. keep the rest of the page honest
The page still has to deserve to rank. If the answer block is the only good thing on it, you will likely lose the snippet to a better page. Support the answer with detail, examples and sources. If the page is old and thin, refresh it first. I covered that process in how to do an SEO content refresh that actually works, and I put numbers on the typical outcome in what a content refresh actually recovers.
Expected output: the page reads as a complete answer, not a stub with a nice box on top.
If it breaks: if you are tempted to stuff five question headings onto one page to chase five snippets, read the next step first.
7. check for cannibalisation before you publish
If two of your pages answer the same question, Google may flip between them and neither holds the snippet. Search your site for the query with site:yourdomain.com "query words" and check Search Console for multiple URLs ranking for the same query. Fix that first, using the process in how to find and fix keyword cannibalisation.
Expected output: one page per target query, and the others pointing to it with internal links.
If it breaks: if you cannot decide which page should win, pick the one with more links and better engagement, and merge or redirect the other.
8. publish, request indexing and record a baseline
Push the changes live and use the URL Inspection tool in Search Console to request indexing. Before you do, write down the current position, clicks and impressions for each target query in a sheet with the date. Without a baseline you will not know whether the change helped or the page simply moved on its own.
Expected output: a dated sheet with before numbers for every edited page.
If it breaks: if Search Console says the page is not indexed after a week, that is a crawl or quality problem, not a snippet problem. Fix that first.
9. measure after four weeks
Check the same queries after 4 weeks. Look at position, CTR and clicks, and check the live SERP by hand. CTR can go up or down when you win a snippet; for some queries the box answers so well that people don’t click. That is why I only attempt snippets on queries where the full answer needs more than a paragraph.
Expected output: a short table of wins, losses and no change, per query.
If it breaks: if you lost a snippet you used to hold, compare your block with the new owner’s block. Usually they have a tighter answer or a cleaner list. Rewrite and wait again; editing every few days hides what worked.
common pitfalls
- chasing queries with no snippet: if the SERP never shows a box for that query, no amount of formatting will create one. Check step 4 before writing anything.
- burying the answer: an answer in paragraph six after a long intro rarely gets picked. Put it directly under the matching heading.
- padding the paragraph: a 200 word “answer” is not extractable. If you can’t state it in around 60 words, target a list or table instead.
- ignoring intent: a snippet for a query that really wants a comparison or a tool won’t hold. Match the format that already appears for that query.
- measuring clicks only: a snippet can raise impressions and brand visibility while clicks stay flat. Report both. I wrote about that conversation in reporting SEO work to someone who does not do SEO.
scaling this
At 10 pages, you do everything by hand. A spreadsheet, a manual SERP check and a Search Console export are enough, and the whole cycle fits into a week.
At 100 pages, the manual SERP check becomes the bottleneck. Move the tracking into a rank tracker that records SERP features, so you see snippet ownership change without searching by hand. Use the Search Console API to pull the question-query export on a schedule instead of downloading CSVs. Keep a template for answer blocks. If you use scripts or AI tools to draft the blocks, review every one by hand. I follow tool news for this on AI Tool Gazette when I’m deciding what is worth testing.
At 1000 pages, you can’t review every page, so you prioritise by impressions and by the gap between position and the snippet owner. You also need a template-level approach: if your CMS can render a “short answer” field above the fold, that field becomes the source of the extractable paragraph on every page. Rank checks at this volume mean many SERP requests and proxy costs; if you build your own checker, Proxy Scraping covers that side. At this size, pagination and faceted URLs also start creating duplicate answers, so read how to handle pagination and faceted navigation before you scale templates.
Some pages will also be dead weight; pruning can help the rest, as I discuss in deleting pages on purpose.
where to go next
- how to do an SEO content refresh that actually works: the page-quality work that should happen before you chase a snippet
- how to find and fix keyword cannibalisation: stop your own pages competing for the same box
- the blog index: everything else on the site, including the reporting and Search Console posts mentioned above
Written by Xavier Fok
disclosure: this article may contain affiliate links. if you buy through them we may earn a commission at no extra cost to you. verdicts are independent of payouts. last reviewed by Xavier Fok on 2026-10-04.