内部リンクのnofollowをやめる判断と、検索に出さない正しい手順
ログインページや買い物かごへのリンクに、rel="nofollow" が付いている。いつ、誰が、なぜ付けたのかは分からない。テンプレートを引き継いだ時点ですでにそうなっていた、というケースもよくあります。
結論から書きます。その nofollow は、たいてい外して構いません。検索結果に出したくないページがあるなら、止めるのはリンク側ではなくページ側です。
nofollowが伝えているのは「関連付けないでほしい」だけ
Google の公式ドキュメントは、rel 属性の使い分けをこう説明しています。rel="sponsored" は有料リンク、rel="ugc" はユーザーが投稿したコンテンツ、そして rel="nofollow" は「リンク先と自分のサイトを関連付けてほしくない」という合図です。値は複数を並べてよく、カンマ区切りでも空白区切りでも構わない、とも書かれています。
ここに「インデックスさせない」も「クロールさせない」も出てきません。
使いどころについて、公式はさらに踏み込んだ言い方をしています。nofollow は情報源を信頼できないときにだけ使うものであり、サイト上のすべての外部リンクに付けるものではない、と。自社で作って自社で運用しているページが、ここで言う「信頼できない情報源」に当たることは考えにくい。少なくとも、自社のログインページはそうではないはずです。
つまり、内部リンクの nofollow は、公式が説明している用途とかみ合っていません。
「評価を集めたい」から付けている場合
内部リンクの一部に nofollow を付けて、残りの重要なページへ評価を寄せる。かつて PageRank スカルプティングと呼ばれた考え方です。PageRank とは、ページ間のリンク関係をもとに算出される重要度のスコアを指します。今でも社内のコーディング規約や、古いテーマの設定画面に残っていることがあります。
この手法には、実務上の弱点が一つあります。効果を自分で検証できないことです。
リンクを通じて評価がどれだけ渡ったのかを数字で取り出す手立ては、通常の運用の範囲では見当たりません。付けた場合と付けなかった場合を、同じ時期・同じ条件で並べて比べることもできない。順位が動いても、それがリンク属性のせいなのか、記事の内容や検索結果側の変動のせいなのかを切り分けられません。確かめられないまま、HTML には恒久的な設定だけが残ります。
外すべきかどうかの判断も、そのぶん難しくなります。
ですからここでは、「渡らなかった評価が消えるのか、他に配り直されるのか」を論じません。かわりに、確かめられる手段のほうへ寄せることをおすすめします。検索結果に出したくないのであれば、それを直接指示する仕組みが公式に用意されています。
検索結果から消すのはnoindexの仕事
公式ドキュメントは、noindex を <meta> タグまたは HTTP レスポンスヘッダーで実装するルールとして説明しています。目的は明快で、Google などの検索エンジンが特定のコンテンツをインデックスに登録するのを防ぐことです。
HTML ページなら、<head> の中に一行入れるだけです。
<meta name="robots" content="noindex">
HTML ではないファイルには、この方法が使えません。PDF や動画ファイル、画像ファイルには <head> がないからです。そのために用意されているのが X-Robots-Tag レスポンスヘッダーで、公式も非 HTML リソース向けの手段としてこれを挙げています。返し方は次のようになります。
HTTP/1.1 200 OK
X-Robots-Tag: noindex
資料ダウンロード用の PDF を検索結果に出したくない、という要望はよく出ます。そのときに探すべきなのはリンク側の属性ではなく、配信しているサーバーのヘッダー設定です。
なお公式は、noindex をインデックス登録を制御する他のルールと組み合わせられるとも書いています。挙げられている例が <meta name="robots" content="noindex, nofollow"> です。ここで並んでいる nofollow は、<a> タグに書く rel="nofollow" とは置き場所が違います。同じつづりですが、書く場所が違えば別の設定だと考えたほうが混乱しません。
ちなみに公式ドキュメントの中で、noindex は「ルール」、nofollow は「ヒント」と書き分けられています。この差は覚えておく価値があります。
robots.txtは「隠す」ための仕組みではない
ここが、いちばん取り違えられているところです。
公式は robots.txt の役割を、サイト上の URL へのクローラーのアクセスを管理するもの、主な目的はサーバーへの過負荷を避けること、と説明しています。そして続けて、こう明言しています。robots.txt は Google からページを隠すためのものではない、隠したいなら noindex かパスワード保護を使う、と。
さらに、robots.txt の指示はクローラーの挙動を強制できるものではない、とも書かれています。Googlebot をはじめ良識のあるクローラーは従いますが、従わないクローラーもあります。情報を確実に守りたい場合には、robots.txt では足りないということです。
守秘が目的なら、答えは認証です。nofollow でも robots.txt でもありません。
だから、ログインページの扱いで robots.txt から入るのは順序が逆になりがちです。クロールを止めてしまうと、そのページに置いた noindex をクローラーが読み取れない状況が生まれることがあります。まず読ませて、消えたのを確かめてから、クロール制御が本当に要るかを考える。この順番のほうが、途中で確認できる分だけ安全です。ここは robots.txtでブロックしたページのnoindexが効かないとき で詳しく扱っています。
目的別・どれを使うかの対応表
| やりたいこと | 使うもの | 置き場所 | 確認方法 |
|---|---|---|---|
| 検索結果に出したくない(HTMLページ) | noindex | 対象ページの <meta name="robots"> | site: 検索とURL検査ツール |
| 検索結果に出したくない(PDF・画像・動画) | noindex をヘッダーで | サーバー設定の X-Robots-Tag | curl -I <URL> でヘッダーを見る |
| クローラーのアクセス自体を減らしたい | robots.txt | ドメイン直下の /robots.txt | ブラウザで直接開く |
| 第三者に絶対に見せたくない | パスワード保護・認証 | サーバーまたはアプリ側 | 未ログインでアクセスし401/403を確認 |
| リンク先と自サイトを関連付けたくない | rel="nofollow" | <a> タグ | ページのソースを確認 |
表の一行目が、さきほどのログインページに当たります。ログイン画面は誰でも開ける前提のページなので、認証で塞ぐ対象ではなく noindex で十分なことが多い。逆に、社内向けの管理画面や配布前の資料は四行目です。検索に出るかどうか以前に、URL を知っている人が開けてしまう状態そのものが問題になります。
五行目、つまり rel="nofollow" の行に「検索結果に出したくない」が入っていない点を確認してください。そこが、この記事の要点です。
自社サイトの内部nofollowを洗い出す手順
現状を数えるところから始めます。テンプレート由来の設定は、思っているより広い範囲に効いています。
-
主要テンプレートのページを1枚選び、nofollow が付いたリンクを列挙する。 ブラウザの開発者ツールのコンソールで次を実行すると、そのページの一覧が取れます。
[...document.querySelectorAll('a[rel~="nofollow"]')].map(a => a.href) -
そのうち自社ドメイン宛て(=内部リンク)だけに絞る。 ここが今回の対象です。
[...document.querySelectorAll('a[rel~="nofollow"]')] .map(a => a.href) .filter(h => new URL(h).host === location.host) -
ヘッダー・フッター・サイドバーのどこから出ているかを特定する。 1枚のページで見つかった内部 nofollow が共通パーツ由来なら、全ページで同じことが起きています。テンプレートのソースを
rel=で検索して、出力箇所を押さえてください。コマンドラインならcurl -s <URL> | grep -o '<a[^>]*rel="[^"]*nofollow[^"]*"[^>]*>'でも同じ確認ができます。 -
リンク先ページを開き、目的を1つに決める。 「検索に出したくない」のか「誰にも見せたくない」のか「単に重要でないだけ」なのか。前節の対応表に当てはめます。ここを飛ばして属性だけ足し引きすると、また同じ設定が復活します。
-
「検索に出したくない」に該当したページへ
noindexを入れる。 リンク側は触りません。入れたら、そのページがクロールを許可された状態にあるかを robots.txt で確認します。 -
内部リンクの
rel="nofollow"を外す。 目的がページ側で満たされたので、リンク側の設定は役目がありません。外した後にリンクが正しく機能するか、hrefが通常の HTML の<a>タグとして書かれているかも合わせて見ておきます。 -
site:検索と Search Console で、消えたかどうかを確認する。 ここで初めて結果が観測できます。反映まで日数がかかることもあるので、当日の判定は避けてください。
四番目のステップが、実質的にいちばん時間を使います。逆にいえば、そこさえ決まれば残りは機械的です。
ワークスルー:ログインページで実際にやってみる
https://example.com/login が site: 検索で出てきてしまう、という状況を想定します。ヘッダーの「ログイン」リンクには rel="nofollow" が付いています。
まず手順2を実行すると、内部 nofollow が3件見つかりました。/login、/cart、/mypage です。3件ともヘッダーの共通パーツから出ていました。手順3で確認済みです。
次に手順4で目的を決めます。ログイン画面は、URL を知っていれば誰でも開ける画面です。見られて困るわけではない。困っているのは検索結果に並ぶことだけです。したがって対応表の一行目、noindex に該当します。/cart と /mypage も同じ判断になりました。
手順5で3ページに <meta name="robots" content="noindex"> を入れ、robots.txt に /login などを塞ぐ記述がないことを確認します。ここで塞いでいると、置いたばかりの指示が読まれないまま残ることがあります。
そのうえで手順6、ヘッダーの rel="nofollow" を3件とも外します。この時点で、リンク側には何の細工も残っていません。
あとは待って確認するだけです。数日おきに site:example.com/login を見ます。消えていなければ、Search Console でそのURLの状況を見にいきます。まだ変更後のページが読まれていないだけなのか、それとも設定側にまだ問題が残っているのか。切り分けの起点はそこです。
この一連で HTML に加えた変更は、実質「noindex を3行足して、rel="nofollow" を3か所消した」だけになります。
つまずきやすいところ
リンクが <a href="..."> になっていない。 JavaScript のクリックイベントだけで遷移している箇所は、そもそも nofollow 以前に、リンクとして扱われないことがあります。公式ドキュメントの例も、href を持つ通常の <a> タグで書かれています。内部リンクを整理するときは、この点も一緒に見ておくと無駄がありません。
noindex を入れたページを、同時に robots.txt でも塞いでしまう。 二重に対策したつもりが、確認できない状態を作ります。片方ずつ順番に入れてください。
PDF に <meta> タグを書こうとする。 書けません。ヘッダー側で対応します。
外部リンク全部に nofollow を付けている。 公式の書き方は「信頼できないときにだけ」であって、すべてに付けることは想定されていません。外部リンクの扱いは 外部リンクを貼るとSEOで損をするのか と 広告・アフィリエイトリンクのrel属性 が近い話題です。
robots.txt で塞げば秘密が守れると考える。 守れません。従わないクローラーがあることを公式が明記しています。認証を使ってください。
公開前の自己点検
作業が終わったら、次の5つを見てください。全部が「はい」になれば、リンク側とページ側の役割分担が整理できています。
- 内部リンクに残っている
rel="nofollow"は0件になっているか(手順2のスニペットで再確認) - 検索結果に出したくないページには、
noindexが入っているか - その
noindexを入れたページは、robots.txt で塞がれていないか - 非 HTML ファイルの対応は、
<meta>ではなくヘッダーで行われているか - 見られては困るページには、
noindexではなく認証がかかっているか
一つでも「いいえ」があるなら、対応表に戻って目的から決め直すのが早道です。
内部リンクそのものの設計、つまりどこからどこへ何本つなぐかは別の話題になります。そちらは 内部リンクの最適化 にまとめています。
出典
