Fixing Accidental Nofollow on Internal Links
The nofollow value tells search engines that you do not vouch for a link and would rather they did not treat it as an endorsement. On links to other websites that can be appropriate.
On links between your own pages it is almost always an accident, left behind by a plugin setting, a page builder checkbox, a theme template or a robots instruction that applies to a whole page. The result is that pages you want found receive links that count for little. This guide shows how to find where the nofollow comes from, switch it off at that source, and keep it only where it genuinely belongs.
What nofollow does to a link today
A link marked rel="nofollow" asks search engines not to treat it as a vote for the destination.
Google announced in 2019 that it would treat nofollow as a hint rather than a strict rule, and from March
2020 that hint applied to crawling and indexing as well as ranking. At the same time Google introduced
rel="sponsored" for paid links and rel="ugc" for user-generated content.
For internal links, three things follow:
- A nofollowed internal link passes little or nothing to the destination. If your own menu or related links carry nofollow, the pages they point to are being supported less than you think.
- It does not redirect that value elsewhere. The old idea of "PageRank sculpting", adding nofollow to some of your links to push more value through the rest, stopped working many years ago. The share assigned to a nofollowed link is simply not passed on.
- It is not a reliable way to keep a page out of search. Because nofollow is a hint,
a page linked only with nofollow can still be crawled and indexed if it is found by other routes. Use
noindexfor that.
So an internal nofollow usually costs you something and gains nothing. That is why the hub places it near the top of the priority list: it is often a single setting that affects every page at once.
Where accidental nofollow comes from
There are two quite different ways your internal links can end up nofollowed. One marks individual links; the other marks every link on a page at once. You need to check both.
| Source | Scope | How it shows up |
|---|---|---|
Robots meta tag with nofollow | Every link on the page | <meta name="robots" content="noindex, nofollow">
in the head, often left from staging |
X-Robots-Tag HTTP header | Every link on the page | Not visible in the HTML at all; only in the response headers |
| SEO or "external links" plugin | Links it treats as external | Nofollow on links
to www when the site is on the bare domain, on subdomains, or on http:// versions
of your own address |
| Page builder link setting | Individual buttons and links | A "nofollow" tick box switched on in a reused button or global section |
| Theme template | Tag, author, archive, filter or pagination links | Hard-coded rel="nofollow"
on the same kind of link across the site |
| Link-cloaking or affiliate plugin | Short links on your own domain | Internal addresses
such as /go/ or /recommends/ marked nofollow; usually intended |
| Editor habit | Individual links in content | Writers ticking "nofollow" on every link out of caution |
The external-links plugin trap
Many SEO plugins offer an option to add nofollow to external links automatically, with a list of domains
to exclude. That is reasonable in itself, but the plugin decides what "external" means by comparing addresses.
If your site runs on https://www.example.co.uk and some content links to https://example.co.uk
or http://www.example.co.uk, the plugin may treat those as external and nofollow them. The
same happens with shop, help or booking subdomains. The fix is either to correct the links to your exact
canonical address or to add your own variants to the exclusion list, ideally both.
The staging leftover
Staging sites are commonly hidden with a robots instruction of noindex, nofollow. If
that setting travels with the database or configuration to the live site, every page tells search engines
not to index it and not to follow any of its links. In WordPress, the "Discourage search engines from
indexing this site" option under Settings, Reading outputs a robots tag that includes both noindex and
nofollow. This is the most damaging version of the problem and the quickest to fix.
Finding the source on your site
List nofollowed internal links on a page
Open any affected page, open developer tools and paste this into the Console. It shows each internal link carrying nofollow and the nearest container, which tells you whether it is in the menu, a widget or the content:
[...document.querySelectorAll('a[rel]')]
.filter(a => /\bnofollow\b/i.test(a.rel) && a.hostname.replace(/^www\./, '') === location.hostname.replace(/^www\./, ''))
.forEach(a => console.log(a.rel.padEnd(28), a.pathname, a.closest('header, nav, footer, aside, main')?.tagName));
Treating www and the bare domain as the same site in this snippet is deliberate: it catches
links a plugin wrongly treats as external.
Check for page-wide instructions
View the page source (not the Elements panel, which shows the page after scripts have run) and search
for name="robots". Then check the response headers:
curl -sI https://www.example.co.uk/services/ | grep -i x-robots-tag
If either contains nofollow or none, which means noindex plus nofollow,
every link on that page is affected, whatever the individual links say.
X-Robots-Tag header that your server does not.Use the analysis to see the scale
The Internal Link Analysis maps every internal link across your crawled pages. When you review its link data, look for nofollowed links grouped by where they point and where they appear. A nofollow on every link to tag pages points to the theme. A nofollow on links to one subdomain points to a plugin's external-links setting. A handful scattered through articles points to editors.
The fix, step by step
Step 1
Confirm the nofollow is real and on internal links
Open two or three pages the Internal Link Analysis flags and
run the console snippet to list internal links carrying nofollow. Make sure the links really
point to your own site, counting www, the bare domain and your subdomains as yours. Note
which parts of the page they sit in. If only the odd link in an article is affected, this is an editing
job; if every menu or widget link is affected, look for a setting or template.
Step 2
Check for a page-wide nofollow instruction
View the source of a key page and search for a robots meta tag, then fetch the headers
with curl -sI and look for X-Robots-Tag. If either says nofollow
or none, every link on the page is affected regardless of its own attributes. On WordPress,
check that the setting to discourage search engines is off. On other platforms, check environment variables,
SEO settings per page and any CDN or server rules that add headers.
Step 3
Work out which component adds the attribute
Group the nofollowed links by where they appear. Links in the header, menu or footer
point to the theme or a global page builder section. Links to your own subdomains or www
variant point to an SEO plugin's external-links option. Links to tag, author or filter pages point to
theme templates. Temporarily switching off a suspect plugin on a staging copy and reloading the page
is a quick way to confirm which one is responsible.
Step 4
Switch it off at the source
Change
the setting or template rather than editing pages one by one. Add all your own domain variants and subdomains
to the plugin's exclusion list, and correct content links that use the wrong variant. Untick nofollow
on reusable buttons and global sections. Remove hard-coded rel="nofollow" from theme templates,
using a child theme so updates do not undo it. For stray links in content, edit the most important pages
first and brief editors to stop adding it.
Step 5
Keep nofollow only where it has a purpose
Leave nofollow, ugc or sponsored where they are genuinely
correct: links in comments and forum posts, paid placements, and affiliate redirect paths such as /go/.
For login, basket and account links, nofollow is harmless but rarely needed; a noindex on
those pages does more. For faceted filter links, remember nofollow is only a hint, so control crawling
with robots.txt or by not generating crawlable links for useless combinations.
Step 6
Recrawl and watch for it returning
Clear caches, then run the Internal Link Analysis again and confirm that followed internal links to your key pages have increased. Check a sample of pages for robots tags and headers once more. Because nofollow often returns with a plugin update, a new page builder template or a staging copy pushed to live, add a quick check of one page's source and headers to your release routine, and recheck after any plugin or theme update.
The few places nofollow belongs on your own site
| Link | Recommended | Why |
|---|---|---|
| Links posted by users in comments, reviews or forums | rel="ugc" or rel="ugc nofollow" | You are not vouching for them. Most platforms add this automatically. |
| Paid or sponsored placements | rel="sponsored" | Required by Google's guidelines for paid links. |
Affiliate redirect paths on your domain, such as /go/brand | rel="sponsored"
or nofollow | The internal address is only a hop to a paid external link. |
| Login, account and basket links | Usually no attribute needed | Use noindex
on the pages themselves if you do not want them in search. |
| Faceted filter combinations | Control with robots.txt or by not linking them | Nofollow is only a hint and does not stop crawling on its own. |
| Everything else between your own pages | No nofollow | Let the links pass their full value. |
If you are managing crawling on a shop with many filter combinations, the faceted navigation guide covers better ways to control it than nofollow.
Platform notes
WordPress
- Check Settings, Reading, and make sure search engines are not discouraged on the live site.
- In your SEO plugin, look for options such as "nofollow external links" and review the excluded domains
list. Add your
wwwand non-wwwforms and every subdomain you run. - Check per-page robots settings in the SEO plugin's panel on key pages. A page set to "nofollow" there affects all its links.
- In page builders, open the global header, footer and button presets and look at each link's advanced options.
- WordPress adds
ugcandnofollowto links in comments by default. That is expected and can stay.
Shopify
- Search the theme code for
nofollow. Some themes add it to filter, sort or tag links in collection templates. - Check any SEO app's settings for automatic nofollow or robots rules, and check the
robotshandling intheme.liquidfor conditions that addnofollowmore widely than intended.
Frameworks and static sites
- In Next.js, check the
robotsfield in your metadata configuration; afollow: falseset in a shared layout applies to every page under it. - Search your components for
rel=. A shared link component that addsnofollowwhenevertarget="_blank"is set can catch internal links that open in a new tab. - Check server and CDN configuration for
X-Robots-Tagrules applied to whole folders or environments.
noopener and noreferrer are not the same as nofollow.
They are about security and referrer data when opening new tabs and have no effect on how search engines
treat the link. You do not need to remove them.Edge cases worth knowing
- Nofollow plus noindex on a page you want indexed. Fix the noindex first; it is the bigger problem. Then remove the nofollow so the page's links count again.
- Links to a separate shop or help subdomain. Search engines may treat subdomains as related but separate. That is no reason to nofollow them; links between your own properties should be followed.
- Old sculpting setups. Some sites still nofollow links to their contact, privacy or terms pages to "save" link value. It does not work. Remove it, and if a page genuinely should not be in search, noindex it instead.
- JavaScript links. A link without a real
href, such as a button with a click handler, is not followed at all, nofollow or not. If the analysis shows fewer links than you expect, check that navigation uses proper<a href>elements. - Mixed rel values. An attribute such as
rel="nofollow noopener"still contains nofollow. Remove just the nofollow and keep the rest.
1. Should internal links ever be nofollow?
Very rarely. Links between your own pages should normally be followed so they pass their full value and help search engines find and understand your content. The exceptions are links you are not vouching for, such as user comments, paid placements or affiliate redirect paths on your own domain. Links to login, basket or account pages do not need nofollow; if you want those pages kept out of search, put noindex on the pages instead.
2. Does adding nofollow to some links send more value to the others?
No. This technique, known as PageRank sculpting, stopped working many years ago. A page's value is divided across all its links, including nofollowed ones, and the share assigned to a nofollowed link is simply not passed on to anyone. Adding nofollow to your contact or privacy page links therefore does not strengthen your other links. It only weakens the nofollowed links themselves, so removing the nofollow from your internal links costs you nothing at all.
3. Why is my SEO plugin adding nofollow to my own links?
Most likely because it thinks they are external. Plugins that nofollow external links decide what is external by comparing addresses, so links to your www version from a bare-domain site, to an http version, or to your own subdomains can be treated as external. Correct the links to your exact canonical address, and add every variant of your domain and each of your subdomains to the plugin's exclusion list so they are always treated as internal.
4. How do I check whether a whole page is set to nofollow?
View the page source and search for a meta tag named robots; if its content includes nofollow or none, every link on the page is affected. Then check the response headers with a tool such as curl, looking for an X-Robots-Tag header containing the same values, because that instruction never appears in the HTML. Check the rendered page in developer tools too, in case a script adds the tag after loading.
5. Is nofollow a good way to stop Google crawling certain pages?
Not on its own. Since 2020 Google treats nofollow as a hint for crawling and indexing, and a page can still be discovered through other links, your sitemap or links from other websites. To keep a page out of search results, use a noindex robots tag on the page itself. To stop crawling of large numbers of low-value addresses, such as filter combinations, use robots.txt rules or avoid generating crawlable links to them.
6. Are noopener and noreferrer the same as nofollow?
No. They are unrelated to search engines. Noopener stops a page opened in a new tab from controlling the page that opened it, and noreferrer additionally stops the destination seeing where the visitor came from. Neither changes how search engines treat the link. Some themes and plugins add them automatically to links that open in a new tab, and that is fine. Only the nofollow value affects whether the link is treated as an endorsement.
7. I removed nofollow. How soon will anything change?
Search engines need to recrawl the pages that contain the links, which can take days for popular pages and longer for rarely visited ones. There is no fixed timescale and no guaranteed ranking change. Run the Internal Link Analysis again straight away to confirm that the links are now followed, then watch how your key pages perform in Search Console over the following weeks rather than expecting an immediate shift.
The Internal Link Analysis maps every internal link across your crawled pages and counts links in and out of each page, so you can see how your key pages are linked and confirm your fixes after a recrawl.
Open Internal Linking Fixes โ