Skip to main content
CodeRocket
SEOmediumtechnical

Avoid nofollow on internal links

rule · nofollow-internal

rel="nofollow" was introduced to tell search engines not to follow a link or pass PageRank through it. Google's rel-attribute guidance (opens in a new tab) applies to outbound trust decisions, not your own architecture, so internal nofollow weakens the same flow covered in internal-links.

Code Example

HTML
<!-- ❌ Bad: Internal link with nofollow — blocks PageRank flow -->
<a href="/products/shoes" rel="nofollow">View Shoes</a>
 
<!-- ✅ Good: Internal link without nofollow -->
<a href="/products/shoes">View Shoes</a>
 
<!-- ✅ OK: nofollow on an external, untrusted link -->
<a href="https://untrusted-source.com/article" rel="nofollow">Source</a>

Why It Matters

Adding rel="nofollow" to internal links prevents PageRank from flowing to those pages while providing no benefit over simply omitting the attribute. Google’s 2019 note on evolving nofollow (opens in a new tab) is the clearest modern explanation for why PageRank sculpting is no longer a valid rationale.

What nofollow Actually Does

When Googlebot encounters rel="nofollow" on an internal link, it may still crawl the target URL (Google now treats nofollow as a "hint" since 2019), but PageRank does not flow through the link. The result:

  • The target page receives less internal link authority
  • Its ability to rank for competitive queries is diminished
  • The blocked PageRank is not redistributed elsewhere

Correct Alternatives

GoalWrong approachCorrect approach
Don't index the target pagerel="nofollow" on links TO it<meta name="robots" content="noindex"> ON the target page
Don't crawl the targetrel="nofollow" on links TO itDisallow: /path/ in robots.txt
Mark sponsored linksrel="sponsored" on those links
Mark user-generated linksrel="ugc" on those links

There are very few cases. One edge case: a large user-generated content site may add rel="nofollow ugc" to links in user profile bios pointing to other pages within the same site, if those profiles are untrusted. Even then, rel="nofollow" alone still passes no PageRank.

Audit Command (Screaming Frog (opens in a new tab))

  1. Crawl → Links → Filter by Link Type: Internal
  2. Filter Follow: No (nofollow internal links)
  3. Export and review each case

Automated Audit

JavaScript
// Example: find internal nofollow links in parsed HTML
const links = document.querySelectorAll('a[href]')
const domain = 'example.com'
 
const internalNofollow = Array.from(links).filter(a => {
  const isInternal = a.href.includes(domain) || a.href.startsWith('/')
  const hasNofollow = a.rel.split(' ').includes('nofollow')
  return isInternal && hasNofollow
})

Exceptions

  • Staging, utility, login, account, or internal search pages may intentionally use different crawl or index signals if they are not meant to rank.
  • Temporary migration states can produce noisy intermediate signals; flag the live production URL pattern, not one-off transition artifacts.
  • When redirects, canonicals, robots directives, or indexability signals conflict, fix the strongest final signal first instead of reporting every downstream symptom as a separate blocker.

Standards

  • Use these references as the standard for the final search-facing HTML, metadata, and crawl behavior.
  • Check the implementation against Google Search Central: Qualify your outbound links with rel before treating the rule as satisfied.
  • Check the implementation against Google Blog: Official nofollow link attribute announcement before treating the rule as satisfied.

Verification

Automated Checks

  • Inspect rendered HTML and HTTP headers to confirm the expected metadata or crawlability signal is present.
  • Test the affected URL with Google Search Console or equivalent tooling where relevant.
  • Re-crawl a representative page set after deployment.

Manual Checks

  • Confirm the change does not create conflicting canonical-url, robots, or structured-data signals.