アンカーテキスト:Googleが使えるリンクの書き方
アンカーテキストはaタグと実際のhrefの間に置き、リンク先を説明します。文脈外テスト、6つの手順、何も与えないリンクを見つけるスクリプトをまとめます。

Googleが使えるアンカーテキストを書くには、タグの間にリンク先の説明を置き、その周りの要素が実際のhrefを持つ<a>であることを確かめます。これは別々の2つの条件で、別々に失敗します。言葉は完璧でもhrefがなければリンクではなく、クロールできるリンクでもテキストがなければGoogleに行き先が伝わりません。
この章は、どのページをどのページへリンクするかを決めた後の話です。それはサイト構造の話で、内部リンク戦略で扱っています。ここでは1段下の要素そのもの、つまりhref、言葉、そして言葉がないときにGoogleが示す2つの代替を見ます。
Googleがリンクから実際に読むもの
3つあり、優先順位は固定です。「Make your links crawlable」を2026年10月29日に確認すると、最初に要素のルールがあります。Googleがリンクをクロールできるのは、href属性を持つ<a>要素のときだけです。次にアンカーテキストを挙げ、アンカーが空のときの代替を2つ示します。1つはtitle属性、もう1つは画像を包むリンクの場合の画像のaltです。https://developers.google.com/search/docs/crawling-indexing/links-crawlable
| 層 | 必要なもの | 欠けた場合 |
|---|---|---|
| 要素 | hrefを持つ<a> | リンクとしてクロールされない |
| hrefの値 | javascript:…ではないアドレス | Googleは「解決を試みる」ことがある |
| テキスト | タグの間の言葉 | titleに代替される |
| 画像リンク | 内側の画像のalt | 読むものが残らない |
一括で直すときは順番が効きます。アイコンリンクがaria-labelだけを持ちaltを持たない場合、スクリーンリーダーには読めても、検索側には文書化された名前がありません。aria-labelはそのページのどこにも出てきません。内側の画像にaltを足せば、1ピクセルも変えずに検索側の問題が直ります。
hrefはリンクが存在するかを決めます。テキストが価値を決めます。
単体で読んでも通じるアンカーテキストの書き方
Googleはテストを公開していて、1リンクあたり約2秒で終わります。アンカーテキストだけを文脈から外して読み、それだけで意味が通るほど具体的か確認します。ページが何についてか分からなければ、より説明的なテキストが必要です。「詳しく見る」は失敗します。「記事を読む」も失敗します。「GPTBotのユーザーエージェント一覧」は通り、「2026年の返金ポリシー」も通ります。
同じページは両極端も警告しています。一般的すぎるテキストと、「不自然に長い」テキストです。後者は文全体がリンクに飲み込まれています。行き先を名指しする3〜6語を目指してください。文脈はリンクの外の文に残し、リンクの中に入れません。
実行:1ページを6ステップで直す
1ページずつ、この順番で進めます。手順1〜3はクローラーに何も与えないリンクを除き、手順4〜6はすでに機能しているリンクを改善します。
- ページ上のすべてのアンカーを列挙し、2つの条件を印付けます。
href属性がない、空白を詰めてもテキストがない。下のスクリプトかブラウザのコンソールを使います。 - 印が付いたアンカーのうち画像を包むものには、写真ではなく行き先を説明する
altを書きます。記事へのサムネイルリンクなら、記事の見出しを入れます。 - 印が付いたアンカーのうち操作部品、つまりメニューの開閉、投票ボタン、カルーセルの矢印は触らず、隠れた行き先がサイト内の通常のリンクから到達できることを確認します。
- テキストのあるアンカーには、文脈から外すテストを適用します。失敗したものは、行き先を3〜6語で名指しするように書き直します。
- およそ100文字を超えるアンカーテキストは、対象を名指しする部分まで削ります。周りの文が残りを担当し、Googleのページも文脈をリンクの外に置くよう明示しています。
- 同じテキストを2つの行き先に使っていないか、1つの行き先に2つのテキストを使っていないか確認します。1つの行き先に1つの言い方で、一貫して使います。
飛ばされやすいのが手順6で、効いてくるのも手順6です。3つのページが料金ページへ「料金」「プラン」「費用を見る」とリンクすると、各言い方が説明の3分の1ずつを運び、そのページを理解しようとする回答エンジンには部分的な名前が3つあることになります。
成果物:スクリプトとチェックリスト
このスクリプトは、公開中のページでクローラーに何も与えないアンカー、つまりhrefがない、またはテキストも画像のaltもないものを出力します。Python 3以外は不要です。
import sys, urllib.request
from html.parser import HTMLParser
class Links(HTMLParser):
def __init__(self):
super().__init__(convert_charrefs=True)
self.rows, self.cur = [], None
def handle_starttag(self, tag, attrs):
a = dict(attrs)
if tag == "a":
self.cur = {"href": a.get("href"), "text": "",
"aria": (a.get("aria-label") or "").strip(),
"img": (a.get("title") or "").strip()}
elif tag == "img" and self.cur is not None:
self.cur["img"] = (a.get("alt") or "").strip()
def handle_data(self, d):
if self.cur is not None:
self.cur["text"] += d
def handle_endtag(self, tag):
if tag == "a" and self.cur is not None:
self.rows.append(self.cur)
self.cur = None
req = urllib.request.Request(sys.argv[1], headers={"User-Agent": "Mozilla/5.0"})
page = urllib.request.urlopen(req, timeout=30).read().decode("utf-8", "replace")
p = Links()
p.feed(page)
bad = 0
for r in p.rows:
named = r["text"].strip() or r["img"]
if r["href"] is None or not named:
bad += 1
why = "no href" if r["href"] is None else "no text"
print(f'{why:8} {(r["text"].strip() or r["aria"] or "")[:40]:40} {(r["href"] or "")[:50]}')
print(f'{bad} of {len(p.rows)} anchors give a crawler nothing')
linkcheck.pyとして保存し、python3 linkcheck.py https://your-site.example/を実行します。配信されたHTMLを読むのが要点で、スクリプトが動く前にクローラーが見るものを見ます。
| 確認 | 合格条件 |
|---|---|
| 要素 | すべての遷移先が<a href> |
| 空テキスト | ゼロ、または各リンクに画像のaltがある |
| 文脈外 | テキストだけで行き先が分かる |
| 長さ | およそ3〜8語で、文全体ではない |
| 一貫性 | 1つの行き先に1つの言い方 |
| 密集 | 言葉を挟まず2つのリンクが接していない |
失敗する3つのパターン
どれも実際の本番サイトに現れ、ブラウザでは壊れて見えません。
- メニューの開閉ボタンはリンクではありません。設計上
hrefを持たないことがよくあります。トリガーとしては問題なく、その先のページが他にどこにも出てこなければ致命的です。メニューを変える前にフッターとsitemapを確認してください。 aria-labelだけのアイコンリンクはアクセシビリティ監査を通り、検索には何も残しません。文書化された代替はtitleと画像のaltだからです。aria-labelは残し、altを足します。- 100文字を超えるアンカーテキストは、見出しや段落全体が包まれた印です。Googleは文脈をリンクの周りに置くよう求め、中に入れることは求めていません。
ここで止まること
アンカーテキストは、クローラーが到達できないページを救えませんし、個々のリンクの価値も教えてくれません。Googleの文書は何を読むかを説明しますが、重みは公開していません。正直なチェックリストにも出せません。Googleが個々のリンクにどれだけの重みを与えるかは分かりません。
インデックスにページが欠けているなら、1段上から始めます。AIクローラーの到達性チェックで、到達性が先、文言は後です。この章は通常の編集リンクを前提にしています。有料リンクとユーザー生成リンクはrelによる資格情報が必要で、別のルールです。
よくある質問
アンカーテキストは何語くらいが適切ですか
Googleは数を示しておらず、避ける方向を2つだけ示しています。一般的すぎるものと「不自然に長い」ものです。3〜6語でほとんどの行き先は名指しでき、残りは文脈外テストで決まります。
内部リンクすべてに狙うキーワードを入れるべきですか
いいえ。同じページはキーワードの詰め込みをスパムポリシー違反とし、読者が次のページを理解するためにその言葉を必要とするか問っています。一貫性は繰り返しに勝ります。行き先ごとに1つの言い方を、文に合う場所で使います。
アイコンリンクにはaria-labelだけで十分ですか
スクリーンリーダーには十分です。検索には、Googleのリンクテキスト文書に名前がなく、文書化された代替はtitleと内側の画像のaltです。計測した27のトップページでは、テキストのないリンクを名指しする方法としてaria-labelだけが最も多くなっていました。
JavaScriptで追加したリンクは数えますか
Googleのページは、示されたHTMLマークアップを使う限りクロールできるとしています。つまり最終的に<a href>になる場合です。上のスクリプトはそれを見ないので、URL Inspectionツールのレンダリング済みHTMLで確認します。
この作業はフローのどこに入りますか
内部リンク戦略で構造を決めた後、公開前です。プロダクトの集客フローは公開したページと追加したリンクの記録を残すので、次の確認では既知の状態と比べられます。
収録: QueryWinガイド · レベル2


