🙆‍♀️

WordPressのメディアにアップロードされたファイルのURL正規化を行う

2024/09/01に公開

前提

  • W3 Total Cacheを導入した
    • メディアからアップロードされたファイルには、キャッシュバスティング用のクエリストリングが付与されるようになった
  • キャッシュバスティング用のクエリストリングが付与されたURLが、Googleサーチコンソールで「重複しています。ユーザーにより、正規ページとして選択されていません」というエラーが通知されている

正規のURL

example.com/wp-content/uploads/2024/08/hoge.jpg

「重複しています。」アラートが出るURL

example.com/wp-content/uploads/2024/08/hoge.jpg?x1

改善方法

rel="canonical" などを利用して正規ページを指定する方法 | Google 検索セントラル  |  ドキュメント  |  Google for Developers

  • メディアからアップロードしたファイルにrel="canonical" HTTP ヘッダーを付与することを選択

やること

  • メディアにアップロードされたファイル(今回はwp-content/uploads/)へのリクエストの場合、クエリストリングを取り除いてカノニカルヘッダーをセットする

対応内容

今回は設定ファイルを編集できないため、.htacessで設定した

# BEGIN canonical
<IfModule mod_rewrite.c>
    RewriteEngine On
    # クエリストリングを削除して環境変数を設定
    RewriteCond %{REQUEST_URI} ^/wp-content/uploads/ [NC]
    RewriteCond %{REQUEST_URI} !-d
    RewriteCond %{REQUEST_URI} !-f
    RewriteRule ^ - [E=CANONICAL_URL:https://%{HTTP_HOST}%{REQUEST_URI}]
</IfModule>

<IfModule mod_headers.c>
    # 環境変数を使用してカノニカルヘッダーを設定
    Header set Link "<%{CANONICAL_URL}e>; rel=\"canonical\"" env=CANONICAL_URL
</IfModule>
# END canonical

確認方法

curlコマンドで確認する

curl -I {重複したURL}で、設定したカノニカルヘッダーがレスポンスヘッダーに含まれるか確認する

サーチコンソールで結果の確認

  • サーチコンソールで、「正規のURL」でURL検査ツールを実行する
    • インデックス登録が完了しているか
    • 「参照元URL」にクエリストリング付きURLが表示されているか
  • サーチコンソールで、「重複したURL」でURL検査ツールを実行する
    • インデックス登録されていない(失敗)しているか
    • 「Googleが選択した正規URL」に、「正規のURL」が表示されるか

備考

  • 結果として「インデックス登録が失敗したURL」としてのエラーログが消えずに残るようです。

Discussion