HTML

The HTML rel attribute is a relationship label for links. It helps browsers and search engines understand what a link means—such as security for new tabs, SEO link qualifiers, and resource hints like preload or preconnect.

rel属性

rel は、リンク先と「いま見ているページ」の関係(relationship)を伝えるための属性です。ざっくり言うと、リンクに「これは何のためのリンク?」という札(ラベル)を付けるイメージです。

同じURLへのリンクでも、rel の指定が違うと安全性(別タブ対策)検索エンジンへの伝わり方、そして読み込みの最適化(先読み)まで変わることがあります。

まずはここだけ:rel は「リンクの目的スイッチ」

rel は “関係ラベル”
rel の値は、リンク先そのものではなく「リンク先とこのページの関係」を表します。 だから href が「どこへ?」なら、rel は「何のために?」です。
値はスペース区切りで複数書ける
rel="noopener noreferrer" のように、必要なラベルを組み合わせられます。 (中級者以上ほど、この“複数指定できる”のが効いてきます)
rel は要素によって意味の重みが変わる
<a>rel は主に「リンククリック時の扱い」や「性質ラベル」。 <link>rel は主に「外部リソース宣言(CSS、アイコン、先読みなど)」のスイッチになります。

覚え方:href = 行き先rel = 関係(目的ラベル)

どの要素で使う?(よく出る4つ)

<a>(クリックして移動するリンク)
別タブ安全対策(noopener/noreferrer)や、SEO向けの性質ラベル(sponsored/ugc/nofollow)が代表です。
<area>(イメージマップ)
<a> とほぼ同じ考え方で、リンク先との関係を付けられます。
<link>(head内の外部リソース宣言)
stylesheet / icon / canonical / preload / preconnect など、 「このページが使う外部リソース」を宣言します。
<form>
実務で出番は多くありませんが、仕様上は rel を持てるケースがあります。 まずは <a><link> を押さえるだけで十分です。

外部リンクを別タブで開くとき:noopener / noreferrer

初心者がいちばん役に立ちやすいのが、target="_blank" とセットで使う rel です。

rel="noopener"(別タブ安全対策)
新しいタブで開いたリンク先から、元ページを window.opener 経由で触れないようにします。 ざっくり言うと「別タブ先に、元ページを操作させない」ための安全策です。
rel="noreferrer"(参照元URLを渡さない)
リンク先に「どのページから来たか(Referer)」を送らないようにします。 さらに、noreferrer は実質的に noopener 相当の効果も含む、と整理されることが多いです。

HTML

<a href="https://example.com" target="_blank" rel="noopener">
    外部サイト(安全に別タブ)
</a>

「外部リンク+別タブ」なら、迷ったら rel="noopener" を付けておく、で事故が減ります。

HTML

<a href="https://example.com" target="_blank" rel="noopener noreferrer">
    参照元も渡さない(計測に影響する場合あり)
</a>

実務メモ:noreferrer はアクセス解析で「どこから来たか」が取れなくなることがあるので、サイト内リンクに乱用はしないほうが安全です。

SEO・運用でよく見る:sponsored / ugc / nofollow

これらは「このリンクはどういう性質のリンクか」を検索エンジン等に伝えるためのラベルです。ここを正しく付けると、運用が増えても整理しやすくなります。

rel="sponsored"(広告・PR・アフィリエイト等)
お金が絡む掲載(広告、スポンサー、アフィリエイトなど)を示すラベルです。 「おすすめ」ではなく「広告枠」だよ、という区別に近いです。
rel="ugc"(User Generated Content)
コメント欄、掲示板、フォーラムなど「ユーザーが投稿した内容に含まれるリンク」を示すラベルです。 不特定多数が書ける場所ほど、ugc を使う価値が上がります。
rel="nofollow"
「このリンクを強い推薦として扱ってほしくない」というニュアンスのラベルです。 ugc/sponsored と併用されることもよくあります。

HTML

<!-- 広告・PR枠 -->
<a href="https://sponsor.example.com" rel="sponsored">
    スポンサーリンク
</a>

<!-- コメント欄など(UGC) -->
<a href="https://user-link.example.com" rel="ugc nofollow">
    ユーザー投稿リンク
</a>

コツ:「どれを付けるべきか迷う」より、そのリンクの立場を正直にラベル付けするのが一番安全です。

<link> の rel:CSS・アイコン・正規URL・先読み

<link> は “ページの外側のリソース” を宣言するための要素で、rel の値がその役割を決めます。ここは「見た目に出ないけど、裏で効く」ものが多いです。

rel="stylesheet"
CSSを読み込みます。見た目に直結するので、基本は <head> に置きます。
rel="icon" / rel="apple-touch-icon"
タブやブックマーク、ホーム画面追加などのアイコンを指定します。
rel="canonical"
このページの「正規URL(代表URL)」を検索エンジン等に伝えます。URLが増えたときの事故予防に強いです。
rel="preload"
重要リソースを優先して取りに行く“予約”です。as の指定や、実際に使う指定とのセットが重要です。
rel="preconnect"
次に使うドメインへ、DNS/TCP/TLSなどの接続準備を先に進めます。効くと速いですが、対象は絞ります。

preload(CSSの典型)

HTML

<link rel="preload" href="/assets/critical.css" as="style">
<link rel="stylesheet" href="/assets/critical.css">

よくある事故:preload だけ書いて満足してしまう(=予約したのに使っていない)。予約と使用は別物なので、セットで書きます。

preconnect(CDNの典型)

HTML

<link rel="preconnect" href="https://cdn.example.com" crossorigin>

crossorigin はケースによって必要になります。特にフォントやCDNが絡むときは、問題が出たらここを疑うと早いです。

中級者以上の整理:rel には「2つの世界」がある

ここが分かると、仕様を調べるときに迷いにくくなります。

ブラウザの動作に直結する rel
例:noopener / noreferrer / preload / preconnect など。 「ブラウザがどう動くか」が主役です。
関係ラベル(Link Relation Types)として一般化している rel
例:canonical / alternate / next など。 「関係ラベルとして、どういう語彙があるか」が主役で、一覧の基準として IANA のレジストリが使われます。

困ったら:ブラウザ挙動を知りたいならHTML標準やMDN、関係ラベル一覧を知りたいなら IANA を見る、という切り替えが便利です。

実務レシピ(よくある“組み合わせ”)

外部リンクを別タブで開く(安全優先)

HTML

<a href="https://example.com" target="_blank" rel="noopener">
    外部サイト
</a>
広告・アフィリエイト

HTML

<a href="https://ad.example.com" rel="sponsored">
    PR
</a>
コメント欄など不特定多数が貼れるリンク

HTML

<a href="https://example.com" rel="ugc nofollow">
    投稿されたリンク
</a>
表示に必要なCSSを先に確保したい(preload)

HTML

<link rel="preload" href="/assets/critical.css" as="style">
<link rel="stylesheet" href="/assets/critical.css">

よくある質問(FAQ)

rel は必須ですか?
要素によりますが、<link> はほぼ必須だと思ってOKです。 rel がないと「何のリソースか」が決まらず、意味が薄くなります。
rel の値は複数指定していいですか?
はい、スペース区切りで複数書けます。 たとえば rel="noopener noreferrer"rel="ugc nofollow" のように組み合わせます。
target="_blank" だけで問題ないですか?
外部リンクなら、基本は rel="noopener" を付けるのが安全です。 参照元URLも渡したくないなら noreferrer を追加します(ただし計測に影響する場合があります)。
nofollow を付けるとSEO的に不利になりますか?
「このリンクを強い推薦として扱ってほしくない」という性質ラベルです。 付ける・付けないは “リンクの性格” で決めるのが基本で、「とりあえず全部付ける」はおすすめしません。
preload を入れれば必ず速くなりますか?
“当たれば速い”ですが、外すと逆効果にもなり得ます。 予約したリソースを実際に使う指定とセットにし、対象を絞って検証しながら入れるのが安全です。

よくあるエラー・誤用早見表

別タブ外部リンクに target="_blank" だけ付けた
対処:rel="noopener" を検討(安全対策)。
noreferrer をサイト内リンクに大量に付けた
影響:参照元が取れず、解析や原因調査が難しくなることがあります。
preload を書いたのに警告が出る
原因:予約しただけで、実際に使っていない。対処:CSSなら rel="stylesheet" 等の使用指定もセットにします。
sponsored を付け忘れた(広告リンク)
対処:広告・PR・アフィリエイトなど、お金が絡むリンクは rel="sponsored" を付けて整理します。
「dofollow」を指定したくなった
メモ:dofollow は慣用表現で、rel に書いて“強化”するものではありません(何も付けないのが基本)。

このページに出てくる用語ミニ辞典

relationship(関係)
リンク先と今のページの「関係」を表す考え方で、rel の中心テーマです。
link type(リンクタイプ)
rel に書く1つ1つの単語(例:stylesheetcanonical)のことです。要するに「このリンクは何のため?」を表すラベルです。
スペース区切り(トークン)
rel は「単語をスペースで並べる」形式です(例:rel="noopener noreferrer")。この“単語”のことをトークンと呼ぶことがあります。
noopener
target="_blank" で別タブを開くとき、開いた先から元ページ(window.opener)を触られないようにする安全対策のラベルです。
noreferrer
リンク移動時に参照元URL(Referer)を送らないラベルです。アクセス解析や広告計測に影響が出る場合があります。
Referer(リファラ)
「どのページから来たか」を表すHTTPヘッダー名です。綴りが Referrer ではなく Referer なのは歴史的な事情です。
nofollow
検索エンジンに対して「このリンクは評価(ランキング計算)に使わなくていいよ」という意図を伝えるためのラベルです。スパム対策や、関係性が薄いリンクに使われます(実際の扱いは検索エンジン実装に依存します)。
ugc
User Generated Content(ユーザー投稿)の略です。コメント欄や掲示板など、ユーザーが投稿したリンクであることを示すラベルです。
sponsored
広告・タイアップなど「対価が発生するリンク」を示すラベルです。ステマ・広告表記の整理にも関わります。
canonical
同じ内容が複数URLで見えるときに「代表(正規URL)はこれ」と検索エンジンへ伝えるためのラベルです。重複扱いの事故を減らします。
stylesheet
外部CSSを読み込んでページの見た目を適用するためのラベルです(<link rel="stylesheet" ...>)。
icon / apple-touch-icon
タブ・ブックマーク・ホーム画面追加などに使われるアイコン指定です。用途によって必要なサイズや形式が変わります。
manifest
PWA向けの設定ファイル(Web App Manifest)を指します。アプリ名・アイコン・起動時表示などの情報をまとめます。
Resource Hints(先読み系のヒント)
「このあと必要になりそうだから、今のうちに準備してね」とブラウザにお願いする仕組みの総称です。
preload
“かなり高確率で必要” なリソースを先に取りに行ってもらう指定です。as(種類宣言)を間違えると効果が落ちたり警告が出たりします。
prefetch
“次のページで必要になりそう” なリソースを、余裕があるときに先読みする指定です。効き方はブラウザの都合(ネットワーク状況等)に左右されます。
preconnect / dns-prefetch
接続準備を早める指定です。preconnect はDNS解決+接続確立まで、dns-prefetch は主にDNS解決を先に済ませます。
modulepreload
JavaScriptのES Modules向けの先読み指定です。モジュールの依存関係を含めたロードを早められるケースがあります。
MIME type(メディアタイプ)
ファイルの中身の種類を示すラベルです(例:CSSなら text/css、JSなら application/javascript)。
origin(オリジン)
ざっくり言うと「同じサイトかどうか」を判定する単位で、scheme(http/https)hostport の組み合わせです。
CORS(Cross-Origin Resource Sharing)
別オリジンのリソースを読み込むときのルールです。フォント、先読み、外部スクリプトなどで意識することがあります。
SRI(Subresource Integrity) / integrity
CDNなど外部リソースが改ざんされていないかをハッシュで検証する仕組みです。crossorigin とセットになる場面があります。
SEO
検索エンジンにページ内容を正しく理解してもらい、見つけやすくするための考え方の総称です。canonicalnofollow 系はこの文脈で登場します。