WordPressとGoogleSearchConsoleの組み合わせで、「ページにリダイレクトがあります」が多発して原因調査に少しハマったので、ここにメモを残しておく。
結論としては、サイト内リンクに相対パスを指定している事が原因だった。以下に経緯と詳細を記述する。
ページにリダイレクトがあります
![GoogleSearchConsole](https://dezikomoe.ddns.net/wp/./img/2023/02/image.png)
本サイトのアクセス解析には例によってGoogleSearchConsoleを使用しているのだが、サイトの投稿記事を増やすのに比例して、上記画像の「ページにリダイレクトがあります」の通知が線形的に増えてきた。
だが、特に身に覚えが無く、少し気持ちが悪かったので真面目に調査を行った。
エラー内容
エラーの詳細を確認すると、凡ミスを除くと以下のパターンが多かった。
https://dezikomoe.ddns.net/wp/tag/wizfo_tp02/2022-08-14/
- 赤字部分はタグのスラッグである。
こちらの正式なURLはhttps://dezikomoe.ddns.net/wp/tag/wizfo_tp02/
である。 - 青字部分は記事のスラッグである。
こちらの正式なURLはhttps://dezikomoe.ddns.net/wp/wizfo/2022-08-14/
である。
上記の正式なURLがどこかで合成されて、存在しないURLが生成されているようだ。何故だろう?
Chromeデベロッパーツール
![Chromeデベロッパーツール](https://dezikomoe.ddns.net/wp/./img/2023/02/image-1.png)
存在しないURLが指定された場合、WordPressが頑張って正しいURLへ変換してくれているようだ。
裏取りとして、ChromeデベロッパーツールのNetwordタブで確認したが、確かにHTTPステータスコードの301が返されて、存在するURLへとリダイレクトされているのが分かった。
存在しないURL生成の犯人探し
![GoogleSearchConsole](https://dezikomoe.ddns.net/wp/./img/2023/02/image-2.png)
GoogleSearchConsoleに戻って、紛い物のhttps://dezikomoe.ddns.net/wp/tag/wizfo_tp02/2022-08-14/
の生成元を探す。クロールした際の情報が残っているのでそれを見れば良い。
参照元はhttps://dezikomoe.ddns.net/wp/tag/wizfo_tp02/feed/
になっている。おや……?
feedを見る
参照元はhttps://dezikomoe.ddns.net/wp/tag/wizfo_tp02/
からWordPressによって自動生成されたfeedだった。
これのどこがおかしいのだろう?実際にfeedを覗いてみる。(現在は修正済みなので以下はfeedに存在しない)
<a href=”../2022-08-14/” target=”_blank”>2022-08-14</a>
暫く眺めていると気が付いた。黄色に網掛けした相対パス指定部分が犯人だ。
相対パスの何が駄目だったのか?
https://dezikomoe.ddns.net/wp/tag/wizfo_tp02/feed/
を相対URL解決の起点とすると、”../2022-08-14/“は確かにhttps://dezikomoe.ddns.net/wp/tag/wizfo_tp02/2022-08-14/
に展開される。全く完全に正しい動きだ。
HTMLを手打ちしていた太古の時代からの習慣により、リンクは可能な限り相対パスを使用するようにしていたのだが、今回は逆にそれが仇となったようだ。
問題解決
内部リンクはかなりの数が存在し、投稿一覧から”../”で検索すると虱潰しに対応するには気が滅入る量だった。
そのため、WordPressのプラグインでSearch Regexを使用して対応する事にした。これを使うと記事全体に対してgrepをかけられるため、漏れなく対応できそうだ。
正規表現を工夫すれば一括置換もできそうだったが、100程度のオーダーだったので置換は細かく行った。具体的には
- 置換前:../2022-08-14/
- 置換後:https://dezikomoe.ddns.net/wp/wizfo/2022-08-14/
の指定である。作業時間は1時間程度で完了した。