Referrer-Policyとは、Webページが別のページへリンクするときに、参照元(リファラー)の情報をどのように送信するかを制御するHTTPヘッダーです。
これにより、ユーザーのプライバシーを保護し、送信されるデータの内容を制限できます。
SEO施策のツールでReferrer-Policyがないことを指摘されたのでレスポンスヘッダーに追加してみました。
その解説記事です。
送信先で確認したRefererの違い
| 確認するリクエスト | 送信先で受け取った値 | 分かること |
|---|---|---|
| 同一オリジンの画像取得 | 参照元のパスとクエリーを含むURL | フラグメントは送られなかった |
| 別オリジンの画像取得 | 参照元のオリジンのみ | パス・クエリーは送られなかった |
| 画像にreferrerpolicy=”no-referrer”を指定 | Refererヘッダーなし | 個別要素の指定も確認する必要がある |
掲載フィルターを読み込んだ隔離WordPressで、strict-origin-when-cross-originのHTTPヘッダーを出し、ブラウザーの画像取得を送信先で確認しました。試験では同じHTTPのホスト名違いを別オリジンにしています。HTTPSからHTTPへの移動、リンクのクリックによる遷移、CDNでの上書きはこの試験に含みません。
WordPressのsend_headersによる実HTTPでも、未設定への追加、大小文字が混在した既存ヘッダーの保持、フィルター停止後の復帰を確認しました。導入先ではHTMLと送信先の両方を確認してください。
WordPressでReferrer-Policyをレスポンスヘッダーに追加する方法
まず対象のHTMLレスポンスに既存のReferrer-Policyがあるか確認します。診断の警告だけを理由に、サイト全体のポリシーを変更しません。
子テーマのfunctions.phpへ追加します。WordPressのwp_headersにReferrer-Policyが既にあれば、大文字・小文字の違いがあっても上書きしません。サーバー、CDN、他のプラグインが別の方法で付ける値はこの判定の対象外です。そちらで設定済みなら、管理する場所を1つにまとめてください。
add_filter( 'wp_headers', function ( $headers ) {
foreach ( array_keys( $headers ) as $name ) {
if ( 'referrer-policy' === strtolower( $name ) ) return $headers;
}
$headers['Referrer-Policy'] = 'strict-origin-when-cross-origin';
return $headers;
} );Referrer-Policy オプション
例ではstrict-origin-when-cross-originを指定しています。no-referrer-when-downgradeはHTTPS同士の別サイトへパス・クエリーを送る場合があるため、同じ保護範囲ではありません。
ユーザーのプライバシーとセキュリティを保護しつつ必要な情報の共有をコントロールしましょう。
| オプション | 説明 |
|---|---|
| no-referrer | 参照元情報を全く送信しない。 |
| no-referrer-when-downgrade | HTTPS → HTTP のようなダウングレード時には送信しない。それ以外はパス・クエリーを含むURLを送信する。 |
| same-origin | 同一オリジンの場合のみ参照元情報を送信する。 |
| strict-origin | 同一・別オリジンともオリジンのみを送信。HTTPSからHTTPには送信しない。 |
| strict-origin-when-cross-origin | 同一オリジンはパス・クエリーを含むURL、別オリジンはオリジンのみ。HTTPSからHTTPには送信しない。 |
| origin | 参照元のオリジンのみを常に送信する。 |
| origin-when-cross-origin | 同一オリジンは完全なURLを送信、クロスオリジンはオリジンのみを送信。 |
| unsafe-url | 常に完全なURLを送信する。 |
確認方法
このコードが設定するのはHTTPレスポンスヘッダーです。別の指定方法としてHTMLのmeta要素や個別要素のreferrerpolicy属性もあります。
ブラウザーの開発者ツールでNetworkを開き、対象ページを再読み込みします。HTML文書のResponse HeadersでReferrer-Policyを確認し、リンク先や画像のRequest HeadersにあるRefererとは分けて読みます。

以上です。
この記事で紹介しているコードは、GitHubのMOTOKI-LLC/WAZA-codeにもまとめています。
このフィルターはWordPressが生成するレスポンスの範囲に適用します。静的ファイル、CDNキャッシュ、REST API等まで一律に設定するものではありません。Networkで対象HTMLのレスポンスヘッダーを確認し、実際の移動先へのリクエストのRefererとは区別してください。戻す場合は追加したフィルターを削除しキャッシュを消します。URLに秘密情報を含めないことは別途必要です。
各値の定義はW3C Referrer Policy仕様を参照してください。URLのフラグメントやユーザー情報は送信対象から除かれます。
Apache側の設定とPHPの設定を分けて確認する
2026年10月3日、隔離したApache 2.4.69・PHP CGI 8.2.29・WordPress 7.1.2でも、掲載フィルターによるstrict-origin-when-cross-originを記事のHTML応答で確認しました。
静的ファイルには、このPHPフィルターの値は付きませんでした。
ルートの.htaccessにno-referrerを置いた試験では、静的ファイルにはその値が付きました。
一方、ScriptAliasを使う今回のCGI構成の記事ページには届かず、PHPフィルターの値が残りました。
同じサーバーでも応答の生成経路によって設定範囲が異なるため、HTML・静的ファイル・別のサービスの応答を個別に確認します。
これはレスポンスヘッダーの確認です。
以前に確認した画像取得のRefererとは別の試験で、HTTPSからHTTPへの移動、リンクのクリック、CDNによる上書きは今回も未検証です。
よくある質問:Referrer-Policyをレスポンスヘッダーに追加する方法
Referrer-Policyとは、何ですか?
記事では、Referrer-Policyは、Webページが別のページへリンクするときに、参照元(リファラー)の情報をどのように送信するかを制御するHTTPヘッダーです。ユーザーのプライバシーを保護し、送信されるデータの内容を制限できます。SEO施策のツールでReferrer-Policyがないことを指摘されたのでレスポンスヘッダーに追加した解説記事です。
主な値は、どう違いますか?
記事の表では、no-referrerは参照元情報を全く送信しない、same-originは同一オリジンの場合のみ送信、strict-originは同一・別オリジンともオリジンのみを送信(HTTPSからHTTPには送信しない)、strict-origin-when-cross-originは同一オリジンはパス・クエリーを含むURL、別オリジンはオリジンのみ(HTTPSからHTTPには送信しない)、unsafe-urlは常に完全なURLを送信、といった違いがあります。各値の定義はW3C Referrer Policy仕様を参照してください。
この記事のコードは、どの値を出しますか? 何に適用されますか?
記事では、掲載フィルターでstrict-origin-when-cross-originのHTTPヘッダーを出します。このコードが設定するのはHTTPレスポンスヘッダーで、WordPressが生成するレスポンスの範囲に適用します。静的ファイル、CDNキャッシュ、REST API等まで一律に設定するものではありません。別の指定方法としてHTMLのmeta要素や個別要素のreferrerpolicy属性もあります。
設定したら、実際にどんなRefererが送られましたか?
記事の確認では、同一オリジンの画像取得は参照元のパスとクエリーを含むURL(フラグメントは送られない)、別オリジンの画像取得は参照元のオリジンのみ、画像にreferrerpolicy=”no-referrer”を指定した場合はRefererヘッダーなしでした。個別要素の指定も確認する必要がある、としています。
設定の確認方法を教えてください。
記事では、まず対象のHTMLレスポンスに既存のReferrer-Policyがあるか確認します。ブラウザーの開発者ツールでNetworkを開き、対象ページを再読み込みして、HTML文書のResponse HeadersでReferrer-Policyを確認し、リンク先や画像のRequest HeadersにあるRefererとは分けて読みます。
.htaccessの設定とは、どう違いますか?
記事では、隔離したApache 2.4.69・PHP CGI 8.2.29・WordPress 7.1.2で、静的ファイルにはこのPHPフィルターの値は付かず、ルートの.htaccessにno-referrerを置いた試験では静的ファイルにはその値が付きましたが、ScriptAliasを使うCGI構成の記事ページには届かず、PHPフィルターの値が残りました。同じサーバーでも応答の生成経路によって設定範囲が異なるため、HTML・静的ファイル・別のサービスの応答を個別に確認します。
元に戻すには、どうしますか? 確認していない範囲は?
戻す場合は追加したフィルターを削除しキャッシュを消します。記事では、HTTPSからHTTPへの移動、リンクのクリックによる遷移、CDNでの上書きは今回も未検証です。URLに秘密情報を含めないことは別途必要です。最新は公式で確認してください。



