Link Management

  • JNext lesson
  • KPrevious lesson
  • FSearch lessons
  • EscClear search

WordPress link management by hand doesn’t scale. Once a site passes a few hundred posts, nobody is auditing which external links carry nofollow, which open in a new tab, and which partner domains deserve a followed link. The Link Management module automates all three decisions and applies them consistently on every page load.

This module descends from my old GT Nofollow Manager plugin, rebuilt on a faster filter with exception handling that actually matches how affiliate sites work.

Link Management module settings for automatic nofollow and new tab control in WordPress

What It Controls

Three behaviors, each with its own toggle:

  • Auto nofollow: adds rel="nofollow" to external links at render time, without rewriting stored content
  • External links in new tab: adds target="_blank" with the matching rel="noopener"
  • Internal links in new tab: available, but leave it off; same-site navigation should stay in the same tab

If you’re unsure when nofollow is the right call, my explainer on dofollow versus nofollow links covers the SEO mechanics.

Exceptions: The Part That Matters

Blanket nofollow is easy; exceptions are why this module exists. Trusted domains and exact URLs can skip the nofollow rule, and you can load entire exception lists from JSON presets so the same trusted-partner list ships to every site you run:

{
  "urls": [
    "example.com",
    "trusted-partner.org",
    "https://specific-url.com/page"
  ]
}

Developers can manage exceptions in code instead:

add_filter( 'functionalities_exception_domains', function( $domains ) {
    $domains[] = 'trusted-site.com';
    return $domains;
});

add_filter( 'functionalities_exception_urls', function( $urls ) {
    $urls[] = 'https://example.com/specific-page';
    return $urls;
});

Fixing Existing Content in Bulk

Render-time filtering covers everything going forward, and the Database Update tool covers the past: it walks your published content in batches and writes nofollow into stored post content where needed. I wrote a full walkthrough of that workflow in how to add bulk nofollow in WordPress.

Beyond Post Content

The same rules can run on ACF fields, shortcode output, or any custom template through a public helper:

echo \Functionalities\Features\Link_Management::process_content( $html );

The processor is also framework-aware. Content containing Vue or Alpine.js directives is skipped entirely, because running templates with v-if or @click through a DOM parser corrupts them. That guard shipped in version 1.4.3 after a theme conflict proved the point.

Next: Performance & Cleanup, the module with the most toggles and the biggest payoff.