Back to Tools

Legacy Tool

This tool requires the old Universal Analytics (pre-GA4) data format. It may still work if you have historical UA exports, but is not compatible with GA4.

Underlinked High-Value Pages

Use cases

Prioritising internal linking for revenue impact Finding hidden gem pages that deserve more visibility Data-driven internal link building

Merges GSC internal links data with GA Universal Analytics landing page performance using pandas.

Keeps pages whose internal link count is at or below 10% of the maximum link count in the data (a share of the maximum, not a percentile of pages).

Uses glob for wildcard file matching (Analytics*.xlsx, *target*.csv) and urllib.parse for domain extraction.

Streamlit App

Platform

Browser-based (no installation required)

Input

GSC internal links CSV

GA Landing Pages Excel export (Dataset1 sheet)

Files must match patterns: Analytics*.xlsx and *target*.csv

Output

CSV with Target page, Internal links, Sessions, Users, Transactions, Goals, Goal Conversion Rate, filtered to pages at or below 10% of the maximum internal link count. Rows with 0 transactions are removed before filtering.

Launch App View Source

Features

  • Keeps pages at or below 10% of the maximum internal link count (configurable divisor)
  • Glob wildcard file matching (Analytics*.xlsx, *target*.csv)
  • Domain prefix rebuilt from the GSC export and joined onto GA landing pages
  • Drops pages with zero transactions
  • Results sorted by fewest internal links, then most transactions

How to use

  1. 1 Export "Top linked pages internally" from GSC as CSV
  2. 2 Export Landing Pages from GA (UA) as Excel with the Dataset1 sheet
  3. 3 Place both exports in the same folder (Analytics*.xlsx and *target*.csv)
  4. 4 Set the keep divisor if needed (default 10 = 10% of the max link count)
  5. 5 Run to merge and surface weakly linked, converting pages

Frequently asked questions

How is 'low internal links' actually calculated?
It is a threshold based on the most-linked page, not a percentile. The script takes the maximum Internal links value in your GSC export, divides it by the keep setting (default 10), and keeps pages at or below that number. So if your most-linked page has 5,000 internal links, everything with 500 links or fewer is kept. On sites where the homepage has a huge link count this can keep far more than 10% of pages.
What are the exact file requirements?
Both exports go in the same folder and are found by wildcard: the GA landing pages export must match Analytics*.xlsx and contain a sheet named Dataset1, and the GSC 'Top linked pages internally' export must match *target*.csv with Target page and Internal links columns. The GA file must also contain the UA columns % New Sessions, New Users, Bounce Rate, Pages/Session, Avg. Session Duration and E-commerce Conversion Rate, because the script deletes them by name and errors if they are missing.
How are the two reports joined when GA uses relative paths?
The script reads the first Target page URL in the GSC export, extracts its scheme and domain, and prefixes that onto every GA Landing Page value before an inner join. This assumes all GA landing pages belong to that one domain and protocol; pages that only appear in one report are dropped by the inner join.
Why are some converting pages missing from the output?
Rows with zero transactions are dropped, so pages that convert via goals but not e-commerce transactions never appear. Pages above the internal links threshold are also removed, and anything that failed the GA-to-GSC URL join is lost. Results are sorted by fewest internal links first, then most transactions.

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