nofollowは、リンクのrel属性に書いて「このリンク先を推奨しない」とGoogleに伝える値です。同じように並べて語られるnoindexはページを検索結果に出さないための指定、noopenerは開いた先のページから元のタブへの参照を断つ指定、noreferrerはリンク先へRefererを送らない指定で、働きかける相手も効果もまったく違います。この記事では、nofollow・noindex・noopener・noreferrerの違いを書く場所と効く相手で整理し、sponsored・ugcとの使い分け、rel="nofollow noopener noreferrer"と併記する意味、WordPressでの付き方、リンクの属性を点検するコードまで、Googleの文書とHTML仕様を出典にして説明します。
まとめ:nofollow・noindex・noopenerの違いと使い分け
- nofollowはリンク単位の指定で、相手はGoogleなどの検索エンジン。2019年9月にランキングでの扱いが、2020年3月1日からはクロールとインデックスでの扱いが「ヒント」になり、命令ではなくなりました。
- 広告・有料リンクには
rel="sponsored"(nofollowでも可)、コメントや掲示板のリンクにはrel="ugc"、どちらにも当たらず推奨したくないリンクにrel="nofollow"を使います。 - noindexはページ単位の指定で、robots metaタグかX-Robots-Tagヘッダーに書きます。robots.txtでクロールを禁止したページではnoindexが読まれません。
- noopener・noreferrerはブラウザへの指定で、検索順位とは関係しません。主要ブラウザは
target="_blank"のリンクを既定でnoopener扱いにするため、noopenerを手で書く必要は小さくなっています。 - 自サイト内のリンクにはnofollowを付けず、クロールさせたくないURLはrobots.txtで、検索結果から外したいページはnoindexで制御します。
| 指定 | 書く場所 | 効く相手 | 働き |
|---|---|---|---|
| rel=”nofollow” | aタグ | 検索エンジン | リンク先を推奨しないヒント |
| rel=”sponsored” | aタグ | 検索エンジン | 広告・有料リンクの明示 |
| rel=”ugc” | aタグ | 検索エンジン | ユーザー投稿内のリンクの明示 |
| noindex | robots metaのcontent/X-Robots-Tag | 検索エンジン | ページを検索結果に出さない |
| nofollow | robots metaのcontent/X-Robots-Tag | 検索エンジン | ページ内の全リンクをたどらない |
| rel=”noopener” | aタグ | ブラウザ | 開いた先からwindow.openerを使えなくする |
| rel=”noreferrer” | aタグ | ブラウザ | Refererを送らない(noopenerも含む) |
nofollowの意味とGoogleでの扱いの変化
HTML仕様とGoogleによるnofollowの定義
HTML Living Standardは、nofollowを「ページの作成者や発行者がそのリンクを推奨していない」こと、または「主に両ページの関係者の商業的な関係のために置かれた」ことを示すキーワードと定めています。書き方はaタグのrel属性に値を入れるだけです。
<a href="https://example.com/" rel="nofollow">参考ページ</a>
Googleは「外部リンクの関係性を Google に伝える」というヘルプで、nofollowを「リンクにその他の適切な値がなく、そのリンクとサイトを関連付けたくない場合、またはリンク先のページをサイトからクロールさせないようにする場合」に使う値と説明しています(2026年3月8日更新版)。通常のリンクにはrel属性を付ける必要がない、とも明記されています。
2019年9月のヒント化と2020年3月1日からの変更
nofollowは2005年にブログのコメントスパム対策として導入され、当初Googleはnofollowの付いたリンクをランキングのシグナルとして扱っていませんでした。2019年9月10日、Googleはsponsoredとugcを追加すると同時に、3つの値すべてを「どのリンクを考慮または除外すべきかに関するヒント」に変えると発表しました。クロールとインデックス登録でnofollowがヒントになったのは2020年3月1日からです。
nofollowはもともと、リンク先がサイトマップや他サイトからのリンクなど別の経路で見つかればクロールを防げない指定でした。Googleのヘルプも、そうしたページは「依然としてクロールされる可能性があります」と書いています。ヒント化によって、nofollowの付いたリンクそのものも、クロールやインデックス登録の判断に使われうるものになりました。同じ発表でGoogleは、インデックス登録を防ぐためだけにnofollowを使うことを「決して推奨しません」と述べており、その用途にはnoindexを使います。リンクの評価がページ間で受け渡される仕組みそのものはリンクジュースの仕組みとnofollowの扱いで解説しています。
sponsored・ugc・nofollowの使い分け
3つの値はリンクの性質で選びます。Googleは、広告やスポンサーシップのリンクを属性なしで置くことをリンクスパムとして扱い、rel="nofollow"かrel="sponsored"を設定している限りポリシー違反にはならないとしています(スパムに関するポリシー、2026年9月2日更新版)。
| リンクの種類 | 推奨される値 | 代わりに使える値 |
|---|---|---|
| 広告・有料掲載・アフィリエイト | sponsored | nofollow |
| 商品提供を受けたレビュー内のリンク | sponsored | nofollow |
| コメント・掲示板・投稿者プロフィール | ugc | nofollow(併記可) |
| 信頼できるか判断できない外部サイト | nofollow | なし |
| 自分で選んで紹介する外部サイト | 付けない | なし |
| 自サイト内のページ | 付けない | robots.txtで制御 |
有料リンクについてGoogleは、以前はnofollowを推奨していたが「現在は sponsored が推奨されています」と書き、2019年の発表では「sponsored の使用をおすすめしていますが、どちらでも問題ありません」と答えています。すでに付けたnofollowをsponsoredへ書き換える必要もありません。ugcについては、長く質の高い投稿を続けている信頼できる投稿者のリンクなら外してもよいとしています。
値は複数書けます。Googleはsponsored・ugc・nofollowについてカンマ区切りも解釈すると書いていますが、HTML仕様のrel属性はスペース区切りで、ブラウザはnoopener,noreferrerのようなカンマ区切りを1つの未知の値として扱います。noopenerやnoreferrerと併記することを考えて、スペースで区切るのが無難です。rel="ugc nofollow"のように新しい値とnofollowを併記するのは、新しい値に対応していないサービスとの互換性を保つ書き方としてGoogleが例示しているものです。広告でないリンクにsponsoredを付けても問題は起きませんが、逆に明らかな広告リンクに値を付けないのは問題になる、というのがGoogleの整理です。被リンクを集める側の判断基準はSEO外部対策・被リンクの獲得方法、自分から外部へ張るリンクの置き方はアウトバウンドリンクの設置方法にまとめています。
noindexとnofollowの違い(robots metaタグ)
robots metaのnoindex・nofollow・noneの意味
noindexは個々のリンクではなくページ全体に対する指定で、HTMLのheadに置くrobots metaタグに書きます。Googleの仕様では、noindexは「検索結果でこのページ、メディア、またはリソースを表示しません」、metaのnofollowは「このページ上のリンクをたどりません」、noneは「noindex, nofollow と同じ」です。
<!-- 検索結果に出さず、ページ内のリンクもたどらせない -->
<meta name="robots" content="noindex, nofollow">
<!-- 上と同じ意味 -->
<meta name="robots" content="none">
<!-- 検索結果には出さないが、リンクはたどらせる(followは既定値なので書かなくてよい) -->
<meta name="robots" content="noindex">
つまり「noindex nofollow の違い」は、対象がページそのものかページから出ていくリンクかの違いです。noindexだけを書いたページは、Googleがクロールして指定を読み取った時点で検索結果から外れます。nofollowを併記しなければ、そのページのリンクがリンク先の発見に使われる可能性は残ります。サンクスページや社内向けの一覧のように、ページは出したくないがリンク先は普通に評価されてよい場面ではnoindexだけで足ります。metaのnofollowまで書くのは、ページ内のリンクを一切推奨したくない場合、たとえば管理者が内容を確認していない投稿一覧などに限られます。
robots.txtのクロール拒否とnoindexの検出条件
noindexを効かせるには、そのページのクロールを許可しておく必要があります。Googleの仕様は、robots.txtでクロールが許可されていないページでは、robots metaタグやX-Robots-Tagの指定が「検出されず、その結果無視されます」と書いています。検索結果から消したいページをrobots.txtのDisallowにも入れてしまうと、URLだけが残り続ける原因になります。ページを外したいならクロールを許可してnoindex、クロール自体を止めたいならrobots.txt、と目的で分けます。Disallowの書き方と効く範囲はrobots.txtの書き方と効く場面・不要な場面で扱っています。
PDFや画像にはX-Robots-Tagで指定
HTMLでないファイルにはmetaタグを書けないため、HTTPレスポンスヘッダーのX-Robots-Tagを使います。robots metaで使える値はすべてX-Robots-Tagにも書けます。Googleの仕様にあるApacheとNGINXの例は次のとおりです。
# Apache(.htaccess など)
<Files ~ "\.pdf$">
Header set X-Robots-Tag "noindex, nofollow"
</Files>
# NGINX
location ~* \.pdf$ {
add_header X-Robots-Tag "noindex, nofollow";
}
反映されたかどうかは、Search ConsoleのURL検査でnoindexが検出されたと表示されるかで確かめられます。URL検査の使い方はサーチコンソールの設定手順と使い方を参照してください。
noopener・noreferrerとnofollowの違い
noopenerの役割:window.openerとリバースタブナビング
noopenerは検索エンジンではなくブラウザに向けた値です。target="_blank"で新しいタブを開いたとき、古いブラウザやrel="opener"の指定で元のタブへの参照が許されていると、開かれた側のページはJavaScriptのwindow.openerから元のタブを参照でき、元のタブを別のURL(たとえば偽のログイン画面)へ書き換えられます。この手口はリバースタブナビングと呼ばれます。HTML仕様は、noopenerを付けて開いたウィンドウではopenerがnullを返すと定めています。
noreferrerのReferer送信停止とアクセス解析への影響
noreferrerは、リンク先へ移動するときにRefererヘッダー(どのページから来たか)を送らないようにする値です。Refererの仕組みとサイト全体での制御方法はリファラーの仕組みと制御の設定で解説しています。HTML仕様はnoreferrerについて「noopenerの動作も含む」と定めており、rel="noreferrer" target="_blank"はrel="noreferrer noopener" target="_blank"と同じ動作になると例示しています。
副作用は、リンク先のアクセス解析で流入元が分からなくなることです。Refererを持たない訪問は、GA4などでは参照元のない直接流入として集計されやすくなります。紹介先に自サイトからの送客を認識してほしい提携リンクやプレスリリースのリンクにnoreferrerを付けると、相手側の数字から自サイトが消えます。一方、URLパラメータでクリックを計測する仕組みはRefererに頼らないため影響を受けません。なお、noreferrerを付けなくても、Chrome 85・Firefox 87・Safari 15以降はReferrer-Policyの既定値がstrict-origin-when-cross-originです。サイト側で別のポリシーを指定していなければ、別のサイトへはページのURLではなくオリジン(https://www.example.com/の部分)しか送られず、HTTPSのページからHTTPのページへ移るときはRefererそのものが送られません。
target=”_blank”は既定でnoopener扱い
HTML仕様は2019年2月(WHATWGのPR #4330)に変わり、target="_blank"のリンクはrel="opener"を明示しない限りnoopenerとして扱われるようになりました。MDNのブラウザ互換データでは、この既定動作に対応したのはChrome 88、Edge 88、Firefox 79、Safari 12.1です。これらのブラウザでは、target="_blank"のaタグにrel="opener"を明示しない限り、開いたページからwindow.opener経由で元のタブを操作されることはありません。それでもnoopenerを残す理由は、古いブラウザへの備えと、コードを読む人に意図を伝えることくらいです。
「nofollow noopener noreferrer」を併記する意味
3つは働く相手が違うため、併記しても打ち消し合いません。ただし毎回3つを並べる必要はなく、リンクごとに必要なものだけを選びます。
| 場面 | rel属性の例 | 理由 |
|---|---|---|
| 推奨する外部サイトを新しいタブで開く | noopener(省略可) | 評価を渡してよい |
| 広告・アフィリエイトを新しいタブで開く | sponsored noopener | 有料リンクの明示 |
| コメント欄の投稿者リンク | ugc nofollow | 投稿者を管理できない |
| 流入元を相手に伝えたくないリンク | noreferrer | Refererを止める |
| 推奨しない参照先で流入元も伏せたい | nofollow noreferrer | noopenerは含まれる |
rel="nofollow noopener noreferrer"は、HTML仕様上noreferrerがnoopenerを含むため、noopenerの部分が重複しています。害はありませんが、リンク先の解析から自サイトが見えなくなるnoreferrerを惰性で付けているなら外すべきです。逆に、nofollowを付けたからといってタブの安全性は上がらず、noopenerを付けたからといって検索エンジンへの評価の受け渡しは変わりません。
WordPressでのrel属性の付き方
WordPressは、リンクのrel属性を版によって自動で書き換えてきました。投稿の本文に手で書いたrel属性が保存時に増えていた、という場面はこの処理が原因です。
| 版 | 変更 |
|---|---|
| 5.1 | target付きリンクに noopener noreferrer を自動付与 |
| 5.3 | コメント投稿者のリンクが external nofollow ugc に |
| 5.6 | 自動付与から noreferrer を外し noopener のみに |
| 6.7 | 自動付与の関数 wp_targeted_link_rel を非推奨化 |
2026年10月時点の最新版7.1.2のソースでも、wp_targeted_link_relは6.7.0で非推奨(deprecated)のままで、保存時のフィルターにも登録されていません。代わりにブロックエディターのリンク設定が、「新しいタブで開く」を選ぶとnoopenerを付けます。テキスト内のリンクにはGutenberg 16.7(WordPress 6.4に同梱)でnofollowの切り替えが加わり、オンにするとnofollowが付きます。sponsoredやugcを付けたい場合は、リンクを含むブロックを選び、ブロックのメニューにある「HTMLとして編集」でrel属性を書き換えます。保存後は公開ページのHTMLで属性が残っているかを確認してください。2019〜2020年に書いた記事には、5.1〜5.5の処理で付いたnoreferrerがそのまま残っていることがあります。
ページ内リンクのrel属性を点検するPythonコード
ページ内のリンクに何が付いているかを一覧にすると、付け忘れと付け過ぎを同時に見つけられます。次のコードは標準ライブラリだけで動き、UTF-8のHTMLに直接書かれたrobots metaと、aタグのrel・targetを出力します。base要素によるURLやtargetの指定には対応せず、内部・外部はホスト名の一致で判定する簡易版です。自サイト内のリンクにnofollowがある場合と、noreferrerで流入元を消している場合には注記を付けます。
import sys
from html.parser import HTMLParser
from urllib.parse import urljoin, urlparse
from urllib.request import Request, urlopen
GOOGLE_REL = {"nofollow", "ugc", "sponsored"}
class RelAudit(HTMLParser):
def __init__(self, base):
super().__init__()
self.base = base
self.robots = []
self.links = []
def handle_starttag(self, tag, attrs):
a = dict(attrs)
if tag == "meta" and (a.get("name") or "").lower() in ("robots", "googlebot"):
self.robots.append(a.get("content", ""))
if tag == "a" and a.get("href"):
raw = (a.get("rel") or "").lower()
rel = set(raw.split())
# Googleはsponsored・ugc・nofollowに限りカンマ区切りも解釈する
rel |= {t for t in raw.replace(",", " ").split() if t in GOOGLE_REL}
self.links.append((urljoin(self.base, a["href"]), raw, rel, (a.get("target") or "").lower()))
def main(src):
if src.startswith("http"):
req = Request(src, headers={"User-Agent": "rel-audit/1.0"})
with urlopen(req, timeout=20) as res:
html = res.read().decode("utf-8", "replace")
base = res.geturl() # リダイレクト後のURLを基準にする
else:
html = open(src, encoding="utf-8").read()
base = "https://example.com/"
p = RelAudit(base)
p.feed(html)
host = urlparse(base).hostname
print("meta robots:", p.robots or "なし")
for url, raw, rel, target in p.links:
internal = urlparse(url).hostname == host
notes = []
if internal and "nofollow" in rel:
notes.append("内部リンクにnofollow")
if "noreferrer" in rel:
notes.append("Refererを送らない")
if target == "_blank" and "opener" in rel and not rel & {"noopener", "noreferrer"}:
notes.append("openerで参照を許可")
kind = "内部" if internal else "外部"
print(f"{kind}\t{raw or '-'}\t{target or '-'}\t{url}\t{' / '.join(notes)}")
if __name__ == "__main__":
main(sys.argv[1])
ローカルのHTMLファイル(相対リンクはhttps://example.com/基準で解決)を渡したときの出力例です。Python 3.9(macOS標準)で実行しました。
$ python3 rel_audit.py sample.html
meta robots: ['index, follow']
内部 - - https://example.com/about/
内部 nofollow - https://example.com/login/ 内部リンクにnofollow
外部 sponsored _blank https://ad.example.net/
外部 nofollow noopener noreferrer _blank https://shop.example.org/ Refererを送らない
外部 ugc,nofollow - https://forum.example.org/
外部 opener _blank https://help.example.org/ openerで参照を許可
URLを渡すと公開ページをそのまま取得します。ただしJavaScriptで後から挿入されるリンクは拾えず、ボット対策のあるサイトでは取得が拒否されることがあります。取得を拒否された場合は、ブラウザの「ページのソースを表示」から保存したHTMLを渡せます。JavaScriptで追加されたリンクはページのソースにも含まれないため、デベロッパーツールで実行後のDOMを確認します。
nofollowを付けるべきでない場面
判断に迷う場面は2つあり、どちらも「付けない」が正解です。
1つ目は自サイト内のリンクです。ログインページやカートへのリンクにnofollowを付ける運用は今も見かけますが、Googleは自サイト内のリンクについてrobots.txtのdisallowを使うよう案内しています。2020年以降のnofollowはヒントにすぎないため、クロールを止める手段としても確実ではありません。内部リンクのnofollowは、評価を流すページを選ぶ「PageRankスカルプティング」の発想で付けられていることがありますが、Googleの文書にこの用途の案内はなく、自サイトのページへの導線を自分で弱めるだけです。内部リンクの設計全体はSEO内部対策の3分類と優先順位で扱っています。
2つ目は、外部リンクへの一律付与です。CMSの設定やプラグインで全外部リンクにnofollowを付けると、出典として示した公的機関や公式ドキュメントへのリンクまで「推奨しない」と宣言することになります。Googleの文書でnofollowを使う場面は、他の値が当てはまらず、関連付けたくないかクロールさせたくないリンクに限られています。自分で確かめて紹介する出典には何も付けず、広告と投稿者のリンクにだけsponsored・ugcを付けるのが、文書の想定どおりの運用です。被リンクの売買や相互リンクの量産のように、属性の付け忘れがペナルティにつながる手口はブラックハットSEOの手法とペナルティを、属性なしで評価される被リンクの条件はナチュラルリンクの条件と獲得方法を参照してください。
よくある質問
nofollowを付けたリンクにSEO効果はありますか?
Googleは、nofollowなどの付いたリンクを「一般的には」以前と同じくランキング目的には使わないと説明しています。ただし2019年以降は命令ではなくヒントのため、評価に一切使われないと断定はできません。リンク先がnofollowリンクから訪問者を得たり、言及をきっかけに別の場所で通常のリンクを得たりする間接的な効果はあります。
noindexとnofollowの違いは何ですか?
noindexはページを検索結果に表示させない指定で、robots metaタグかX-Robots-Tagヘッダーに書きます。nofollowはリンクをたどらせない・推奨しない指定で、aタグのrel属性に書けば個別のリンクに、robots metaに書けばページ内の全リンクに効きます。両方を指定したい場合はcontent="noindex, nofollow"かcontent="none"と書きます。
既存のnofollowをsponsoredやugcに書き換える必要はありますか?
ありません。Googleは2019年9月の発表で、既存のnofollowリンクを「変更する必要はまったくありません」と答えています。広告リンクについてもnofollowのままでリンクプログラムのペナルティは回避でき、sponsoredへの移行は「都合のよいとき」でよいとしています。
noopenerとnoreferrerは両方書く必要がありますか?
HTML仕様上、noreferrerはnoopenerの動作を含むため、noreferrerを書くならnoopenerは不要です。またChrome 88・Firefox 79・Safari 12.1以降はtarget="_blank"を既定でnoopener扱いにするので、Refererを止める必要がなければどちらも省略できます。
ページのリンクにnofollowが付いているか確認する方法は?
Chromeならリンクを右クリックして「検証」を選ぶと、デベロッパーツールでaタグのrel属性を確認できます。ページ全体をまとめて確認したい場合は、この記事のPythonコードにURLか保存したHTMLを渡すと、全リンクのrelとtargetを一覧にできます。robots metaのnofollowはhead内のmetaタグを、X-Robots-TagはレスポンスヘッダーかSearch ConsoleのURL検査で確認します。