oEmbed機能はセキュリティとパフォーマンスのために停止を推奨します
WordPressに標準搭載されているoEmbed(エンベッド)機能は、記事内にURLを貼り付けるだけで、自動的にサムネイルやタイトル付きの埋め込み表示(Embed)を生成してくれる便利な機能です。しかし、Webサイトのパフォーマンス向上やセキュリティ強化を目指すなら、基本的にこの機能は無効化すべきだと考えます。
なぜ今すぐoEmbedを無効化する必要があるのか?
多くのWebデザイナーやサイト運営者が、oEmbed機能の無効化を推奨するのには、明確な理由が存在します。①サイト表示速度の低下(パフォーマンスコスト)
oEmbed機能は、HTMLのtext{<head>}タグ内に、外部連携のためのJavaScriptファイル(wp-embed.min.jsなど)や、ディスカバリ用リンク(oembed-hostなどの<link>タグ)といった複数の要素を自動で挿入します。これらの追加リソースをブラウザが読み込むことで、ページの表示速度がチリツモで遅くなってしまうのが現状です。
サクサク動くサイトを目指すなら、不要なリソースは削ぎ落とすべきです。
②セキュリティリスクの増大(セキュリティコスト)
oEmbedは外部との連携を前提としているため、理論上はクロスサイトスクリプティング(XSS)などのセキュリティホールが発生するリスクを抱えています。特に、自分自身が埋め込み先(プロバイダー)になる機能など、連携が複雑化するほど、攻撃対象となりうるポイントが増えてしまうでしょう。リスクの芽は摘んでおくのが鉄則です。
③サイト内で完結しない限り利用シーンが少ない(保守コスト)
外部の有名なサービス(YouTube, Twitterなど)を埋め込む際は、URLを貼り付けるだけで機能してくれるため便利です。しかし、ご自身のWordPressサイトの記事を埋め込む機能は、そもそもあまり利用しないケースが大多数でしょう。
不使用の機能のために、コードの負荷やリスクを背負うのは、賢明な判断とは言えません。
正しいoEmbed無効化コード【functions.php】
現在のWordPress(5.x以降)では、oEmbed機能の管理方法が以前よりも細分化されています。最も効果的で、2025年時点の仕様に対応した、正しい無効化コードを提示します。
ご利用のテーマのfunctions.php ファイルに、以下のコードスニペットを丸ごと追加してください。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
/** * WordPress oEmbed 機能の完全無効化 * * 不要なJS、CSS、<head>内のリンクタグをすべて除去し、 * 外部埋め込み機能(プロバイダー・コンシューマー両方)を停止します。 */ function my_disable_embeds() { // 1. oEmbedディスカバリリンクを<head>から除去 remove_action('wp_head', 'wp_oembed_add_discovery_links'); // 2. oEmbedホストJavaScriptを<head>から除去 (ver 4.4以降で追加された部分) remove_action('wp_head', 'wp_oembed_add_host_js'); // 3. oEmbed機能自体を停止 remove_action('rest_api_init', 'wp_oembed_register_route'); // 4. oEmbed用REST APIルートを無効化(APIエンドポイントが生成されなくなる) remove_action('wp_head', 'rest_output_link_wp_head', 10); // 5. 投稿編集画面のEmbedブロック用JavaScript/CSSを停止 remove_filter('embed_oembed_discover', '__return_false'); // 6. 投稿画面の「oEmbedによる自動検出」を無効化 remove_filter('rest_pre_serve_request', '_oembed_rest_pre_serve_request', 10); // 7. GutenbergエディタのoEmbed関連CSSを完全に停止 add_filter('embed_oembed_html', 'my_disable_embeds_filter_html'); } add_action('init', 'my_disable_embeds', 9999); // oEmbedが試行された場合、空の文字列を返すフィルター関数 function my_disable_embeds_filter_html( $html ) { return ''; } // 完全にoEmbed関連のスクリプトとスタイルをキューから除去 function my_deregister_embed_scripts() { // 実際にスクリプトとスタイルを登録解除 wp_deregister_script('wp-embed'); wp_deregister_style('wp-block-library'); // oEmbed CSSが含まれている可能性があるため } add_action('wp_enqueue_scripts', 'my_deregister_embed_scripts', 9999); |
【まとめ】functions.php でEmbedを無効化
oEmbed機能は、使い道が限定的であるにもかかわらず、サイトの表示速度やセキュリティにネガティブな影響を与える可能性があります。| 項目 | 内容 |
|---|---|
| ポイント | oEmbed機能は基本的に無効化することで、サイトのパフォーマンス向上とセキュリティリスクの低減を実現できます。 |
| アクション | 上記(記事内の)2025年最新版コードをfunctions.phpに記述し、機能の完全停止を確認してください。 |
不要な機能を停止し、コードをクリーンに保つことは、Webデザイナーの重要な業務の一つです。このリソース削減が、より高品質なユーザー体験の提供へと繋がります。


コメント