Competitive Content Gap Analysis in an Afternoon
In short Traditional gap analysis finds keywords rivals rank for; the more useful AI-assisted version finds arguments rivals make that you cannot answer, which produces differentiated commissioning rather than catch-up posts.
Most content gap analysis answers the wrong question. You export a rival’s keywords from Semrush or Ahrefs, subtract your own, and get a list of terms they rank for and you don’t. Then you commission posts to match. Six weeks later you have a catch-up library that says what everyone else already says, slightly later and slightly worse.
The better version of AI content gap analysis asks a different thing: which arguments do your competitors make that you cannot answer? A keyword is a topic. An argument is a position, with a claim, a reason and usually a bit of evidence. If a rival says “you don’t need a CMS migration, you need a content model” and your site has nothing that agrees, disagrees or complicates that, you have a gap that no keyword tool will show you. It’s also the gap that produces commissions worth paying for.
This takes about four hours for a team of one to five people. Here is the afternoon.
Hour one: pick three rivals and pull the pages
Don’t boil the ocean. Choose three competitors: one direct rival, one aspirational one, one that ranks for your terms but isn’t really in your market (a trade publication works well). Using Screaming Frog (the free version crawls 500 URLs, which is plenty), crawl each blog or resource section and export the URL list. Then filter to pages that matter.
A rule that saved me time: in Ahrefs, Site Explorer, Organic pages, sort by traffic and take each rival’s top 40 pages. Three rivals gives 120 pages. If you only have Semrush, the Top Pages report does the same job.
You still want the traditional keyword gap as a sanity check, and it takes ten minutes. Run Content Gap in Ahrefs (or Keyword Gap in Semrush) with you against all three. Note the count, because it makes a useful contrast later. In a recent run for a UK B2B payroll software client, it returned 1,847 keywords. Filtering to volume of 100 or more and difficulty under 40 left 212. That is a perfectly reasonable backlog, and it is also exactly what every other team in that market is working from.
Hour two: extract the arguments
Now the AI part. Paste each page’s main text into Claude (or ChatGPT, if that is what your company licenses) and ask it to pull out claims, not topics. Do this one page at a time, or in batches of five if you use a long-context model. Batches of more than about ten drift into summary mode and lose the specific claims.
The prompt I use:
You are analysing a competitor article. Do not summarise it.
List every distinct argument it makes as a claim in one sentence,
in the form "X because Y". For each, give:
- the claim
- the reason offered
- evidence type: data, case study, expert quote, assertion only
- how confident the author sounds: hedged, plain, forceful
Quote the sentence the claim comes from, under 20 words.
Ignore introductions, definitions and calls to action.
The “assertion only” label is the useful bit. Rivals make many claims with no evidence behind them, and those are the cheapest to answer well.
For the payroll client, 120 pages produced 614 claims. That sounds like a lot but it is a CSV, so it’s manageable. Put it in a Google Sheet with columns for rival, URL, claim, reason, evidence type and tone.
Sample rows, trimmed:
| Rival | Claim | Evidence | Tone |
|---|---|---|---|
| Rival A | Small firms should run payroll in-house because outsourcing costs rise 8-12% a year | Assertion only | Forceful |
| Rival B | RTI penalties are mostly caused by late submission, not wrong figures | Data (HMRC figures) | Plain |
| Rival C | Auto-enrolment re-enrolment is the most ignored duty in SMEs | Assertion only | Hedged |
| Rival A | Spreadsheet payroll is fine under 10 staff | Assertion only | Forceful |
Hour three: cluster, then test yourself
Ask the model to cluster the 614 claims into themes, then to merge near-duplicates. We ended up with 58 distinct arguments across 9 themes. A person can scan 58 in twenty minutes. Check the clusters by eye, because models will sometimes merge “outsourcing is expensive” with “outsourcing is risky”, which are different arguments needing different answers.
Then comes the step most people skip: test your own site against each argument. Export your top 60 pages, run the same extraction, and for each of the 58 rival arguments ask:
Here is a competitor argument: [claim].
Here are the claims our site makes: [your claims list].
Classify our position as one of:
- ANSWERED: we make the same or a stronger argument
- CONTRADICTED: we argue the opposite, with reasons
- SILENT: nothing we've published addresses it
- THIN: we touch it but offer no reason or evidence
Give the closest matching claim from our list, or "none".
Don’t trust the labels blindly. Spot check ten. In our case the model got eight of ten right, and the two it missed were both marked SILENT where we had addressed the point in a PDF it couldn’t see. Fix those by hand.
The result for the client:
ANSWERED 14
CONTRADICTED 6
THIN 17
SILENT 21
Twenty-one silent arguments and 17 thin ones. Compare that with the 212 keywords. Thirty-eight commissions, each with a stance already implied, is a far more usable brief than 212 phrases.
Hour four: turn gaps into commissions
Not every silent argument deserves a post. Score each one on three things, one to five: how often rivals repeat it, how weak their evidence is, and how much your own team can say about it that they can’t. Multiply them. Anything over 60 goes forward.
Eleven arguments cleared the bar. The top one: “Spreadsheet payroll is fine under 10 staff”, made by two rivals, both assertion only. The client’s customer success lead had actual numbers on error rates from onboarding audits (roughly one in four spreadsheet payrolls they inherited had at least one wrong tax code). That is a contradiction with evidence, and no rival could write it.
So the commissioning brief isn’t “write about payroll spreadsheets”. It reads:
Working title: Spreadsheet payroll under 10 staff: what 140 onboarding audits found Argument we are making: It is not fine, and the failure is tax codes, not arithmetic. Rival claim we are answering: Rival A and Rival C, assertion only. Evidence: CS audit data, plus one named customer quote. Expert: Head of customer success, 30-minute interview.
Compare that with the keyword-gap brief for the same topic: “payroll spreadsheet template”, volume 1,300, difficulty 31. You could write it, and it would be fine. It would also be identical to the nine other templates on page one.
What goes wrong
A few honest warnings from running this several times.
Models flatter. If you ask “do we address this?” you’ll get too many ANSWERED labels, so keep the four-way classification and always demand the closest matching claim. If it can’t produce one, it’s SILENT.
Paywalled and JavaScript-rendered pages come back empty from a crawl, and the model will cheerfully invent claims from the title. Check that every extraction quotes real sentences.
Extraction quality varies by rival tone. Forceful writers are easy. Hedged, corporate ones produce vague claims that need a second pass.
And the method finds arguments, not truth. Some rival claims are wrong, which is the whole reason to answer them, but check before you contradict anyone in public. For regulated UK topics like HMRC, auto-enrolment or FCA rules, have someone qualified read the draft.
Making it repeatable
Keep the sheet. Re-run the crawl quarterly for the top 20 pages per rival and only extract from new or changed URLs; that is about ninety minutes once the prompts exist. Each time, the SILENT count should fall and the CONTRADICTED count should rise, which is a decent proxy for having a point of view.
If you want to see where this sits in a wider planning process, from audience research through to briefing and measurement, the AI-assisted content strategy and planning guide covers the surrounding steps. For the afternoon itself, all you need is three rivals, two prompts and a spreadsheet. Start with the crawl.