# Nofollow, sponsored and ugc: link attributes explained

> Which rel attribute goes on paid links, comment links and links you do not vouch for, why none belongs on your own links, and how to read the report's nofollow share finding. With WordPress examples.

Updated 2026-09-25 · Technical SEO · HTML version: https://getreport.app/guides/nofollow-sponsored-ugc-link-attributes

A link is a recommendation: "this page is worth your time". Search engines count those recommendations, which is why people pay for them, spam them into comments and fake them. The `rel` attribute is how you tell Google which of your links are not recommendations: paid, user-submitted or simply not vouched for. Get it right and your site stays clear of the link-scheme rules; get it wrong in the other direction and you throw away the credit for links you meant to give. This guide covers the three values, when each applies, and how to check a page in a minute.

## Quick answer

- **Paid or affiliate link**: `rel="sponsored"`. `nofollow` is still accepted for these, but `sponsored` is what Google asks for.
- **Link in a comment, forum post or user profile**: `rel="ugc"` (user-generated content).
- **Link you do not want to vouch for** and neither of the above fits: `rel="nofollow"`.
- **Links to your own pages, your social profiles, sources you cite, partners you recommend**: no attribute. Plain links are the default, not the exception.
- Values combine: `rel="sponsored nofollow"` is valid and common during transitions. `noopener` and `noreferrer` are unrelated and can sit alongside.
- Since March 2020 all three are hints, not commands: Google may still crawl and count the link.

## Why link attributes matter

Google's ranking has always leaned on links, and Google's spam policies forbid buying or selling links that pass ranking signal. A site that sells sponsored posts or runs affiliate links without marking them is participating in a link scheme, whether it meant to or not, and the consequences fall on the site that publishes the links as well as the site that receives them. `rel="sponsored"` is the mark that says "this link is paid; do not count it as an endorsement". It keeps the money side of the web honest without banning it.

Comments and forums are the other side. Anyone can post a link in a comment, and for years the reason to do so was to get a link from your site. Marking those links `ugc` removes the incentive and lets Google treat the content of the comment on its own merits.

The history explains the confusion you will meet in older advice. Google introduced `nofollow` in January 2005 as a blunt instrument: a link with it passed nothing. In September 2019 it added `sponsored` and `ugc` so the reason could be stated, and announced that from 1 March 2020 all three would be treated as hints for crawling and indexing rather than directives. Google's page on [qualifying outbound links](https://developers.google.com/search/docs/crawling-indexing/qualify-outbound-links) is the current reference. A hint means Google decides; a `nofollow` on a link to a great source may still count a little, and a `sponsored` on a paid link may still be crawled. What the attributes reliably do is protect you: a correctly marked paid link is never a link scheme.

The mistake sites make far more often than under-marking is over-marking. Somewhere in 2010 "nofollow all external links" became a plugin default and a habit. A page that nofollows its citation of a study, its link to a supplier's site and its own Instagram profile is telling Google that it recommends none of them, which looks odd, helps nobody, and costs the site nothing except goodwill from the people it links to. Links you would recommend to a friend get no attribute.

## How getReport checks it

> **Free tool:** [Free SEO audit](https://getreport.app/tools/seo-audit): Every on-page and technical SEO check in one run: title and description, headings, canonical, robots and sitemaps, indexability, links, images and mobile readiness — each with a fix.

The audit reads every `<a href>` on the page whose host differs from the page's own, and counts how many carry `nofollow` in their `rel` attribute. The result is an information finding, not a pass or fail, because there is no right percentage: a forum thread might be 100 % and a well-sourced article 0 %, and both are correct. The finding lists the first twenty nofollowed URLs so you can see which links they are.

> **Check: Nofollow external links.** rel="nofollow" tells search engines not to pass trust to a link. It is right for paid or user-submitted links and wrong for links to partners or sources you vouch for.
>
> 1. Keep nofollow (or "sponsored" / "ugc") on paid and user-generated links; remove it from links you would recommend.

![The SEO audit panel of the example shop with the external links finding open: how many of the external links carry nofollow, the share as a percentage, and the list of URLs that do](https://getreport.app/guides/img/nofollow-sponsored-ugc-link-attributes/seo-panel.webp "The finding gives the share and the URLs; whether the share is right depends on what the links are.")

Two things to know about how it counts. It looks for the `nofollow` token specifically, so a link with `rel="sponsored"` alone is not in the count; if your affiliate links use `sponsored` without `nofollow`, the finding under-reports them, which is fine, because they are marked correctly. And affiliate links that go through your own domain (`/go/partner/`, `/recommends/shop/`) are same-host links to the audit and appear in the internal links count instead, so they never show here at all; check those in the source.

> **Check: Internal links.** Internal links are how crawlers and visitors reach the rest of your site. Fewer than 3 leaves the page a dead end; more than 300 dilutes every link and overwhelms visitors.
>
> 1. Link to related pages from the body text and keep navigation and footer links to what visitors actually need.
> 2. For very long lists, split them across pages or use category pages instead of one giant menu.

The internal links finding is the counterpart: your own links, which should never carry any of these attributes.

## Step by step

### 1. Sort the page's external links into four groups

Open the audit's links list, or view the page source and search for `href="http`. For each external link, ask one question: why is it there?

| Reason the link exists | Attribute | Examples |
| --- | --- | --- |
| Someone paid, or you earn from clicks or sales | `sponsored` | Affiliate links, sponsored posts, paid directory listings, banner ads in HTML |
| A visitor put it there | `ugc` | Comments, forum posts, reviews, user profiles, guest submissions you did not vet |
| You do not want to vouch for it, and it is neither of the above | `nofollow` | A link to a page you are criticising, a competitor you name for completeness, an untrusted source |
| You are pointing the reader somewhere useful | none | Sources, partners, suppliers, tools, your own social profiles, the manufacturer's site |

Most pages have only the first and last group. If you find yourself putting everything in row three, the habit is the problem, not the links.

### 2. Mark paid and affiliate links `sponsored`

In HTML:

```html
<a href="https://shop.example/weekender?ref=yoursite" rel="sponsored noopener" target="_blank">
  Weekender bag at Shop Example
</a>
```

`noopener` is a security attribute for links that open in a new tab and has nothing to do with search; modern browsers apply it by default for `target="_blank"`, and keeping it explicit is harmless. During a transition from old markup, `rel="sponsored nofollow"` is valid and treated the same as `sponsored`.

Affiliate links that redirect through your own domain still need the attribute on the `<a>` on your page, because that is the link Google finds. A common pattern is to also disallow the redirect folder in robots.txt so the redirects are not crawled:

```text
User-agent: *
Disallow: /go/
```

The disclosure to the reader ("this post contains affiliate links") is a separate obligation under advertising rules in most countries; the `rel` attribute is for search engines and does not replace it.

### 3. Mark user-submitted links `ugc`

Anything a visitor can publish without your review: comments, forum posts, Q&A answers, profile fields, reviews. The attribute goes on every link in that content, which means the software has to add it, not you. Most platforms already do, which is why this step is usually a check rather than a change.

```html
<!-- A comment author's link and a link inside the comment body -->
<a href="https://example.org/" rel="ugc">Ana</a>
<p>I had the same problem, this <a href="https://example.net/fix" rel="ugc">fix</a> worked.</p>
```

If you moderate submissions by hand and want to reward trusted contributors, removing `ugc` from their links is allowed; Google's guidance says so explicitly.

### 4. Use plain `nofollow` only for the leftovers

The value still has a job: links you must include but do not endorse. A post debunking a scam links to the scam site with `nofollow`. A comparison names a competitor's page. A citation to a source you consider unreliable but relevant. Those are the cases.

What it is not for: internal links, links to your social profiles, links to sources you cite as evidence, links to partners and clients, links to the software your site runs on. Those are endorsements, and the whole point of your site's links is to endorse things.

### 5. Remove the attributes from links that deserve none

The clean-up is the step with the most reach, because sites that over-mark usually did it with a plugin or a theme setting that touched every page at once. Find the setting (an "add nofollow to external links" option in the SEO plugin, a theme option, a filter in `functions.php`) and turn it off, then spot-check pages with the audit: the share should drop to whatever the page's paid and user links actually are.

If the attributes were added by hand over the years, a search and replace on ` rel="nofollow"` is too blunt, because it also strips the ones that belong. Work page by page, starting with the pages that get traffic.

### 6. Never mark your own links

A `nofollow` on a link from your home page to your pricing page tells Google not to pass signal to your own pricing page. Themes and plugins sometimes add it to login, cart, and legal links to "sculpt" ranking signal; since the 2020 change that does not work as intended, and it never helped. If a page should stay out of search, give the *page* a `noindex`; the links to it stay plain. [Internal links: how many, where, with what anchor text](https://getreport.app/guides/internal-links-how-many-where-anchor-text) covers the rest of what internal links should look like.

## Platform notes

### WordPress

WordPress marks comment links itself: the comment author's URL and any link in the comment body get `rel="nofollow ugc"` (both values, since WordPress 5.3), with no setting to change. If a comment plugin replaces the native comments, check its output.

The block editor's link popover has no nofollow control of its own. Yoast SEO and Rank Math add toggles to it for `nofollow` and `sponsored`, per link, which is the practical way to mark a paid link while writing. Without either plugin, switch the block to "Edit as HTML" and add the attribute by hand. In the classic editor, use the Text tab.

Affiliate plugins (ThirstyAffiliates, Pretty Links) create the `/go/slug/` redirects and have a setting to add `nofollow` to the links they insert; check whether yours also adds `sponsored`, and turn the option on globally so no link is missed. Their redirect folder is worth a `Disallow` line in robots.txt, which the plugins usually add for you.

Themes and older SEO plugins may have a global "nofollow external links" option. That is the over-marking switch; turn it off.

### Shopify

Links in product descriptions and blog posts are edited in the rich text editor; to add `rel`, switch to the HTML view (`<>`) and edit the anchor. Blog comments are rendered by the theme, so check the theme's comment template for the attribute. Affiliate apps that generate links generally add it; verify one link in the storefront source.

### Static sites / custom

The attribute is whatever your templates emit. For Markdown content, most generators let you write raw HTML for the few links that need `rel`, or post-process external links with a plugin. Comments from a third-party service are rendered inside an iframe or by their script, so their links are not on your page at all as far as Google is concerned.

## Verify

- The audit's external links finding shows a share that matches the page: close to 0 % on an article with citations and no ads, higher on a post with affiliate links, and the listed URLs are the paid or user links, not your sources.
- View the source of a page with affiliate links and confirm each has `rel="sponsored"` (with or without `nofollow`): `curl -s https://example.com/best-bags/ | grep -o '<a [^>]*ref=[^>]*>'`.
- Post a test comment with a link on a WordPress site and check the rendered HTML shows `rel="nofollow ugc"`.
- The internal links finding passes and none of the internal links in the source carry `nofollow`.

## Common mistakes

- **Nofollow on everything external.** Symptom: the share finding reads 100 % on an article whose only links are sources. A plugin or theme option is doing it; turn it off and let the endorsements through.
- **Affiliate links with no attribute.** Symptom: 0 % on a "best of" page full of `?ref=` links. Add `sponsored` to each, or turn on the affiliate plugin's global setting.
- **Sponsored on links that were not paid.** Marking a supplier or a partner `sponsored` because the relationship is commercial in some vague sense. If no money or goods changed hands for the link, it is a plain link.
- **Nofollow on internal links.** Cart, login, "my account", tag pages. Remove it; use `noindex` on pages that should not appear in search.
- **Relying on the attribute as disclosure.** `rel="sponsored"` is invisible to readers. The written disclosure near the links is a separate, legal requirement.
- **Expecting a hint to be a block.** Since 2020 Google may follow and index a nofollowed link anyway. To keep a URL out of Google, act on the target page (`noindex`) or block it in robots.txt, not on the links to it.
