Most content gap analyses end as a keyword export. Somebody runs the competitor report, pastes a few hundred "Missing" rows into a sheet, and the sheet sits there because nobody turned it into a publishing decision.
We've run this analysis for a lot of B2B sites, and the truly useful version of this kind of work ends with a list of what to build, in what order. Whether that's new pages or rewrites, with each scored and assigned to a funnel stage.
If you want that list in the right order, it's going to need inputs a keyword tool can't produce. You'll want a manual read of the results pages, your own site-search and sales-call data, a funnel map, and a check on whether AI answers cite you at all.
Here's the seven-step loop we use to help us decide what to build next.
What counts as a content gap?
A content gap is any topic, question, or format your audience is looking for that your site either doesn't cover or covers worse than the pages currently winning the click.
- Topic gap — Your audience cares about a subject and your site has no page on it. The fix is a new page.
- Intent gap — You cover the topic, but your page answers a different question than the searcher asked, usually an informational post where they wanted a comparison. The fix is a second page at a different funnel stage.
- Quality gap — You cover the topic, but the page is thin, outdated, or unclear next to what ranks. The fix is a rewrite that keeps the URL.
- Originality gap — Your page repeats what the competing pages say. The fix is original input, such as customer data, a documented process, or a stance.
- Format gap — The searcher wants a calculator, a template, or a comparison table, and you've written an essay.
- Journey gap — A stage of the buying process has no content at all. No keyword tool reports this, because nobody searches for "what do I read after I sign the contract."
Label every finding with one of these. A single "Missing" row can be a topic gap, an intent gap, or a quality gap on a page you already have, and each routes to a different brief.
Why run a content gap analysis?
The strongest argument is bottom-funnel revenue. One enterprise software team built a database of every keyword it and its five nearest competitors ranked for, isolated the terms all five ranked for and it didn't, and turned the result into 29 purchase-intent pages that generated $10M in sales pipeline.
Topical authority is the second argument, with a caveat: Google publishes no topical authority score. Depth alone doesn't guarantee rank either. Build clusters, but don't promise leadership a direct cause-and-effect.
AI citation is the newest argument. An analysis of 863,000 keywords and 4 million AI Overview URLs found only 38% of cited pages ranked in the top 10 in March 2026, down from 76% eight months earlier. A page can rank and still be absent from the AI answer, so AI-citation gaps need their own step.
How to do a content gap analysis
The workflow runs as a loop.
- Inventory what you have.
- Pull the competitor keyword gap.
- Read the results pages by hand.
- Mine your own first-party data.
- Plot everything against funnel stage and intent.
- Score the candidates.
- Publish and measure.
Run it once end to end before you automate any of it, because the judgment calls in Steps 3 and 6 are where the value sits.
Step 1: Inventory and audit the content you already have
Start with what already ranks badly, because a rewrite ships faster than a new page and keeps the URL's history. Build the content inventory from a crawl or a CMS export, then join two data sources to every URL. From Google Search Console, pull clicks, impressions, CTR, and average position for the full 16 months it retains. From GA4, pull the Landing page report with key events and engagement rate.
Then flag underperformers. A practical floor is fewer than 100 clicks in six months, which sends a page to human review rather than the delete pile. For pages that lost clicks, three metric signatures point to three different fixes:
| Pattern | Clicks | Impressions | Position | Likely fix |
|---|---|---|---|---|
| Ranking decay | Down | Down | Worse | Rewrite for quality |
| Zero-click capture | Down | Flat or up | Stable | Restructure for the click, or accept the AI Overview |
| Demand decay | Down | Down | Held or improved | Consolidate or retire |
The signatures come from a page-refresh diagnostic, and the "likely fix" column is ours. Give each flagged URL one of four verdicts: remove, combine, update, or keep. Every "update" becomes a rewrite candidate for Step 6.
Step 2: Run a competitor keyword gap report
This is the only step most teams run, and it's the fastest way to find topic gaps. In Semrush, go to SEO, then Competitive Research, then Keyword Gap. Enter your domain in the field labeled "You" and up to four competitors, set every field to Root Domain and Organic Keywords, and compare.
The tool sorts every keyword into seven buckets, and two of them matter here. Missing is keywords where all competitors rank and you don't. Weak is keywords where you rank, but below every competitor. Open the Weak tab and set the competitor position filter to Top 10, which narrows it to queries someone has already proven winnable, then filter by intent and difficulty and export.
In Ahrefs, the equivalent is Content Gap under Competitive Analysis, with "All competitors rank" as the Missing equivalent. Switch the mode to Exact URL to compare a single page against the competitor pages that outrank it, which is how you find page-level gaps on a topic you already cover.
One limit applies to both tools. A Missing report can only show topics a competitor already covers. It can't surface a gap nobody in your category has filled, which is what Steps 3 and 4 are for.
Step 3: Read the SERP manually for quality and intent gaps
Take the top 30 to 50 keywords from your Step 2 shortlist, search each one, and open the top five results plus your own page if you have one. You're working out why those pages rank and whether you can beat them without a link campaign.
Rate each result 1–5 on content quality (freshness, and which subtopics it covers that yours doesn't) and on usability (a table, a template, a calculator, or original data, versus 2,000 words of prose).
A results page where every top-5 entry is a two-year-old listicle with no original data is a quality gap you can take with one well-built page. A results page full of fresh, data-rich pages from stronger domains is a topic gap you'll lose for now, so park it. And if your shortlisted keyword returns comparison pages while your only related URL is a how-to, you've found an intent gap, and the brief in Step 7 should be a comparison.
Record the SERP features too, because they change what a ranking is worth. A study of 3,119 terms across 42 organizations found organic CTR of 0.52% on queries with an AI Overview that didn't cite the brand, against 1.45% where no AI Overview appeared. A keyword with an AI Overview isn't dead, but score its click potential lower unless you have a realistic path to being one of the cited sources.
Step 4: Mine first-party sources
Third-party keyword tools miss the bottom of the funnel almost by design. First-party data captures the mid- and bottom-funnel gaps that drive conversions, where keyword databases skew toward the top.
Site search is the cheapest. GA4 records on-site searches automatically for the common query parameters, but you have to register search_term as a custom dimension before it shows up in Explore. Export the queries monthly, strip the spam, cluster by theme, and run the clusters through your keyword tool. A customer query that returned nothing is a high-intent gap.
Sales calls carry the language buyers use before they learn your vocabulary. Review 20 to 30 recent discovery calls (or let a call-recording tool like Gong do the first pass), pull the five to ten recurring pain points, and keep a library of exact quotes with frequency counts.
Support tickets work the same way, clustered by theme and checked for themes with no page. Tag every first-party finding with a frequency count and a funnel stage, because most will land in the middle or bottom of the matrix you build next.
Step 5: Map gaps to funnel stages and search intent
Plot every existing URL and every candidate from Steps 2 through 4 on a matrix of funnel stage against search intent. Empty cells are gaps and crowded cells are redundancy. Columns are the intent labels your keyword tool already uses, and the rows run from awareness to post-purchase.
| Stage | Informational | Commercial | Transactional |
|---|---|---|---|
| TOFU (awareness) | Explainers, definitions, trend data | Rarely applicable | Rarely applicable |
| MOFU (evaluation) | How-to guides, frameworks | Comparisons, "best X for Y" lists, alternatives pages | Rarely applicable |
| BOFU (purchase) | Implementation and migration guides | Pricing explainers, vendor comparisons | Product pages, demo and trial pages |
| Post-purchase | Troubleshooting, setup docs | Upgrade and expansion guides | Account and renewal pages |
The TOFU informational cell is full on every B2B matrix we've filled in, because that's what keyword tools surface first (and, honestly, because explainers are easiest to assign). The MOFU commercial cell is thin, and the post-purchase row is usually empty except for whatever support wrote, so fill it from the Step 4 data. Move Weak keywords and "update" verdicts in too. A Weak keyword in an occupied cell is a quality gap on the existing URL.
Step 6: Score and prioritize with a template
Score every candidate on four inputs and sort, or the matrix becomes a wish list. The inputs are search demand, keyword difficulty, business value (how close the topic sits to a purchase decision and to what you sell), and effort (expert time, original data, format).
The formula matters less than picking one and applying it consistently. Two documented options work well:
- Multiplicative — Rate demand, difficulty (inverted so easy scores high), strategic fit, and SERP winability each 1–5, then multiply the four. A 5 × 3 × 5 × 4 topic scores 300 and beats a 4 × 4 × 3 × 3 topic at 144. We prefer this one because a single 1 on strategic fit tanks a high-volume topic.
- Additive with thresholds — Rate traffic potential, ranking potential, conversion potential, click potential, and effort each 1–5 and add them up. A total of 18 or higher goes on the calendar. Twelve or lower gets parked.
Then order the work by fixing rewrites before new pages, and BOFU gaps before TOFU gaps. Pages sitting in positions 5 to 20 with weak CTR are the highest-yield slice of Step 1, since they already have impressions. After those, take the highest-scoring Missing keywords from the MOFU commercial and BOFU cells.
The output is a ranked build order with one verdict per row.
Step 7: Close the gaps and measure results
A brief a writer can pick up without a follow-up call needs a title, the primary keyword, the search intent, the personas it serves, and the content template. Paste in the Step 3 notes on which subtopics the top results cover and skip, and the Step 4 quotes in the customer's words. Those two additions separate a page that fills a quality gap from one that adds a sixth near-identical result.
We aim to get the first tranche out within 7 days of the analysis, rewrites first since they carry existing history. Budget two to four working days for the analysis itself on a mid-sized site.
Read results at 30 days as leading indicators rather than verdicts. From Search Console, compare clicks, impressions, and average position on the target queries against the pre-publish baseline, and compare GA4 key events on the new and rewritten pages.
GA4's AI Assistant channel breaks out traffic from ChatGPT, Gemini, and Claude, and Search Console's Generative AI performance reports cover impressions and pages in AI Overviews and AI Mode, so the AI side reads separately. Date every reading, because an AI figure from one month isn't comparable to the next.
Repeat the organic analysis quarterly, or more often in a fast-moving industry, and run the AI citation checks monthly. Re-run off cycle after a core update, a product launch or removal, or a spike in a support theme.
A worked example on a real domain
The most complete published trace of this workflow is an agency's work on a UK insolvency practice, written up on Moz in 2022, with the caveat that the agency wrote it up itself. Three competitors had 38, 23, and 47 indexed articles on liquidation, while the client had six. That's a topic gap at cluster scale, visible before anyone opened a keyword tool.
The team chose "company liquidation" as a single cluster topic and ranked the subtopics inside it by monthly search volume. Our read of the selection logic is that a six-page site can't build depth in five places at once, and liquidation was the service tied directly to leads, which call tracking measured.
Comparing the six months before to the six months after, leads went from 95 to 460, clicks from 4,503 to 23,013, and average position from 33.4 to 23.6. The write-up also discloses that the team built 36 backlinks to the liquidation page, so the clustering can't claim the whole lift.
The write-up doesn't publish its candidate list, so here's how the Step 6 scoring would sort a plausible Missing tab for that domain, using our own illustrative 1–5 ratings rather than tool figures. Five subtopics come out as builds: company liquidation cost, how to liquidate a limited company, creditors' voluntary liquidation, insolvency practitioner near me, and liquidator fees. Each scores 240 or higher because it carries buying intent and sits on the service the client was tracking leads against, which earns a 5 on strategic fit. Compulsory liquidation and winding-up petition have as much demand, and they park at 108 and 72 because they lose on fit and winnability.
Using ChatGPT and AI visibility checks
ChatGPT speeds up the clustering and drafting steps and fabricates the measurement steps, so split the two. Without a live connection to a keyword tool, a search volume figure it produces is generated text, and so is a claim that a competitor ranks third. Use it to group a Missing export into topics and label each group's intent, or to compare the H2s of the top five pages against your outline. Take every number from the tools.
Checking whether AI answers cite you works differently on each engine. For ChatGPT, run 10 to 20 buying prompts for your category ("best [category] software for [use case]," "[competitor] alternatives"), and click Sources beneath the response if inline citations don't appear. Record whether the engine names your brand (a mention) and whether your URL appears (a citation), then note which competitor pages it cites instead. Perplexity shows citations by default, and Search Console's Generative AI reports cover Google AI Overviews without prompting.
Run these checks by engine and date them. An index built on three months of data found ChatGPT and Google AI Mode agreed on which brands to name 67% of the time but agreed on sources only 30% of the time.
Then look at what the engines do cite. A controlled study of 602 prompts and 21,143 citations found high-influence pages are longer, more modular, and more likely to contain definitions, numerical facts, comparisons, and procedural steps, and that Q&A formatting alone doesn't help.
Our scoring model for this side of the analysis covers four dimensions across ChatGPT, Claude, Perplexity, and Google AI Overviews:
- Presence: does the brand appear
- Reputation: how it's characterized
- Perception: sentiment and framing
- Influence: how much it shapes the category
CheckThat can supply a comparison set, covering 5,800+ brands, nearly 200 categories, and 2.6M+ AI responses, so your own prompt results have a baseline.
Content gap vs keyword gap analysis
A keyword gap analysis is one input to a content gap analysis, and the two get confused because the tools are named backwards. Ahrefs's tool is called Content Gap and returns keyword overlap, while Semrush's is called Keyword Gap and sits inside guidance that treats content gaps as the broader thing. Vendors all define keyword gap as keywords competitors rank for that you don't, and content gap analysis adds intent, quality, format, originality, and funnel coverage, none of which appear in a keyword export. Say which one you ran when you present the findings.
Where to start this week
Pull the 16-month Search Console export and mark every URL under 100 clicks in the last six months. That list is the first half of your build order. Then run the Missing report against three competitors and read the top 30 results pages by hand before anyone scores them.
After one cycle the workflow lives in a crawl file, a keyword export, a scoring sheet, a brief document, the CMS, and two analytics tools. If holding that together is the bottleneck, book a demo to see how the GrowthX platform runs the inventory, the opportunity list, the briefs, and the AI citation checks in one workspace.
