Back to Tools

Striking Distance Finder

Use cases

Finding quick wins for on-page optimisation Identifying keywords missing from page titles and H1s Prioritising content updates based on search volume

Filters keywords by configurable position range (default bounds 4 and 20, both exclusive, so positions 5-19 are kept) and minimum volume, then fetches live page content using trafilatura.

Extracts title, H1, and body copy via BeautifulSoup, normalises text (removes apostrophes/hyphens), and checks keyword presence.

Groups keywords by URL showing top 5 per page.

Streamlit App

Platform

Browser-based (no installation required)

Input

Keywords CSV with URL, volume, position

Output

CSV with page keywords and optimisation flags

Launch App View Source

Features

  • Live body copy extraction via trafilatura, title and H1 via requests/BeautifulSoup
  • Position sliders exclusive at both ends (defaults 4 and 20 keep positions 5-19)
  • Minimum search volume slider (default 50)
  • Case-insensitive substring matching after normalisation (apostrophes removed, hyphens to spaces)
  • Top 5 keywords per URL by volume with boolean presence flags
  • Drops a page entirely if any top keyword appears in title, H1 and copy
  • Encoding auto-detection via chardet (UTF-16 handled)

How to use

  1. 1 Upload your keyword CSV (Ahrefs/SEMrush/GSC export)
  2. 2 Map the keyword, URL, volume and position columns
  3. 3 Adjust the position sliders (exclusive at both ends) and minimum volume
  4. 4 Run analysis (fetches each unique URL live, two requests per URL)
  5. 5 Review pages with keywords missing from title/H1/body
  6. 6 Download CSV with presence flags for each on-page element

Frequently asked questions

What input file does it accept?
Any keyword export with keyword, URL, search volume and position columns; you map the columns after upload, so Ahrefs, SEMrush or GSC exports all work. File encoding is auto-detected (UTF-16 files are read as whitespace-delimited) and Ahrefs' '0-10' volume band is converted to 0.
Are positions 4 and 20 included with the default sliders?
No. The filter drops rows at or below the minimum and at or above the maximum, so the default settings of 4 and 20 actually keep positions 5 to 19. Widen each slider by one notch if you want the boundary positions included.
Why is the analysis slow, and why might it fail on the hosted app?
Every unique URL is fetched live, twice: once with trafilatura for the body copy and once with requests/BeautifulSoup for the title and H1, with no delay between requests. Sites that block the Streamlit Cloud server's IP return nothing, which triggers the 'try whitelisting or running this app locally' message; running the app locally usually fixes it.
How is 'keyword in title/H1/copy' decided?
Case-insensitive substring matching after normalisation (apostrophes removed, hyphens replaced with spaces). Because it is substring based, 'ring' counts as present inside 'monitoring', and a reworded phrase counts as missing even if every individual word is on the page.
Why did a page disappear from the results entirely?
If any single one of a page's top five keywords is found in the title, H1 and copy, the entire row for that page is dropped, even when the other four keywords are missing everywhere. A fully optimised top keyword can therefore hide the remaining opportunities on the same page.

Need something built for your business?

This tool started as bespoke client work. I build custom scripts, data pipelines, and full apps for SEO and product data problems that off-the-shelf tools don't solve.

Tell Me What You Need