2026年9月24日

2026年9月24日

WordPressのShortlink(短縮URL)を削除する方法|headのタグとHTTPヘッダーを止める

WordPress は投稿ページの <head> に rel="shortlink" のタグを、HTTP レスポンスに Link: <...>; rel=shortlink ヘッダーを自動で出力します。これは子テーマか mu-plugin に remove_action() を2行書けば止められます。この記事では、出力の仕組み、削除するコード、確認方法、そして「削除しても変わらないこと」までを順に説明します。

Shortlink とは何か、どこに出ているか

Shortlink は https://example.com/?p=123 のように投稿 ID だけで記事を指す URL です。パーマリンク設定を「投稿名」などにしていても、WordPress は内部的にこの形式の URL を持っており、アクセスされると本来のパーマリンクへ 301 リダイレクトします(redirect_canonical() の働きです)。

出力されている場所は主に3つです。

  • HTML の head:<link rel='shortlink' href='https://example.com/?p=123' />。関数 wp_shortlink_wp_head() が wp_head フック(優先度10)で出力します。
  • HTTP レスポンスヘッダー:Link: <https://example.com/?p=123>; rel=shortlink。関数 wp_shortlink_header() が template_redirect フック(優先度11)で送ります。
  • 管理バー:ログイン中に投稿を表示すると、管理バーに「短縮リンク」の項目が出ることがあります(wp_admin_bar_shortlink_menu())。表示の有無はバージョンやテーマで異なるため、手元の画面で確認してください。

いずれも出力されるのは投稿や固定ページなど個別ページを表示したときで、一覧ページには基本的に出ません。

削除する理由と、期待しすぎないほうがよい点

削除する理由としてよく挙げられるのは次のようなものです。

  • head を整理し、不要なタグを減らしたい
  • 投稿 ID を外部に見せたくない
  • 共有時に短縮 URL が使われるのを避けたい

ただし効果は控えめです。タグ1行とヘッダー1行がなくなるだけなので、表示速度への影響はほぼありません。SEO 面でも、Google は rel="canonical" やリダイレクトを手がかりに正規 URL を判断するため、Shortlink が残っていても重複コンテンツとして不利になることは通常ありません。投稿 ID も REST API や管理画面の URL などから分かるため、隠したことでセキュリティが上がるわけではありません。

「見た目と出力を整理する作業」と位置づけておくと、期待とのずれが起きません。

削除するコード(子テーマまたは mu-plugin)

作業前にバックアップを取り、できればステージング環境で試してから本番に反映してください。親テーマの functions.php に書くと、テーマ更新で消えてしまいます。テーマを替えても効かせたい場合は mu-plugin が向いています。

wp-content/mu-plugins/ フォルダを作り(なければ)、たとえば remove-shortlink.php という名前で次の内容を保存します。

<?php
/**
 * Plugin Name: Remove Shortlink
 * Description: head の rel="shortlink" と HTTP の Link ヘッダーを出力しない。
 */

add_action( 'init', function () {
	// <head> 内の <link rel='shortlink'> を止める
	remove_action( 'wp_head', 'wp_shortlink_wp_head', 10 );

	// HTTP レスポンスの Link: <...>; rel=shortlink を止める
	remove_action( 'template_redirect', 'wp_shortlink_header', 11 );
} );

ポイントは remove_action() の第3引数です。登録時と同じ優先度を指定しないと削除されません。head 側は10、ヘッダー側は11です。ここを省略すると既定値の10が使われるため、ヘッダー側だけ消えないという状態になりがちです。

子テーマに書く場合は、子テーマの functions.php に add_action( 'init', ... ) の部分だけを追記すれば動きます。

管理バーの短縮リンク項目も消したい場合

ログイン中にだけ見える項目なので訪問者には関係ありませんが、消したい場合は次のようにします。

add_action( 'admin_bar_menu', function () {
	remove_action( 'admin_bar_menu', 'wp_admin_bar_shortlink_menu', 90 );
}, 1 );

admin_bar_menu の実行中に、優先度90より前(ここでは1)で削除する必要があるため、このような書き方になります。

フィルターで Shortlink 自体を空にする方法

wp_get_shortlink() で取得される値そのものを空にしたい場合は、pre_get_shortlink フィルターで空文字を返す方法もあります。

add_filter( 'pre_get_shortlink', '__return_empty_string' );

wp_shortlink_wp_head() と wp_shortlink_header() は Shortlink が空なら何も出力しないため、これだけでも head とヘッダーの両方が消えます。ただし、テーマやプラグインが wp_get_shortlink() を共有ボタンなどに使っている場合、そちらも空になります。影響範囲を限定したいなら、前述の remove_action() のほうが無難です。

プラグインで設定する場合

コードを書きたくない場合は、SEO プラグインや高速化プラグインの「head の不要な出力を削除する」系の設定を使う方法があります。たとえば Yoast SEO には、クロール最適化の設定の中に Shortlink を削除する項目があります(2026年10月現在)。ただし、どの版で使えるか、メニューのどこにあるかはバージョンによって変わってきたため、利用中のプラグインのドキュメントで確認してください。

同じ削除を複数のプラグインとコードで重ねても害はありませんが、後から「どこで消しているのか」が分からなくなります。どこで設定したかを運用メモに残しておくと、トラブル時に切り分けやすくなります。

削除できたかを確認する

確認はキャッシュの影響を受けやすいので、ページキャッシュや CDN のキャッシュを削除してから行います。また、ログアウトした状態(またはシークレットウィンドウ)で確認してください。

head のタグ:個別記事を開いてページのソースを表示し、shortlink で検索します。見つからなければ削除できています。

HTTP ヘッダー:ターミナルから curl でヘッダーだけを取得します。

curl -sI https://example.com/sample-post/ | grep -i shortlink

何も表示されなければヘッダーも出ていません。何か表示される場合は、優先度の指定が合っているか、別のプラグインが独自に Link ヘッダーを付けていないかを確認します。

それでも残る場合のチェック

  • キャッシュ(プラグイン、サーバー、CDN)を削除したか
  • mu-plugin のファイルが wp-content/mu-plugins/ 直下にあるか(サブフォルダの中は自動では読み込まれません)
  • 管理画面のプラグイン一覧にある Must-Use(mu-plugin)のタブに表示されているか(タブの表記は言語設定やバージョンで異なります)
  • テーマやプラグインが head に独自の shortlink タグを直接書いていないか

削除しても変わらないこと

head のタグとヘッダーを消しても、https://example.com/?p=123 という URL へのアクセス自体は今まで通り動き、パーマリンクへリダイレクトされます。これは WordPress のクエリの仕組みそのものなので、止める必要はありません。過去に共有された短縮 URL が切れずに済むという利点でもあります。

?p= へのアクセスを無理に 404 にしようとすると、プレビュー機能や一部のプラグインが動かなくなるおそれがあります。目的が「出力を整理すること」であれば、この記事の範囲で十分です。

まとめ

  • Shortlink は head の wp_shortlink_wp_head(wp_head・優先度10)と、HTTP ヘッダーの wp_shortlink_header(template_redirect・優先度11)から出力される
  • 子テーマか mu-plugin で remove_action() を2行書けば止められる。優先度の指定を合わせることが重要
  • pre_get_shortlink で空にする方法もあるが、Shortlink を使う他の機能にも影響する
  • 効果は head の整理程度で、速度や SEO が大きく変わるものではない
  • 確認はキャッシュを削除し、ログアウト状態でソースと curl -I の両方を見る

お気軽にご相談ください

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