All posts
Keyword ResearchCompetitor AnalysisSEO

Keyword Gap Analysis: The Part Everyone Skips

The Reachavo Team8 min read

You ran the gap report. It came back with four thousand keywords your competitor ranks for and you don’t. You sorted by search volume, looked at it for a while, exported the CSV, and never opened the file again.

That is the normal outcome, and it is not a discipline problem. Nearly every guide to keyword gap analysis ends in the same place: pick two domains, click the button, export the list. That is the easy ten percent of the job. The other ninety is deciding which of those four thousand rows are real, and the guides stay quiet about it because it is the part that takes judgement rather than a screenshot.

So this post is only that part. Four filters, applied in a specific order, that take a four-figure export down to something like ten keywords you can hand to a writer. Then the false gaps: rows that look like opportunities and aren’t, which is most of what floats to the top of an unfiltered list.

What a gap report is actually telling you

A keyword gap analysis is a set difference and nothing more. Take every keyword where their domain appears in the top 100, subtract every keyword where yours does, and what remains is “they rank, you don’t”.

That is a fact about two ranking sets. It is not a fact about opportunity. The report has no opinion on whether you could plausibly rank, whether the traffic is worth having, or whether there is a click waiting at the end of it. Every one of those judgements is yours, and the reason the export sits unopened is that nobody warned you they were required.

Order the filters cheapest-first, by which one kills the most rows for the least effort. Intent is a bulk delete you can do on a whole spreadsheet at once. Checking the actual search results page is minutes per keyword, so it goes last, on the handful that survived.

Filter 1: intent you can credibly serve

This is the most-skipped filter and the one that cuts deepest. Two questions per row. What does the person typing this want? And can you be the thing that gives it to them?

Take “free invoice template”. The searcher wants a file. If you have no intention of publishing a template, a blog post about invoicing best practice will lose to a download page forever, no matter how good it is. That row is not a keyword gap. It is a product decision wearing a keyword’s clothes, and filing it in a content backlog is how it wastes six months of somebody’s time.

The intent labels most tools attach (informational, commercial, transactional, navigational) are a reasonable first pass, but they are a classification, not ground truth. The check that never lies is the results page. Open it and look at the format of what ranks. If the top five are all product category pages and you had a listicle in mind, the SERP has already told you what wins. You either match the format or you drop the row.

This is the same instinct behind Google’s guidance on helpful, people-first content, which asks whether your page leaves the reader feeling they’ve had their question answered. A page built to occupy a keyword you can’t serve fails that test by construction.

The cut:delete every keyword whose winning format you have no intention of producing this quarter. On a typical export that’s most of the file.

Filter 2: striking-distance overlap, not just the gap

Everyone starts with “they rank, you don’t”, because that is what the phrase gap suggests. But the fastest wins are usually in the other view: the keywords where you bothrank, they’re in the top ten, and you’re somewhere in 11–50.

The difference is that you already have a page. You have already proved the domain can be considered relevant for the query, which is the expensive part. Closing a gap means commissioning, writing, publishing and waiting; closing an overlap often means improving one URL you already own.

In a spreadsheet this is one filter: keep rows where their position is 10 or better and yours is between 11 and 50. It is worth doing this before you touch the true gap list, because the answer usually changes what you build first.

One warning before you start editing. If the page that sits at 14 is already ranking well for a dozen other terms, dragging it toward the page-two keyword can cost you more than it wins. Check what else that URL earns before you rewrite its title tag.

Filter 3: traffic value, read sceptically

Now sort what survived by traffic value rather than volume. Roughly: how many searches, times a realistic click share at a position you could plausibly hold, times what a visit from that query is worth to you. Cost per click is a rough proxy for the last term, since it is what somebody else is willing to pay for the same visitor.

Two things to hold in mind while you do it.

Volume figures are estimates with a wide collar. They descend from Google’s own keyword data, and Google is upfront about the shape of it: Keyword Planner reports an average number of monthly searches over a timeframe, with the volume statistics rounded. Treat 2,400 and 2,900 as the same number, because for planning purposes they are.

An annual average hides a season.A keyword that gets almost all of its searches in one month averages out to something unremarkable across twelve. If the term smells seasonal, look at the monthly trend before you decide it’s small.

Which is why traffic value is a sorting tool and never a forecast. Ranking a shortlist by an estimate is legitimate. Putting the estimate in a business case as projected traffic is not.

Filter 4: would position 3 even get a click?

The last filter is the only one that requires you to load the search results page yourself, which is exactly why it gets skipped.

Every row in a gap report carries a silent assumption: that a ranking converts into a visit. Sometimes the page is built so that it doesn’t. If the query is fully answered in a featured snippet, or the top of the page is a block of product listings, a local pack, an AI Overview and a stack of People Also Ask, then the organic result you’d be competing for sits a long scroll beneath the answer. Google catalogues these building blocks in its visual elements gallery, and it is worth knowing what they look like before you commission anything.

You also have less control here than the industry implies. Asked how to mark a page as a featured snippet, Google’s documentation answers, in full, “You can’t” — its systems decide. The same goes for the AI surfaces, where the eligibility bar turns out to be ordinary Search eligibility and little else, as we covered in the post on ranking in AI Overviews. You cannot opt into the feature and you cannot opt out of competing underneath it, so the only move available is to price it in before you spend the money.

The cut: open the top fifteen or twenty survivors in a browser. Anything whose answer is given completely above the fold gets demoted rather than deleted, because a demoted keyword is still worth having if the page earns its place for other terms.

The four false gaps

Some rows survive all four filters and are still not opportunities. These four account for most of them, and all four cluster near the top of a volume-sorted list, which is why an unfiltered export feels so promising and reads so badly.

The false gapWhy it isn’t oneHow to spot it
Their brand termsYou are not going to outrank a company for its own name, and the intent behind the query is to reach them, not to discover you.Their brand string in the keyword. Sort alphabetically and delete the block in one go.
The term their whole domain is aboutIf they sell payroll software and you sell one payroll feature, the head term isn’t a page you can write. It’s a company you’d have to be.Their ranking URL is the homepage or a top-level category, and they hold several of the top positions on the query.
Flattering position data“They rank, you don’t” includes position 78. A huge-volume keyword where they sit on page eight is not evidence anybody can win it.Read their position column, not just the volume column. This is what filtering by volume alone hides.
A format you can’t produceThey rank because of a free tool, a proprietary data set or forty thousand pages of user-generated content. The keyword is real; the route to it is not an article.Open their ranking URL. If it isn’t a page type you ship, the keyword belongs on a product roadmap, not a content calendar.

Do it by hand once

None of this needs software. If you can export two ranking sets you can run the whole method in a spreadsheet, and doing it by hand once is the best way to understand what the software is doing on your behalf later.

  1. Export their organic keywords and yours, for the same country.
  2. Look their keyword list up against yours. A blank on your side is a gap row; a match with both positions is an overlap row.
  3. Add columns for intent, their position, your position, their ranking URL, volume, CPC and difficulty. You will fill the judgement columns only for the rows that survive.
  4. Run filters 1 and 2 to get from thousands of rows to dozens.
  5. Sort what’s left by volume multiplied by CPC.
  6. Open the top twenty results pages in a browser and apply filter 4.
  7. Group the survivors into clusters. One page per intent, not one page per keyword. Our free keyword clustering tool does the first pass in the browser if you don’t want to do it by hand.

A tool mostly compresses steps one and two into a single query and gives you the filters as toggles. That is what Reachavo’s keyword gapdoes: one run diffs the two domains and returns each keyword with both positions, both ranking URLs, volume, CPC, difficulty and an intent label, with a striking-distance view for the both-rank case and a one-click push of whatever you’ve filtered down to into the rank tracker. What it does not do is filter 4. The response carries no SERP features, so opening the results pages in a browser is still your job, and any tool that claims to automate that judgement is selling you a guess about a page it didn’t look at.

Turning ten rows into a plan

A filtered list is still not a content plan. Three things convert it.

Cluster before you brief. Half a dozen surviving keywords often describe one page. Writing six pages for them creates six thin articles that compete with each other, which is a self-inflicted version of the problem in filter 2.

Write the format into the brief.You learned it in filter 1 by looking at what ranks. A brief that says “comparison table with pricing, then FAQ” is worth five that say “write about X”.

Baseline before you publish.Record where you rank for the target keyword today, even if the answer is nowhere, then check again after eight to twelve weeks. Without the before, you can’t tell a page that failed from a page that hasn’t landed yet, and you will end up rewriting things that were working.

The short version

Keyword gap analysis is not a report, it’s a filtering exercise that happens to start with a report. Cut everything whose winning format you won’t produce. Look at the overlap before the gap, because a page at 14 is closer than a page that doesn’t exist. Sort by traffic value while remembering the volume figures are rounded averages. Then open the actual search results and check a click still exists.

Ten keywords you have genuinely thought about will do more for you than four thousand you exported. If you want the diff itself handled so you can spend your time on the judgement calls, run a gap analysis in Reachavo against your closest competitor and see how far four filters get you.

The tools behind this

Every one of these runs on the same 7-day free trial, from $19/mo.

Stop guessing. Start measuring.

Keyword gaps, backlinks, rank tracking and AI visibility — the whole research stack, from $19/mo.

7-day free trial Cancel anytime