2026年9月28日

2026年9月28日

WordPressのフィード(RSS/Atom)を無効化する方法|全体・コメントだけの止め方と影響

WordPress のフィード(/feed/ などの RSS/Atom)は、子テーマか mu-plugin に数行のコードを書けば、URL へのアクセスをリダイレクトまたはエラーにし、head のフィードリンクも消せます。この記事では、無効化する前に確認すべき影響、全体を止めるコード、コメントフィードだけを止める方法、確認手順を順に説明します。

WordPress が出しているフィードの種類

まず、何が止まるのかを把握しておきます。WordPress は標準で次のようなフィードを持っています。

  • 投稿フィード:/feed/(RSS2)、/feed/atom/、/feed/rdf/ など
  • コメントフィード:/comments/feed/、各記事の /記事のURL/feed/
  • アーカイブ別のフィード:カテゴリー、タグ、投稿者、検索結果ごとの /feed/
  • パーマリンクを使わない形式:/?feed=rss2 など

head には feed_links()(wp_head の優先度2)と feed_links_extra()(優先度3)が <link rel="alternate" type="application/rss+xml"> を出力します。feed_links() はテーマが automatic-feed-links をサポートしているときだけ出力されます。ブロックテーマでは、このサポートが自動で有効になります。

無効化する前に確認したい影響

フィードは訪問者からは見えにくいものの、外部のサービスが使っていることがあります。止める前に次を確認してください。

  • RSS リーダーの購読者:Feedly などで購読している人には更新が届かなくなります。
  • 連携サービス:SNS への自動投稿、RSS からのメールマガジン配信、他サイトの新着表示ウィジェットなどがフィードを読んでいる場合、止まります。
  • Google Search Console:フィードをサイトマップとして送信している場合は、送信済みのサイトマップを見直します。WordPress 5.5 以降のコア標準サイトマップ(/wp-sitemap.xml)や SEO プラグインのサイトマップは、フィードを止めても影響を受けません。

「スパムサイトに記事を自動転載されるのを防ぎたい」という理由で止める場合もありますが、転載はページを直接取得して行われることも多く、フィード停止だけで防げるとは限りません。転載対策が目的なら、フィードの内容を抜粋にするだけで足りることもあります。

全体を止めずに済む方法:フィードの内容を抜粋にする

管理画面の「設定」→「表示設定」には、フィードに含める内容を全文にするか抜粋にするかを選ぶ項目と、フィードに表示する投稿数の項目があります(表記はバージョンによって多少異なります)。

抜粋にすると、購読者には更新通知とリンクだけが届き、本文はサイト上で読んでもらう形になります。購読者を失わずに全文転載を避けたい場合は、まずこちらを検討してください。

フィードを全体で無効化するコード

作業前にバックアップを取り、ステージング環境で試してから本番に反映します。親テーマの functions.php に書くとテーマ更新で消えるため、子テーマの functions.php か mu-plugin(wp-content/mu-plugins/disable-feeds.php など)に書きます。

<?php
/**
 * Plugin Name: Disable Feeds
 * Description: RSS/Atom フィードを無効化し、head のフィードリンクを削除する。
 */

// 1. head の <link rel="alternate" type="application/rss+xml"> を削除
add_action( 'init', function () {
	remove_action( 'wp_head', 'feed_links', 2 );
	remove_action( 'wp_head', 'feed_links_extra', 3 );
} );

// 2. フィードの URL にアクセスされたらトップページへ 301 リダイレクト
add_action( 'template_redirect', function () {
	if ( ! is_feed() ) {
		return;
	}
	wp_safe_redirect( home_url( '/' ), 301 );
	exit;
}, 1 );

template_redirect は、WordPress がフィードを生成する処理(do_feed())より前に実行されます。ここで is_feed() を判定して処理を終えれば、RSS2・Atom・RDF、コメントフィード、アーカイブ別フィード、プラグインが add_feed() で追加した独自フィードもまとめて止まります。

ネット上には do_feed_rss2 などのフックを1つずつ指定する書き方もあります。こちらでも動きますが、フィードの種類ごとにフックを列挙する必要があり、漏れが出やすい点に注意してください。

リダイレクトではなく「提供終了」を返したい場合

トップページへのリダイレクトは、購読者がブラウザでフィード URL を開いたときに迷わずに済む利点があります。一方、フィードが今後も存在しないことをクローラーやリーダーに明示したい場合は、ステータス 410(Gone)を返す方法もあります。上のコードの2の部分を次に置き換えます。

add_action( 'template_redirect', function () {
	if ( ! is_feed() ) {
		return;
	}
	wp_die(
		esc_html( 'このサイトではフィードを提供していません。' ),
		'',
		array( 'response' => 410 )
	);
}, 1 );

どちらを選んでも、ページの検索結果への掲載には直接影響しません。運用方針に合わせて選んでください。

コメントフィードだけを止める方法

投稿フィードは残し、ほとんど使われないコメントフィードだけを止めたい、というケースも多くあります。

// head のコメントフィードのリンクを出さない
add_filter( 'feed_links_show_comments_feed', '__return_false' );

// コメントフィードの URL はトップページへ
add_action( 'template_redirect', function () {
	if ( is_comment_feed() ) {
		wp_safe_redirect( home_url( '/' ), 301 );
		exit;
	}
}, 1 );

feed_links_show_comments_feed フィルターは、サイト全体のコメントフィードへのリンクを制御します。各記事のコメントフィードのリンクは feed_links_extra() が出すため、記事側のリンクも消したい場合は remove_action( 'wp_head', 'feed_links_extra', 3 ) を併用します。ただしこれを外すと、カテゴリーやタグのフィードリンクも head から消えます。

プラグインで無効化する場合

コードを書かずに済ませたい場合は、フィード無効化の機能を持つプラグインや、高速化系プラグインの「不要な出力の削除」機能を使う方法があります(2026年10月現在)。フィード無効化専用の小さなプラグインは更新が止まっているものもあるため、導入前に公式ディレクトリで最終更新日と動作確認済みのバージョンを確認してください。機能が単純なので、長く保守されていないプラグインを入れるより、上のコードを mu-plugin にするほうが管理しやすい場合もあります。

無効化できたかを確認する

ページキャッシュや CDN のキャッシュを削除してから、ログアウト状態で確認します。

curl -sI https://example.com/feed/
curl -sI https://example.com/comments/feed/
curl -sI "https://example.com/?feed=rss2"

301 とリダイレクト先(Location)、または 410 が返れば止まっています。200 が返る場合は、次の順に確認してください。

  • キャッシュが残っていないか(フィードは別のキャッシュ設定になっていることがあります)
  • mu-plugin が wp-content/mu-plugins/ 直下にあるか
  • サーバーや CDN がフィードを独自にキャッシュしていないか

あわせて、トップページや記事ページのソースで application/rss+xml を検索し、head のリンクが消えていることを確かめます。最後に、連携サービスやサイトマップの送信状況に問題が出ていないかを数日見ておくと安心です。

まとめ

  • フィードは投稿・コメント・アーカイブ別など複数あり、外部サービスが使っていることがある
  • 転載対策が目的なら、まず「表示設定」でフィードを抜粋にする方法を検討する
  • 全体を止めるなら template_redirect で is_feed() を判定し、301 か 410 を返すのが漏れにくい
  • head のリンクは feed_links(優先度2)と feed_links_extra(優先度3)を remove_action() で外す
  • コメントフィードだけなら feed_links_show_comments_feed と is_comment_feed() で止められる

お気軽にご相談ください

お見積りへ お問い合わせへ
▲