最近、自分のサイトで少し困ったことがありました。 「管理画面ではサイトアイコンが表示されるのに、公開ページでは表示されない」 という現象です。
ファビコン画像自体は生成されているのに、 HTML の <head> に <link rel="icon"> が出てきません。
最初はテーマの問題だと思っていたのですが、調べていくうちに WordPress の内部処理と、サブディレクトリ構成の“ズレ” が原因だとわかりました。
この記事では、 実際に自分が遭遇した状況・原因・対策 をまとめておきます。
同じ状況で悩んでいる方の参考になれば嬉しいです。
1. どんな環境で起きたのか
自分の WordPress は少し特殊な構成になっています。
- WordPress 本体:
/wp - 公開URL:
https://example.com/ - ルートに
index.phpを置いて/wp/wp-blog-header.phpを読み込む - テーマ:Arkhe
- Cocoon では問題なし
このように、 物理パスと公開URLが1段ズレている構成 です。
2. 実際に起きていた症状
- 管理画面ではサイトアイコンが表示される
- 公開ページでは表示されない
- HTML に
<link rel="icon">が存在しない - uploads にはファビコン画像が生成されている
- テーマの
wp_head()は正常に動作している
つまり、 画像はあるのに、読み込みタグが出ていない状態 でした。
3. 原因:WordPress がファビコンの URL を推測できていなかった
WordPress はサイトアイコンを出力するとき、 内部で wp_upload_dir() を使って URL を推測します。
しかし、サブディレクトリ構成だと以下のようなズレが発生します。
- 物理パス:
/wp/wp-content/uploads/ - 公開URL:
/wp-content/uploads/
このズレを WordPress が正しく処理できず、 安全側に倒れて “タグを出力しない” という挙動になります。
Cocoon では問題が出なかったのは、 Cocoon が head をほとんど最適化せず、 WordPress の自動出力をそのまま流すためです。
一方、Arkhe は head を軽量化しているため、 WordPress が出力をスキップすると、そのままタグが消えてしまいます。
4. 自分が行った対策(最も確実だった方法)
結論としては、 子テーマの functions.php に wp_site_icon() を明示的に追加する これが一番確実でした。
/**
* サイトアイコンを明示的に出力
* サブディレクトリ構成では自動出力されない場合があるため
*/
add_action( 'wp_head', function() {
if ( function_exists( 'wp_site_icon' ) ) {
wp_site_icon();
}
}, 1 );
これを追加することで、
- WordPress が自動出力をスキップしても
- 子テーマ側で強制的にタグを出力できる
という状態になり、 公開ページでも確実にファビコンが表示されるようになりました。
5. Cocoon では問題が出なかった理由
Cocoon は head をほとんどいじらず、 WordPress の自動出力をそのまま使っています。
そのため、多少のズレがあっても動作します。
Arkhe は head を最適化しているため、 WordPress が出力を止めると、そのままタグが消えてしまいます。
このテーマの設計思想の違いが、 今回の症状にそのまま表れていました。
6. まとめ(同じ状況の方へ)

- サブディレクトリ構成では、WordPress がファビコンURLを推測できず自動出力を止めることがあります
- Arkhe は head を軽量化しているため、この影響を受けやすいです
- Cocoon は寛容なので問題が出にくいです
- 最も確実な解決方法は、 子テーマの functions.php に
wp_site_icon()を追加すること
自分はこの方法で完全に解決しました。
同じような状況で困っている方の参考になれば幸いです。


人気ブログランキング ブログパーツ