River
Y CombinatorBacked by Y Combinator

Marketing & GrowthFree

Content Gap Analysis From Competitors

Every gap keyword resolved to the page holding it, ranked by the links on the weakest result in the top ten, not by an average.

Start here

River's content gap review resolves every row in the export to the page actually holding the position, then reads the link profile of the weakest result in each top ten. That minimum is the number that decides whether you can enter, and no export carries it. Every discarded row is counted and named rather than silently dropped. What survives is labelled by what the work is: a page to write, a page you already own that needs retargeting, or one close enough that links alone would move it.

The templates that rank for this search stop at the export and then sort it by keyword difficulty. Difficulty is an average of the links across ten pages, so it describes the whole first page rather than the one result you would have to pass. Filter Harlowe Veterinary Software's export at difficulty 30 or below and you get 1,127 keywords, of which 1,031 have nothing in the top ten weak enough for that site to displace.

Built for content leads holding a gap export and a quarter's budget, in-house SEOs asked why the last twelve posts did nothing, and agency strategists scoping a retainer. Group the survivors with the keyword cluster map, price the shortlist in the SEO forecast, and read the internal linking audit first, since pages already sitting at eleven to thirty are usually the cheapest part of the gap. It runs in the marketing workspace beside all three.

Why keyword difficulty cannot see the tenth result

Difficulty scores are honest about what they are and get read as something else. Ahrefs states that it calculates the metric from a weighted average of the linking domains pointing at the top-ranking pages, with outliers removed. It adds that the score takes nothing else into account, and that you should study the ten results yourself. Entering the top ten does not require passing the average of ten pages. It requires passing the tenth one, which is frequently the weakest page in the set by a wide margin.

Harlowe Veterinary Software's export lists 8,412 keywords its three competitors rank for. Two rows in it make the case on their own. Vet clinic inventory management carries a difficulty of 62, and the ten pages ranking for it hold 412, 388, 210, 156, 98, 74, 41, 22, 9 and 3 referring domains. The mean is 141, the tenth page has 3, and a difficulty filter drops the keyword. Veterinary appointment reminder software scores 18, and its ten pages sit between 27 and 38 links, so there is nothing there to displace.

The threshold to compare that minimum against is on your own site, not in a vendor's index. Take every page you already have in the top ten, count the referring domains pointing at each, and read the seventy-fifth percentile. Harlowe has 47 such pages, a median of 5 links and a seventy-fifth percentile of 10, so a top-ten result holding 3 links is comfortably inside what the site has already managed. Ahrefs' page-level metric also counts internal links alongside external ones, which is why part of any gap closes without outreach.

How it works

  1. Send the exports

    The gap export from your tool, plus your own pages that already rank in the top ten.

  2. River reads each SERP

    Every surviving row resolved to the page holding it and the links on the weakest result.

  3. Read the shortlist

    A sheet of every row with its verdict, and a document of clusters in priority order.

  4. Argue with the threshold

    Move the percentile, change the volume floor, and watch the shortlist grow or shrink.

What you get

  • The referring domains on the weakest page in each top ten, beside the difficulty score
  • A reachability threshold measured from your own pages that already rank, not a vendor index
  • Every keyword labelled write a page, retarget one you own, or add links
  • Discards counted by reason, so competitor brand terms and dead volume stay visible
  • The ranking URL for every row, since the page in your way is not the domain
  • Survivors grouped into clusters with an effort estimate per cluster, not per keyword

Common questions

Why not just filter by keyword difficulty?

Because it answers a different question. The score is an average of the links across the whole first page, and entry is decided by the tenth result. On Harlowe's export a difficulty filter kept 1,127 keywords, 1,031 of which have no top-ten page weak enough to displace, and hid 222 that were reachable.

Isn't domain authority the right measure of a competitor?

Not for this. Ahrefs is explicit that its page metric compares pages to pages while the domain metric compares domains to domains, and that the two are not on the same scale. Across Harlowe's 2,050 candidates the site holding the weakest top-ten slot has a median rating of 68, and that actual page a median of 6 referring domains.

How much of a gap export is actually usable?

On this one, a quarter. Of 8,412 rows, 2,914 were the competitors' own brand and navigational terms, 1,806 sat under thirty searches a month, 1,240 were off-intent for a clinic software buyer, and 402 had a first page made of listings nobody could publish. Each bucket is counted rather than quietly dropped.

What if my site has never ranked in the top ten?

Then the threshold is unmeasurable and the run says so instead of borrowing one. The fallback is the referring-domain count of your strongest page, whatever position it holds, labelled as a substitute. A site with no top-ten history has an indexing or content problem first, which the technical SEO audit pack covers.

Does it need a paid Ahrefs or Semrush account?

It reads whatever export you have. Semrush describes Keyword Gap as a comparison across up to five domains with missing, weak and untapped labels, and those labels map onto the work categories directly. Where a column is absent, the row says which verdict could not be reached and why.

Which of the survivors should I do first?

The ones you already own. Of Harlowe's 318 reachable keywords, 103 have a page on the site that does not rank for them, which is a rewrite rather than a commission. Another 41 already sit between eleven and thirty, and 27 of those are on sections that already carry links from body copy.

How do I check the shortlist was right?

Rerun it next quarter against the same threshold. Each row either moved into the top ten or did not, and the ones that did not carry their own reason: the tenth result was replaced, the page was never written, or the links never arrived. Pricing the whole plan is the SEO forecast.

Content Gap Analysis From Competitors

Fill in the form and your workspace opens with the work already underway.