Back to Tools

Legacy Tool

This tool was built for an older workflow and may not be actively maintained. It still works but newer alternatives may exist.

Internal Search to Landing Page Mapper

Use cases

Finding existing category pages that match popular site searches Identifying gaps where no landing page exists for high-volume searches Prioritising internal search terms by unique search volume Automating the manual process of mapping searches to URLs

Takes the Google Analytics site search terms report and matches search terms to indexable pages from a Screaming Frog crawl using PolyFuzz TF-IDF similarity scoring against H1 tags.

Filters to multi-word searches (2+ words), drops non-indexable pages, and outputs exact matches (similarity 1.0), partial matches (sorted by similarity descending), and a combined file.

Jupyter Notebook Crawl Data

Platform

Jupyter Notebook (requires Python environment)

Input

Google Analytics site search terms Excel export (Behaviour > Site Search > Search Terms)

Screaming Frog internal_html.csv crawl file (must include Address, H1-1, and Indexability columns)

Output

Three CSVs: Exact Matches (similarity 1.0), Partial Matches (sorted by similarity and search volume), and All Matches with search term, matched H1, similarity score, matched URL, and GA metrics.

View Source

Features

  • PolyFuzz TF-IDF fuzzy matching of search terms against page H1s
  • Filters to 2+ word search terms only
  • Drops non-indexable pages from Screaming Frog crawl
  • Splits output into exact matches (similarity 1.0) and partial matches
  • Output columns include search term, matched H1, similarity, matched URL, and GA search metrics
  • Deduplicates matched search terms

How to use

  1. 1 Upload the Screaming Frog internal_html.csv crawl file
  2. 2 Upload the GA site search terms Excel export
  3. 3 Run cells to clean data, filter non-indexable pages and single-word searches
  4. 4 PolyFuzz TF-IDF matching runs against the H1 column
  5. 5 Download three CSVs: Exact Matches, Partial Matches, and All Matches

Frequently asked questions

Why does the Google Analytics upload fail?
The notebook reads the GA file with pd.read_excel and a hardcoded sheet name of 'Dataset1', which is how Universal Analytics named the sheet in its Excel exports. A CSV export, or an Excel file whose data sheet is named anything else, will fail. It also expects the exact UA column names: Search Term, Total Unique Searches, Results Page Views/Search, % Search Exits, % Search Refinements, Time After Search and Avg. Search Depth.
Does it work with GA4 data?
Not out of the box. It was built around the Universal Analytics Behaviour > Site Search > Search Terms report, which no longer exists in GA4. To use GA4 search term data you would need to export it yourself, save it as an Excel file with a sheet named Dataset1, and rename your columns to the UA names the notebook expects.
Why are some search terms missing from the output?
Single-word searches are filtered out before matching (only terms with 2 or more words are kept), duplicate search terms are aggregated into one row, and after matching only the single best H1 match per term survives, with duplicates dropped. PolyFuzz also returns one best match per term, so a search term never maps to multiple pages.
What happens if several pages share the same H1?
Matching is done purely on the H1 text, and the crawl data is merged back by H1. When more than one URL has the same H1, the merge produces multiple candidate rows and the duplicate-dropping step keeps whichever comes first, so the URL chosen among the duplicates is effectively arbitrary. Deduplicate H1s in your crawl if precise URL selection matters.
What exactly must the Screaming Frog file contain?
The notebook loads only three columns, by exact name: Address, H1-1 and Indexability, from internal_html.csv. If any of them is missing the import fails. Rows marked Non-Indexable are dropped before matching, as are pages with a blank H1-1, so pages without an H1 can never be matched.

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