WordPress のURLはなぜ相対パスでなく絶対パスが用いられるのか

Pocket

【この記事を読むのに必要な時間は約 4 分です】

WordPress は大変便利なのですが、稀になぜこのような仕様になっているのか?と疑問に思うこともあります。その一つが参照リンクや挿入した画像の URL が絶対パスで保存されることであり、ドメインの移管時にはすべてのパスを書き換える必要があります。

html を手打ちしていた 10 数年前から Web 制作をしていると、絶対パスにはスマートでない印象があります。PHP では外部ファイルを include  / require する場面が多く起点となるパスが分かり難いため絶対パスを良しとする文化があるのかと思っていましたが、実際には WordPress の開発陣にも議論があったようで、いくつかの理由から絶対パスの使用が推奨されるようになっています。

絶対パスを使用する理由

WordPress コア開発チームの議論は以下のページに残されており、初めの提案では相対パスの利用が提案されています。私も初めはこの提案と同意見でした。

・複数のドメイン/IPを使用しているサーバーで絶対パスを使用するとCSSなどのリンクが壊れる
・相対パスでも “../path/file” のようなパスは余計複雑になる、参照先はWordPress ではないかもしれない
・ 互換性/機能性を考えるのであれば、 “/path/file” のようなサイトルート相対パスが好ましい

それに対し、絶対パスを使用しなくてはならない理由として以下が挙げられました。

・ルートとなるディレクトリを移動した場合、絶対パスよりも対象箇所の検出が困難になる
・絶対パスの方が検出と置換が容易であり、皮肉だが実際には移植性は高くなる
・WordPressではコンテンツの追加先がサブディレクトリであることが多く、パスも階層を持つのが一般的であるため、相対パスを使用するとパスの解決に伴うサーバーのオーバーヘッドに繋がる可能性がある

むしろサーバー移行が容易だから、オーバーヘッドがないという点は理にかなっています。また相対パスは混乱を招きやすいこと、不適切にWP_CONTENT_URL が指定されているプラグインがあることも使用を避けられた要因になったようです。

SEO に不利になる可能性がある

上記では機能上の理由が主な理由でしたが、以下では誤った相対パスが原因で SEO に悪影響を与える可能性を紹介しています。

相対パスはWeb ページが静的な構造だった時代の手法であり、コンテンツ管理システムで管理され URLが自動生成・更新されるようになった現在では、 相対パスが有害になり得るという指摘は興味深いものです。

まとめ

  1. 処理性能
    絶対パスはオーバーヘッドが生じない
  2. 移行の容易性
    ホストドメインの置換は難しいことではない、むしろ対象箇所を限定しやすくなる
  3. SEO
    リンクミスは機能面のみならずランキングに影響する
    URL の管理はコンテンツ管理システムに任せる

(参考) 絶対パスを相対パスへ変換する方法

参考として絶対パスを相対パスへ変換するコードを以下に紹介しておきます。
以下のコードを functions.php に追記するだけです。

function delete_host_from_attachment_url($url) {
  $regex = '/^http(s)?:\/\/[^\/\s]+(.*)$/';
  if (preg_match($regex, $url, $m)) {
    $url = $m[2];
  }
  return $url;
}
add_filter('wp_get_attachment_url', 'delete_host_from_attachment_url');
add_filter('attachment_link', 'delete_host_from_attachment_url');

また、Adobe Edge Inspect 使用時に CSS が正常に読み込まれないという事例があるようです。その場合、WordPress プラグイン Root Relative URLs を使用します。

コメントを残す

メールアドレスが公開されることはありません。