Where a link sits changes what it does
The same link, to the same page, is not the same link in a paragraph as it is in a footer. Counting links treats those as equal, and every judgement built on the count inherits the error.
The short answer
The same link means different things in different places. A link in the body of a relevant paragraph is an editorial judgement; the same URL in a site-wide footer is furniture. Where repetition matters, the first instance in the document is the one that counts, and internal nofollow almost never does what people expect.
The same link, in three places, doing three things
Consider one link to your sharpening guide, appearing in three positions on the same site.
In the footer, it is on every URL. It is a navigation aid, it has fixed anchor text, and its presence says nothing about any individual page: a link that appears everywhere carries no information about where it appears.
In a sidebar of related articles, it is on a subset of pages, chosen by an algorithm or a tag. Better, because the grouping means something, and still generic: the anchor text is the destination title, and the module is the same on every page in the group.
In the body of an article, inside a sentence that explains why you would follow it, it is a recommendation made once, by a person, in context. The anchor text was written for this occasion, the surrounding paragraph tells a reader what they will get, and the link exists because it was relevant here.
Those are three different objects and it is only the third that improves your site in the way this check cares about. Which is why a report of inbound counts that includes chrome is close to useless, and why the separation depends on your markup naming its regions: without a nav and a footer, nothing can tell the three apart.
Repetition, and which instance counts
When a page links to the same destination four times, the usual assumption is that only the first is counted. It is a reasonable guess and it is not something anybody can verify, so the practical question is what to do given the uncertainty.
The answer is to link once, deliberately, at the point in the prose where a reader would want it. That is right regardless of how a crawler treats the duplicates, because four links to one page in one article is a reading experience nobody enjoys, and it dilutes the one instance that was well placed.
Two related habits worth naming:
- Do not link the same phrase to two destinations on one page. Two links reading
our sharpening guidepointing at different URLs is a contradiction, and a reader who follows the second one has been misled by the first. - Do not link every mention of a term. A page that links the word
canonicaleleven times reads as automated, because it was. One link, at the first substantive mention, is the whole convention.
On the total number of links per page: the old figure of a hundred came from a documented crawler limit that no longer applies, and there is no cap to respect now. What remains true is that a page with four hundred links has distributed its attention four hundred ways, and no reader is choosing from four hundred options.
nofollow on an internal link
Almost always a mistake, and worth its own section because the setting appears in a lot of plugins and content management systems.
The reasoning that produced the habit was that a nofollowed link would redirect value to the other links on the page. That handling changed in 2009: a nofollowed link still takes its share and discards it, so the technique now destroys value rather than moving it. The full argument is in the authority guide.
There is also a plainer objection. A nofollow on your own link is a statement that you do not vouch for a page you published, which is either untrue or a reason to stop publishing the page. The attribute exists for links you cannot vouch for, and everything inside your own domain is something you can.
If a page genuinely should not be crawled, say so with a directive on that page or a rule in robots.txt, chosen with the difference between them in mind. Annotating the links pointing at it is neither a block nor a redistribution; it is a small loss with no compensating effect.
Where an internal nofollow is genuinely defensible.
Links into an area that generates unlimited URLs, a calendar with no end date or a filter space that combines, are worth marking while you fix the underlying problem. Even then it is a containment measure rather than a solution, and the real fix is to stop generating the links.
User-generated links are the other case, and they are not really internal: a comment field that accepts URLs is publishing somebody else's links on your page, and rel="ugc" or nofollow is exactly what that is for.
Position is a fact about where in the document a link sat
Judging a link needs its context: which region of the page it appeared in, whether the same destination is linked again elsewhere on that page, and whether the same anchor text is used somewhere else for something different. All three are comparisons rather than values.
This one needs the full crawl
Judging a link means knowing where in the document it appeared and whether the same target is linked again elsewhere on the page, which is a comparison across every link on every page.
The instant search on this site audits a single page, so rather than show you a verdict it cannot support, this guide sends you to the place the check actually runs.
Does this affect AI search?
Yes, and in a way that makes body links matter more here than in search. A model reading your page reads the links in your prose as part of the prose: a sentence saying you cover something in another guide, with the link on a phrase describing it, tells the model both that the page exists and what it is about. That is content, not markup.
Chrome links do not do that. A footer of two hundred destinations is a block of navigation text that a well-built chunker discards and a badly built one turns into a chunk of link labels. Either way nothing learns anything about your subject from it, which is the same argument the uniqueness ratio makes about boilerplate.
So the practical implication is the one this whole guide points at: the links that count are the ones inside sentences. On a page with none of those, every internal link you have is invisible to something reading for meaning rather than crawling for structure.
Why link placement is a Refinement
Because the links work. A footer link is a real link, followed and counted, and a page supported only by chrome is still reachable, crawled and indexed. Nothing here excludes anything, and the difference between a good link and an adequate one is a difference of degree, which is what the bottom of the scale describes.
The nofollow issue is the part of this check with a real cost, and it is uncommon enough that rating the whole check for it would misrepresent most instances. Where it does appear, usually as a setting somebody enabled once, it is worth fixing immediately and it is a single change.
What makes the check worth reading despite the rating is that it corrects the interpretation of two higher-rated ones. Inbound counts and authority distributions are both computed from links, and both are misread if every link is assumed equal. This is the guide that tells you a page with forty inbound links from a menu has none.
Separating body links from chrome by hand
If your markup names its regions, the split is one command. If it does not, that is the finding.
URL=https://example.com/guides/carbon-steel
html=$(curl -s "$URL" | tr '\n' ' ')
count() { grep -o 'href="/[^"#?]*"' | sort -u | wc -l; }
printf 'whole page : %s internal links\n' "$(printf '%s' "$html" | count)"
printf 'in <main> : %s\n' \
"$(printf '%s' "$html" | grep -o '<main.*</main>' | count)"
printf 'in <nav> : %s\n' \
"$(printf '%s' "$html" | grep -o '<nav.*</nav>' | count)"
printf 'in <footer>: %s\n' \
"$(printf '%s' "$html" | grep -o '<footer.*</footer>' | count)"
# any internal links marked nofollow?
printf '%s' "$html" \
| grep -oE '<a [^>]*href="/[^"]*"[^>]*rel="[^"]*nofollow[^"]*"' | headTwo outcomes are informative. If the main figure is a small fraction of the whole-page one, your internal linking is almost entirely navigation, and the editorial links this guide is about do not exist yet. And if the region counts come back as zero, your template has no semantic regions, so nothing, including any report you run, can distinguish your content links from your chrome.
Questions this check raises
- Do footer links count as internal links?
- They count as links and carry far less weight than body links. A footer link appears on every page regardless of relevance, so it says nothing about the specific page it is on. Counting them equally makes a site look well connected when the connection is one template repeated.
- If a page links to the same URL twice, do both count?
- Historically only the first anchor in the document was used, and treating it that way is still the safe assumption. It matters for a page that links to a destination once in the navigation and once in the body: the navigation link comes first in the source, and its uninformative anchor is the one that gets read.
- Should I use nofollow on internal links?
- Almost never. It was once used to sculpt where authority flowed; that stopped working in 2009, and the value on a nofollowed link is simply not redistributed. The legitimate uses are narrow, such as a login or an action URL you do not want crawled, and even those are better handled with robots directives.