2026年5月20日
2026年5月20日
WordPressのnofollow属性を正しく設定する方法
はじめに
rel="nofollow"はリンク先へのPageRank(SEO評価)を渡さない指示をGoogleに伝える属性です。2019年にGoogleはnofolowをヒントとして扱う方針に変更し、sponsoredとugcの2種類も追加しました。正しい使い方を理解して適切に設定することがSEO上重要です。
症状・原因
- アフィリエイトリンクにnofollowを付けるべきか迷っている
- Gutenbergのリンクエディタでnofollow設定の場所がわからない
- 内部リンクにもnofollowを付けてしまっていてSEOが悪化している
- コメントスパムでnofollow設定が機能していない
解決手順
ステップ1:nofollowの基本と2019年以降の変更点を理解する
【2019年以前】
nofollow = PageRankを渡さない(Googleは完全に従う)
【2019年以降】
nofollow = PageRankを渡さない(ヒント扱い・Googleが無視する場合も)
sponsored = 有料・広告・アフィリエイトリンク
ugc = ユーザー生成コンテンツ(コメント・フォーラム)
【内部リンクへのnofollow】
❌ 絶対に付けてはいけない
→ PageRankスカルプティング(2009年に廃止)
→ 内部のPageRankが無駄に消滅する
→ 「サイロ設計」と混同しないこと
【nofollowを付けるべきリンク】
✅ アフィリエイト(sponsored)
✅ 広告・PR(sponsored)
✅ コメント欄(ugc)
✅ 信頼性不明の外部サイト(nofollow)
✅ ログインページ・プライバシーポリシー等の法的ページ(任意)
ステップ2:Gutenbergのリンクにnofollowを設定する
【Gutenbergでのnofollow設定】
1. リンクを選択 → リンクボタンをクリック
2. リンクポップオーバーの右側「⋮」(詳細設定)をクリック
3. 「rel」フィールドに "nofollow" と入力
4. 複数指定: "nofollow noopener noreferrer"
または:
1. リンクを選択
2. ブロックの「HTMLとして編集」モード
3. <a href="..." rel="nofollow"> を直接編集
【Classic Editorでの設定】
テキストタブで直接 rel="nofollow" を追加
// Gutenberg のリンクダイアログに rel フィールドを追加
// register_block_type では標準でrel属性をサポート
// → 追加プラグイン不要で Gutenbergのリンクダイアログから設定可能
// → ただし UI が分かりにくいため プラグイン「Add nofollow to links」も有用
ステップ3:特定リンクに自動でnofollowを設定する
// functions.php: 外部リンクにのみ nofollow を自動追加
add_filter('the_content', function(string $content): string {
$home_domain = parse_url(home_url(), PHP_URL_HOST);
return preg_replace_callback(
'/<a\s+([^>]*)href=["\']((https?:)?\/\/([^"\'\/]+)[^"\']*)["\']([^>]*)>/i',
function(array $m) use ($home_domain): string {
$link_domain = $m[4];
// 内部リンクはスキップ(絶対にnofollowしない)
if ($link_domain === $home_domain) {
return $m[0];
}
$before = $m[1];
$url = $m[2];
$after = $m[5];
// 既存のrel取得
preg_match('/rel=["\']([^"\']*)["\']/', $before . $after, $rel_m);
$rels = $rel_m ? array_filter(explode(' ', $rel_m[1])) : [];
// nofollowを追加(sponsoredがあれば追加しない)
if (!in_array('sponsored', $rels, true) && !in_array('nofollow', $rels, true)) {
$rels[] = 'nofollow';
}
if (!in_array('noopener', $rels, true)) {
$rels[] = 'noopener';
}
$new_rel = 'rel="' . implode(' ', $rels) . '"';
$attrs = $before . $after;
if ($rel_m) {
$attrs = preg_replace('/rel=["\'][^"\']*["\']/', $new_rel, $attrs);
} else {
$attrs .= ' ' . $new_rel;
}
return '<a ' . trim($attrs) . ' href="' . esc_url($url) . '">';
},
$content
);
});
ステップ4:Yoast SEOのnofollow設定を使う
【Yoast SEO でのリンク設定】
Yoast SEO → 設定 → サイトの表示 → リンク
・外部リンクにデフォルトでnofollow: ON/OFF
・外部リンクを新しいタブで開く: ON/OFF
・内部リンクにnofollowを追加: 絶対にOFFのまま
【個別リンクへの設定(Yoast SEO Premium)】
リンクを選択 → リンク設定 → nofollow チェックボックス
【All in One SEO でのリンク設定】
All in One SEO → リンクアシスタント
・記事ごとの内部リンク提案
・外部リンクの一括nofollow設定
ステップ5:既存コンテンツのnofollowを一括確認・修正する
# 内部リンクにnofollowが付いていないか確認
wp post list --post_status=publish --format=ids | \
xargs -I{} sh -c '
content=$(wp post get {} --field=post_content 2>/dev/null)
# 内部リンクのnofollow検索
echo "$content" | grep -oP "href=\"https?://example\.com[^\"]*\"[^>]*rel=\"[^\"]*nofollow[^\"]*\""
' | head -20
# データベースで内部リンクのnofollow属性を除去
wp eval "
global \$wpdb;
\$posts = \$wpdb->get_results(
\"SELECT ID, post_content FROM {\$wpdb->posts}
WHERE post_status = 'publish'
AND post_content LIKE '%example.com%nofollow%'\"
);
foreach (\$posts as \$post) {
// 内部リンクのnofollowを除去する処理
echo 'Post ID: ' . \$post->ID . ' を確認してください' . PHP_EOL;
}
echo '合計: ' . count(\$posts) . '件';
"
注意事項
- 内部リンクに
nofollowを付けると、サイト内部のPageRankフローが途切れてSEOに悪影響が出ます。内部リンクには絶対にnofollowを付けないでください - Googleはnofollowを「ヒント」として扱うため、nofollowを付けても検索結果に表示される可能性はゼロではありません。有害コンテンツへのリンク回避には別途対策が必要です
- 2019年以降、アフィリエイトリンクには
nofollowよりsponsoredが推奨されています。古いコンテンツのnofollowをsponsoredに更新することも検討してください
まとめ
nofollowは内部リンクには絶対に付けず、外部リンクのうちアフィリエイト・広告はsponsored、コメント等ユーザー投稿はugc、信頼性不明な外部リンクはnofollowと使い分けます。Gutenbergのリンクダイアログの詳細設定からrel属性を手動設定できます。the_contentフィルターで外部リンクに自動でnofollow+noopenerを付ける実装が効率的です。内部リンクのnofollow有無は定期的にWP-CLIで確認してください。