On this page
In April 2022 I walked on stage at BrightonSEO with a slightly nervous promise: that you don’t need to be a developer to use machine learning in an internal linking audit, and that small ML wins add up. This is the write-up of that talk, the full argument and framework, updated with what I’d tell the same room in 2026.
About this talk
- Talk: How to Implement Machine Learning in Your Internal Linking Audit
- Event: BrightonSEO, Spring 2022
- City: Brighton, UK
- Date: April 2022
- Video: watch the recording on YouTube
- Slides: download the deck (PDF) or view it on SlideShare
This post covers:
- the promise the whole talk rested on, and why I still believe it
- why internal linking deserves a proper audit (and what it should aim to do)
- my six-part framework: why, analyse, cluster, discover, link, deliver
- where machine learning genuinely helps at each step, and where a crawl and a spreadsheet are enough
- what has changed since 2022, and what I’d say differently on that stage today
The promise: small ML wins compound
I opened the talk with a disclaimer, because the topic invited one. I was an SEO and data science manager at an agency, a content creator, and (in my own words on the slide) growth- and efficiency-obsessed. I was not a Python developer, not a machine learning expert, and definitely not a guru. That was the point. If I could stand on the BrightonSEO stage and talk about ML in internal linking, anyone in the audience could run the scripts I was about to show.
My goal at the time was simple: improve the quality of what I delivered to clients. The challenge was just as simple: time. There was never enough of it to research, test and implement the new things coming out of the industry. The opportunity I saw was business process automation, and machine learning became my ally in it.
So I promised no end-to-end, custom-built, ground-breaking technology. Only a tested claim and a simple promise:

ML-enabled incremental improvements can have a compounding effect on your SEO impact.
Lazarina Stoy, BrightonSEO 2022
Four years on, I’d keep that sentence word for word. What’s changed is the size of the increments. In 2022, the ML part of an internal link audit meant stitching together an LDA tutorial, a no-code web app and a Google Sheets template. In 2026, embeddings, Screaming Frog’s semantic features and LLMs mean each increment is bigger and cheaper. The compounding logic is the same.

1. Why: internal links are the part of SEO you control
I started with a quick tour of the relevant algorithm history, because it explains why links and topics belong in the same conversation.
- PageRank, Google’s first algorithm, relied (mostly) on the quality and quantity of links.
- RankBrain (2015) shifted the focus towards intent and topic comprehension: things, not strings.
- MUM (announced 2021) was about surfacing subtopics and semantic relationships, across formats.
Links are still crucial for discovery. But, and this is where I asked anyone hoping internal links would rescue weak content to stop right there: content is king. Without good content, context becomes meaningless. If the quality is there, context (or otherwise, links) becomes the vessel to push the content forward.
Was this still relevant in 2022? I did a very quick term frequency analysis of David Bain’s SEO in 2022 book, where 66 experts (me included) shared their priorities for the year. Internal links came up 48 times. Backlinks came up 17 times. Not a scientific study, but a decent signal of where practitioners thought the leverage was.
And in my opinion, it’s all about what you can control. You have access to the CMS. An internal linking initiative is quick and cheap to implement compared with a backlink or digital PR campaign. Aleyda Solis summed up the other side of it in a 2020 tweet I put on the slide: in her case, the most high-impact but often overlooked technical SEO issue she saw again and again was poor internal linking of critical pages.
The number I quoted came from InLinks: in a study of 5,112 projects and 60,259 target pages, they found that 82% of internal linking opportunities were missed. Dixon Jones talked it through on Majestic’s podcast. Worth knowing how it was counted: an “opportunity” is a paragraph that mentions a page’s target entity but doesn’t link to it, as detected by the InLinks tool itself, so read it as a vendor’s measure of the gap rather than a law of nature. The direction of travel matched everything I was seeing in audits.
So what should an internal linking strategy aim to do? Four things:

- Establish topic authority by linking informational pages to each other based on similarity and topical relevance, using the key terms that frequently occur in the topic cluster.
- Boost money-making pages by linking from informational pages to the best-converting page in each cluster, ideally with the terms users search for that page (your top Search Console queries are a good start). That creates a hierarchy where the page you emphasise is the best page for users and for the business.
- Enrich search intent: give visitors different perspectives on a topic, problem or solution while they’re on your site, so they don’t have to bounce back to Google with a new query. Move them from low- to high-intent pages.
- Build inter-cluster (subtopic) relationships by linking pages that genuinely belong to more than one cluster. Entity recognition and topic modelling are how you find them, which is where ML comes in.
And who doesn’t need the known side effects: a better structure, improved indexing, better navigation and UX, more keywords ranked, more traffic, better click-through and engagement. A note of honesty here: the original version of this post leaned on a single case study’s CTR and traffic chart to sell those outcomes. I couldn’t trace where it came from, so it’s gone. The outcomes are real; how big they are for your site is something you measure, which is the whole point of part 6.
2. Analyse: what an internal link audit should assess
I split my audits into five areas. For each one: what to look at, and what it can affect.

| Area | What to include | What it can affect |
|---|---|---|
| Link frequency | Inlinks and unique inlinks per page, orphan pages | Crawling, page discovery |
| Link quality | Link placement, the traffic the linking page sends, added link sections (related posts, breadcrumbs) | Engagement, comprehension |
| Anchor text | Type (branded, non-branded, mixed, exact match), length | Engagement, comprehension |
| Hierarchy | Top (most linked) pages, presence of topics, tags or categories, crawl depth | Engagement and UX, crawling |
| Mistakes | Broken links, nofollowed internal links, UTM parameters on internal links | Crawling, indexing, traffic data |
A few of these deserve more than a table row.
Link frequency and orphans
The number of internal links pointing to a page creates a hidden hierarchy: you’re telling crawlers which pages matter most, whether you meant to or not. Look at the average inlinks and unique inlinks per page, and at an internal PageRank-style score if your crawler gives you one (Oncrawl’s Inrank, Screaming Frog’s Link Score). Orphan pages, with no internal links at all, sit idle. Google may still find them through your sitemap or external links, but your own site gives it no signal about how they fit in. On bigger sites, the gap between what you think is on Google, what you link to and what Google has actually discovered can be huge.
Link quality: placement, context and set-up
A link in the body copy, surrounded by relevant text, is a different signal from a link in a footer. And the technical set-up matters: I see intended internal links built as buttons all the time. Google can only reliably follow links that are <a> elements with an href, and John Mueller has said it doesn’t click buttons. If a link has to look like a button, use a normal HTML link and style it with CSS. Since Screaming Frog version 24 (May 2026) there’s a Pages With Uncrawlable Internal Outlinks filter that flags exactly these (span or div “links”, onclick handlers, JavaScript navigation), so this check is now a crawl setting rather than a manual hunt.
Anchor text
Look at the mix: branded versus non-branded, targeted keywords, exact matches, generic “click here” anchors. Variety helps both crawlers and people understand where a link goes. Longer, descriptive anchors give more context. Google’s own wording is a good yardstick: good anchor text is “descriptive, reasonably concise, and relevant” to both pages (link best practices).
Hierarchy and depth
Report on your most linked pages and check they’re the pages that matter to the business. Keep important content within roughly one to four clicks of the homepage (enterprise sites will vary, but the principle holds). Breadcrumbs give users a way back up the hierarchy, and breadcrumb structured data helps Google understand where a page sits.
Mistakes
Broken internal links are bad hygiene and a bad experience, and Google’s Web Page Decay patent describes treating pages with a relatively large number of dead links as stale. Nofollow on internal links sends a mixed signal about your own pages: Matt Cutts’ answer, years ago, was a plain no, and while Google has treated nofollow as a hint rather than a directive since 2020, that doesn’t change the advice. UTM parameters on internal links muddy your analytics. Fix all three before you do anything clever.
Where machine learning comes in (and where it doesn’t)
Here’s the line I most wanted the audience to remember: most of this can be identified with a quick crawl and a clever Data Studio template. You don’t need machine learning for the table above. But if you want to dig deep into how your site is structured, ML helps you do three things a crawl can’t:
- Classify your anchor text at scale: n-gram analysis with Greg Bernhardt’s script and Streamlit app, or custom labels (product category, branded or not) with Danny Richman’s GPT-3 Google Sheets template. Both are genuinely beginner-friendly.
- Identify the entities your content talks about, with Google’s Natural Language API or AWS Comprehend, so you know what your site is actually about (and what it isn’t).
- Assess the relationships between those entities, with a knowledge graph tool such as Neo4j or a graph you build yourself, so you can see which pages should be connected.
More insights lead to better recommendations. The aim is to see your content and links the way search engines see them, so you understand how to improve them.
Since I gave this talk: classification is the step that has changed most. In 2022, “use GPT-3 to label your anchors” was a novelty. Today any current LLM can do it, and so can Screaming Frog’s AI integrations. My caveat hasn’t changed, though: for labelling that has to be consistent and auditable, a transparent rule-based classifier or a purpose-built model is often the better choice than a blanket LLM. The free MLforSEO notebook uses simple rules for exactly that reason.
3. Cluster: topic models were made for us
SEOs usually draw content clusters as a hub and spokes: a pillar page, cluster content around it, and hyperlinks connecting everything so PageRank and context flow between related pages. In machine learning, the equivalent is called topic modelling, and it’s a little bit different. The fundamentals are the same. The old way was to present a page as a standalone page and rely on backlinks to signal its importance. The new way is to put the page in the context of the other content on your site.
I find the origin story of topic modelling genuinely motivating, so I told it on stage. David Blei, one of the authors of LDA, framed it as three problems and three solutions in his Introduction to Probabilistic Topic Models:
- As our collective knowledge grows, finding information gets harder. So we need computational tools that help organise, search and understand vast amounts of it.
- Systems based on queries and links are good, but limiting. So we need systems that organise documents by themes: topics and subtopics.
- We can’t zoom in and out of the topics we care about or see the patterns in them. So we need models that assume each document contains several topics.
Read that again as an SEO. Organising documents by topic, beyond queries and links, so you can see the patterns in a large body of text. Topic modelling is pattern recognition in large text-based corpora, and it was made for us.
A quick history, because I got it wrong on the slide in 2022 (I had LDA before LSA). The right order: latent semantic analysis (LSA) came first, around 1990, using linear algebra to group words that appear in similar contexts, which is what brought synonyms into the picture. Probabilistic LSA followed in 1999, and LDA in 2003 put topic modelling on a probabilistic footing that scaled. Hybrid models followed over the next decade, and from around 2017 deep learning arrived: embeddings, then transformer-based approaches like BERTopic. But the problem we professionals faced remained the same. We weren’t using any of it. So why not try?
The no-code route I showed on stage
For anyone who didn’t want to code, I recorded a step-by-step video of topic modelling with jsLDA, a free, browser-based LDA app originally built at Cornell (it still works). Crawl and export the content of your site, upload it, fine-tune the model, download the files, and build them into your deliverable.

You end up with topic-to-topic co-occurrence (which topics appear together on your site, and which never do), each page’s probability of belonging to each topic, and the data to visualise the topics and their top terms. I made a Google Sheets template for organising the exports, and the deeper theory is in my topic modelling guide.
Then I asked the room to pause and look at what they’d achieved. Less than 30 minutes of work. A baseline overview of the main topic clusters on the site and how they relate. And something new tested, risk-free and code-free, which means scrutinising the output and telling your client how you improved on it, or that it was good enough. Congrats.
Since I gave this talk: embeddings have replaced LDA as my default. LDA counts words, so two pages about “internal linking” and “interlinking” can land in different topics, and short pages confuse it. An embedding model turns each page into a vector that captures its meaning, so similar pages end up close together whatever words they use. I still reach for LDA when I want a fully transparent, word-level view, or a quick baseline. For the hands-on version, with clustering into hubs and pillar-page candidates, see my 7 ways to automate internal linking with AI on MLforSEO.
4. Discover: find the links you’re missing
Once you know your topics, you can look for pages that should be linked and aren’t. In 2022 I brought fuzzy matching into the conversation: a quick and dirty way of calculating the similarity between two strings.

The process: crawl and model your content, decide what you’re comparing (titles, URLs, paragraphs), run a simple script to score similarity, then check whether the page is already linked and whether the output is any good. Would you have thought to link these two pages without the algorithm? The deliverable is a from/to list with a similarity score and a column saying whether the link already exists, which you get by joining a crawl of your current inlinks.
Since I gave this talk: for comparing whole pages, semantic similarity has overtaken fuzzy matching, because fuzzy matching compares characters, not meaning. Screaming Frog added semantic similarity in version 22 (June 2025): connect an AI provider, turn on embeddings, and you get semantically similar pages, low-relevance content and a content cluster diagram that can show your existing inlinks within each cluster. One caveat: its default “similar” threshold is 0.95, which is tuned for finding near-duplicates, so lower it when you’re hunting for link opportunities. Fuzzy matching is still the right tool for string-level jobs: matching keyword variations to anchor text, spotting near-identical titles, mapping old URLs to new ones.
Cover your bases
Contextual links aren’t the only links. Before you go looking for clever opportunities, check the basics:
- related-article and most-popular sections, depending on what your CMS allows
- breadcrumb navigation, with breadcrumb structured data
- a footer and footer navigation that reflect your information architecture, intent and content types
On footers, I showed a SearchPilot test where expanding a home page footer from 30 to over 100 category links lifted organic traffic by 10% on desktop (at 95% confidence) and 5% on mobile (at 90% confidence). SearchPilot’s own caveat is the important bit: it is not a call to pack your footer with links. Large footers were normal in that customer’s industry. The lesson is to experiment with the number of links until you find the sweet spot for your site.
And then my pet peeve: read more buttons. Say no to them. “Read more” and “click here” help nobody except the developer implementing them. Replace them with anchor text that tells people where the link goes.
5. Link: find where to place the links, at any scale
Knowing which pages to link is half the job. The other half is finding where on the site the anchor text you want already exists. I gave three options, by size:
- Small sites: Screaming Frog’s custom search (Configuration > Custom > Custom Search). Add a phrase, crawl, and it lists every page that contains it. Since version 21 you can bulk upload your phrases.
- Medium sites: my free Internal Link Opportunities Quick-find Google Sheets template: paste in your keywords and page content and it shows where each keyword already appears and whether the page links to the target.
- Really big sites: the same logic in BigQuery.


The logic is the same in all three: find, quickly and at scale, the pages that contain the anchor text you want to link from. And don’t forget what you learned in the analysis. Search for intent-based keyword variations, not just one phrase. Search for different anchor types (branded, non-branded, mixed). Incorporate entity-based linking. And think about how each link boosts money-making pages.

This model is the bit I’d underline. Informational pages link to each other within the cluster and up to the high-intent pages and the pillar. High-intent pages link to the pillar and to each other. The pillar, ideally the page with the best conversion rate, receives links from everywhere in its cluster. That’s a structure built for conversions, not just crawling.
Since I gave this talk: this step is where automation has moved furthest. Passage-level embeddings can find the best paragraph for a link, an LLM can propose anchor text from that paragraph, and a script can apply the links you approve. I’ve written up the approaches, the guardrails I use so an LLM doesn’t rewrite your copy or stuff anchors, and the code, in 7 ways to automate internal linking with AI.
6. Deliver: build it, measure it, learn from it

Your internal link audit deliverable should include:
- The analysis, in a format that allows benchmarking: typically a Data Studio dashboard or a Google Sheets template you can compare before and after.
- The topic models: once you’ve finalised the clusters, turn them into segments in Google Analytics, Search Console and Data Studio, so you can track traffic and rankings per topic after implementation.
- The link opportunities: the recommended links and anchor text, plus the additional strategies the client can use (related posts, breadcrumbs, footer).
- Prioritisation and budget: how the links get implemented, who helps, the timeline, and how you’ll track the effect.
When resources are limited, prioritise by subtopic popularity, business importance, search volume or the client’s implementation budget, or combine them into quick wins. Pages that only ever receive generic anchors, and pages with no contextual inlinks at all, are usually the quickest.
What to measure
Your reporting needs two things: benchmarking (every audit metric from part 2, before and after) and growth metrics (the outcomes you expect). For growth, track three pillars:

- Traffic: quicker indexing, pages indexed and discovered, organic traffic, user flow between clusters.
- Engagement: CTR, clicks, interactions, time on page.
- Queries: the number and length of ranking queries, and visibility, engagement and rankings split per topic cluster.
In Data Studio, custom dimensions let you group pages and queries by topic cluster, so you can see whether the pages you linked, and the queries you used as anchors, are moving. I’ve written up the formulas for that on Data Studio for Marketers. Since I gave this talk, Universal Analytics is gone, so the cluster segments live in GA4 Explorations, and the path exploration report is where you check whether people actually move from informational pages to high-intent ones. Engagement rate and average engagement time have replaced bounce rate and session duration.
The huge caveat
Then came the slide I care about most. As Will Critchlow of SearchPilot has explained, measuring the effect of internal linking is really hard, and our intuition about link structures is actually pretty poor.
Failing is part of the process.
Lazarina Stoy, BrightonSEO 2022
So test different internal linking strategies. Run experiments frequently. Report on them and measure their effectiveness. Document what works for your site, your client, and your industry and niche. SearchPilot’s lessons from years of internal link tests include results nobody predicted, and they measure both sides of every change: the pages that gain links pointing out and the pages that receive them. Testing, experiments and learning: those three are the way to make sure your internal linking strategy is actually helping.
What I’d say differently on that stage today
The framework has aged well. I’d still structure an audit as why, analyse, cluster, discover, link, deliver. But if BrightonSEO invited me back to give the same talk, I’d change four things.
- Embeddings first. I’d replace the LDA-plus-fuzzy-matching pipeline with sentence embeddings for clustering and finding related pages. It’s faster, more accurate and, honestly, easier to explain.
- Automation, with a human holding the pen. LLMs can now draft anchor text and agents can run a crawl from a chat window (Screaming Frog shipped an MCP server in version 24). That’s brilliant for the finding. The deciding, whether a link genuinely helps the person reading that paragraph, is still ours. I’d spend a whole slide on guardrails.
- Tests, not anecdotes. I’d show fewer before-and-after charts and more controlled tests, and tell the room to split comparable pages into test and control groups before adding links.
- The same promise. Small, ML-enabled improvements, done consistently, compound. That part stays.
If you want to build these workflows yourself, the Introduction to Machine Learning for SEO course on the MLforSEO Academy teaches the three ML tasks behind this audit (clustering, classification and entity extraction) on your own data, with templates and notebooks. And the free notebook and automation script from the MLforSEO code hub run the audit, the clustering and the link suggestions for you.
Frequently asked questions
What is an internal link audit?
A review of how the pages on your site link to each other: how many links each page gets, from where, with what anchor text, how deep pages sit, and what’s broken. It ends with recommendations for the links to add, change or remove, and a plan to measure the result.
Do I need machine learning to audit internal links?
No. Most of the audit (link counts, orphans, anchor types, crawl depth, broken and nofollowed links) comes from a crawl and a spreadsheet or Data Studio template. Machine learning helps with the parts a crawl can’t do: grouping pages into topics, classifying anchors at scale, identifying entities and finding similar pages that aren’t linked yet.
Is LDA still useful for topic clustering in SEO?
It’s useful as a transparent, word-based baseline and for teaching how topic models work. For most sites today, sentence embeddings group pages by meaning more accurately, especially short pages or pages that use different words for the same thing.
Can AI do my internal linking for me?
It can do the finding and the drafting: shortlisting similar pages, picking the best paragraph and proposing anchor text. It shouldn’t do the deciding unsupervised. Keep a human approval step, use guardrails on anchor text, and test the impact. I cover how in 7 ways to automate internal linking with AI.
How do I measure whether internal links worked?
Benchmark your audit metrics before you change anything, then track traffic, engagement and ranking queries per topic cluster. Where you can, add links to a test group of comparable pages and leave a control group alone, so you can separate the effect of the links from seasonality and everything else.
Slides and video
The full deck, including the references to the work of all the brilliant people I mentioned, is here: download the slides (PDF) or view them on SlideShare. The recording is on YouTube. Thank you to everyone who came to the talk in Brighton. It meant the world, and I was very proud and humbled to be on that stage.
Want me to give this talk at your event? Book me to speak.




