Nofollow vs dofollow: there is no dofollow attribute, and three values that are real

Nofollow vs dofollow is a choice between no rel attribute at all and one of the three values Google documents — sponsored, ugc and nofollow. There is no dofollow attribute in HTML.

Rankings & Citations6 min read1048 views
Nofollow vs dofollow: there is no dofollow attribute, and three values that are real

There is no dofollow attribute in HTML. A link with no rel value is already the default, and the nofollow vs dofollow choice is really a choice between leaving rel off and picking one of three values Google documents: sponsored, ugc and nofollow. Pick by what the link is, not by how much authority you want to keep.

Before you start

This chapter is about the rel attribute on one link. Which page should link to which is a different decision, and the shape of the link itself — the address and the words — is covered in how to write anchor text. If you are here because a plugin offers a "dofollow" toggle, the answer is that the toggle writes nothing at all in one position and rel="nofollow" in the other.

What nofollow vs dofollow actually means

One of the two names is real. Google's page on qualifying outbound links defines three values and says nothing about a fourth, because the absence of the attribute is the unmarked case. The three exist to describe a relationship you have with the destination, and the descriptions are short enough to quote in full.

ValueGoogle's descriptionTypical link
sponsored"links that are advertisements or paid placements"An ad, an affiliate link, a paid review
ugc"user-generated content (UGC) links, such as comments and forum posts"A comment, a profile field, a forum reply
nofollowUse it "when other values don't apply"An untrusted destination you still want to name
no relNot a value; the default stateEvery ordinary editorial link

The values combine. Google's own wording: "You may specify multiple rel values as a space- or comma-separated list." An affiliate link inside a reader comment is honestly rel="sponsored ugc", and writing both is more accurate than picking the one that feels closer.

The attribute describes what the link is. It is a disclosure, not a lever.

What these values do not do

They do not keep a page out of Google. The documentation is explicit: "Links marked with these rel attributes will generally not be followed. Remember that the linked pages may be found through other means, such as sitemaps or links from other sites, and thus they may still be crawled."

Read the word "generally". Google is describing its own behaviour with a hedge in it, so a marked link is not a wall. If you need a page kept out of results, that is a different tool entirely and the decision tree for it is in when to noindex a page.

There is also a nofollow rule for the robots meta tag, which is a separate mechanism working at page level: "Do not follow the links on this page. If you don't specify this rule, Google may use the links on the page to discover those linked pages." One name, two places, different scope — the meta tag covers every link on the page, the attribute covers one.

Do it: four steps

Ten minutes for the rules, then it becomes a publishing habit.

  1. List the places on your site where links are created without an editor: comment forms, profile fields, submitted listings, anything a signed-in user can type into. Those need ugc applied by the template, not by hand.
  2. List the places where money changed hands: ads, affiliate links, sponsored posts, exchanged links. Those need sponsored. This one is not optional in the way the others are — it is the case Google names first.
  3. Leave every ordinary editorial link alone. No attribute is the correct markup for a link you chose because it was useful, and adding nofollow to it tells Google you do not stand behind a source you just recommended.
  4. Add nofollow only to the leftovers: a destination you need to name but would not vouch for. Google's own instruction is to use it "when other values don't apply".

Deliverable: the pre-publish check

Six lines. Run them against a page before it ships, or against a template once.

CheckPass condition
Paid linksEvery one carries sponsored
User-typed linksTemplate applies ugc automatically
Editorial linksNo rel at all
Combined casesSpace-separated, not one picked
Spellingrel="nofollow", never rel="dofollow"
Internal linksUntouched by any of this

The last line is the one people argue about. Marking internal links nofollow to steer authority around your own site was a technique with a shelf life, and it has none left; the modern effect of doing it is that you have told Google not to follow a path to your own page. The measured reality is that almost nobody does it either way — across 27 homepages we counted 61 links carrying nofollow out of 5,104, and sponsored appeared exactly once, which is written up in nofollow links across 27 homepages.

Three ways this goes wrong

None of these produces an error, and two of them look tidy in the source.

  1. Blanket nofollow on every external link. It is easy to configure and it flattens the difference between a paid placement and a citation of a standards document, which is exactly the difference the three values exist to record.
  2. Using rel="dofollow". Browsers ignore unknown rel values, so nothing breaks visibly and the link behaves as an ordinary link, which is what it would have done with no attribute at all. It is a no-op that looks like a decision.
  3. Treating the attribute as an advertising disclosure. It is markup for machines. Whatever your jurisdiction requires readers to be told about a paid link is a separate obligation, and no rel value satisfies it.

Where this stops

These attributes cannot stop a page being found, cannot remove it from an index, and do not guarantee any particular treatment — the documentation says marked links "will generally not be followed", which is not the same as never. They also say nothing about how AI answer surfaces treat the marked link, and we have not seen documentation from any answer engine that describes it, so we are not going to claim one exists.

What they do buy you is an accurate description of your own outbound links, which is cheap to produce and hard to fake. If the more pressing problem is that your pages are not being fetched or quoted at all, that is a layer below this one, and it is what QueryWin works on.

Common questions

Is dofollow a real HTML attribute?

No. It is a name the SEO industry gave to the absence of rel="nofollow". Writing it does nothing.

Does nofollow stop a page from being indexed?

No. Google's documentation says linked pages "may be found through other means, such as sitemaps or links from other sites, and thus they may still be crawled".

Should I nofollow links to competitors?

Only if the link is paid or untrusted. An ordinary editorial link to a competitor is an ordinary editorial link, and marking it says something about you rather than about them.

Do I need sponsored on affiliate links?

Yes. Affiliate links are paid placements, and sponsored is the value Google names for them. nofollow is still accepted for this case, but it is the older habit.

Can one link carry two values?

Yes, separated by a space or a comma. A sponsored link inside user-generated content is the standard example.

My site has no comments and no ads. Do I need any of this?

Then you need none of it, and the correct markup for your outbound links is no rel attribute. That is a real answer, not a shortcut: the three values describe circumstances, and a site without paid links or user-typed links has none of those circumstances to describe. Revisit this page the day you add a comment form, a sponsorship or an affiliate programme, because each of those creates links your editors never saw.

What about links people leave in my forum, years later?

The ugc value belongs in the template that renders them, so it applies to everything already stored and everything added after. Applying it by hand to old posts is work that a template change does once.

Part of the QueryWin handbook · Level 2

Nofollow vs dofollow: there is no dofollow attribute, and three values that are real