タグアーカイブ ECサイト

WooCommerce 11.1.0リリース。バリエーション画像ギャラリーが標準機能に

WooCommerce 11.1.0リリース。バリエーション画像ギャラリーが標準機能に

WooCommerce 11.1.0が2026年9月1日にリリースされた。今回のアップデートでは商品バリエーション画像ギャラリーが標準機能となり、専用プラグインが不要になった。Store APIとREST APIの応答速度も最大42%改善している。

今回のリリースは後方互換性を保っており、データベース更新を伴う。561件のプルリクエストがマージされ、77人のコントリビューターが参加した。WooCommerceを運用しているECサイトでは更新前に変更点を把握しておきたい。

この記事ではWooCommerce 11.1.0の主要な変更点を、店舗運営者向けと開発者向けに分けて解説する。更新作業の前に確認すべき注意点もまとめた。

WooCommerce 11.1.0の主な変更点

WooCommerce 11.1.0の主な変更点

WooCommerce 11.1.0では店舗運営者に直接影響する機能追加と、開発者向けの内部改善が同時に行われた。本番サイトへの適用前には公式の更新ガイドとチェンジログを確認することが推奨されている。

店舗運営者に影響する変更は3つある。1つ目は商品バリエーション画像ギャラリーの標準搭載、2つ目はEU顧客向け注文撤回フォームの追加、3つ目は仮想商品の管理画面表示の改善だ。これに加えて商品ギャラリーへの動画対応がベータ機能として導入された。

開発者向けにはブロックエディタアセットの統合、ブロック登録処理の最適化、注文アイテム削除ロジックの修正などが含まれる。特にStore APIとREST APIの応答速度は30%から42%改善しており、ヘッドレス構成や外部連携を運用している場合に効果が大きい。

WooCommerce 11.1.0の変更分類
店舗運営者向け バリエーション画像ギャラリーの標準化
店舗運営者向け EU顧客向け注文撤回フォームの追加
パフォーマンス Store APIとREST APIを最大42%高速化
ベータ機能 商品ギャラリーへの動画対応
■ 店舗運営者向け ■ パフォーマンス改善 ■ ベータ機能

上記デモはWooCommerce 11.1.0の変更点を影響範囲ごとに分類したものだ。青と緑が店舗運営者向け、オレンジがパフォーマンス改善、紫が実験的ベータ機能に該当する。

商品バリエーション画像ギャラリーが標準機能に

商品バリエーション画像ギャラリーが標準機能に

WooCommerce 11.1.0で、商品バリエーションごとに複数の画像を持たせる「バリエーション画像ギャラリー」が全ストアで標準機能として有効化された。これまでこの機能は「WooCommerce Additional Variation Images」という別プラグインで提供されていたが、今回のリリースをもって公式の専用プラグインは提供終了となる。

バリエーション画像ギャラリーとは、商品のサイズやカラーといったバリエーションごとに、複数の商品写真や画像を登録できる仕組みだ。たとえばサイズ違いのTシャツ商品で、MサイズにはMサイズの着用写真を複数枚登録し、LサイズにはLサイズの写真を複数枚登録できる。購入希望者が自分に合ったサイズの写真だけを確認できるため、購入決定の精度が上がる。

今回の標準化では設定画面の実験的機能フラグが削除された。データベース更新(11.1.0-1)により、過去に実験的フラグをオフにしていたストアでも自動的に有効化される。個別に切り替える必要はなく、WooCommerceを11.1.0に更新すれば全ストアで利用できる。

11.1.0以前(Before)
追加プラグイン 必須 → プラグイン終了予定
バリエーション画像ギャラリーを利用するには専用プラグインの導入が必要だった。設定も個別のプラグイン管理画面から行う必要がある。
↓
11.1.0以降(After)
WooCommerce標準機能 追加費用なし → 全ストアで自動有効化
WooCommerce 11.1.0に更新するだけで全ストアで利用できる。実験的フラグは削除され、データベース更新で自動的に有効化される。

専用プラグインが不要になり、バリエーション画像ギャラリーはWooCommerceの標準仕様となった。既存の専用プラグインユーザーも移行作業なしでそのまま利用できる。

Store APIとREST APIのパフォーマンス改善

Store APIとREST APIのパフォーマンス改善

WooCommerce 11.1.0ではStore APIとREST APIの応答速度が大幅に改善された。ブロックタイプとパターンの登録処理が、ブロックを描画できないリクエストではスキップされるようになったことが主な要因だ。

Store APIとは、WooCommerceの商品データや注文データを外部から利用するためのAPIだ。ヘッドレス構成でフロントエンドとWooCommerceを接続する場合や、モバイルアプリから商品情報を取得する場合に使われる。REST APIも同様に外部連携の窓口となる。

今回の変更により、ブロックタイプ(block types)とパターン(patterns)の登録が、ブロックを描画・編集できないリクエストでは実行されなくなった。これまではAPIリクエストでも無駄にブロック関連の処理が走っていたため、応答時間が長くなっていた。変更後はStore APIとRESTリクエストの速度が30%から42%向上した。

11.1.0以前のAPIリクエスト(Before)
APIリクエスト → ブロック登録処理 → 無駄に実行
ブロックを描画できないAPIリクエストでも、ブロックタイプとパターンの登録処理が実行されていた。これが応答時間を長くする要因になっていた。
↓
11.1.0以降のAPIリクエスト(After)
APIリクエスト → ブロック登録をスキップ → 30〜42%高速化
ブロックを描画・編集できないリクエストでは登録処理がスキップされる。Store APIとREST APIの応答速度が最大42%改善した。

このデモはAPIリクエスト時の処理フロー変化を示している。ブロック登録の最適化は店内回遊の速度向上ではなく、外部連携やヘッドレス構成での応答性能に直接効く変更だ。

EU顧客向け注文撤回フォームの追加

EU顧客向け注文撤回フォームの追加

WooCommerce 11.1.0ではEU圏の規制に準拠するための「注文撤回フォーム」が追加された。デフォルトでは無効になっており、EUガイドラインへの準拠が必要なストアが手動で有効化する形だ。

注文撤回とはEUの消費者保護規則に基づく権利で、消費者が商品を受け取ってから一定期間内に購入をキャンセルできる仕組みだ。ストア側はこの権利に応じた返金・返品プロセスを用意する必要がある。今回追加されたフォームは、その撤回申請を顧客自身がオンラインで提出するための画面をマイアカウントページに作成する。

撤回申請が提出されるとシステムに記録され、ストア運営者にはメール通知と管理画面のダッシュボード通知が送られる。ただし実際の注文撤回処理と返金作業は手動で行う必要がある。各ストアのポリシーや商品特性によって処理手順が異なるためだ。

STEP 1 顧客がマイアカウントページで注文撤回フォームを開く
↓
STEP 2 顧客が注文撤回リクエストをオンラインで提出
↓
STEP 3 システムに記録され運営者へメールとダッシュボードで通知
↓
STEP 4 運営者が返金・返品処理を手動で実行

注文撤回フォームはデフォルト無効のため、通常の国内向けストアでは追加設定は不要だ。EU向け販売を行うストアはWooCommerceの設定画面から有効化できる。

商品ギャラリーの動画対応と仮想商品の表示改善

商品ギャラリーの動画対応と仮想商品の表示改善

WooCommerce 11.1.0では商品ギャラリーへの動画対応がベータ機能として追加された。クラシックテーマとブロックテーマの両方の商品ギャラリーで動画を表示できる。

初期リリースではローカルにアップロードした動画のみが対応する。外部ホスティングの動画URL(YouTubeやVimeoなど)は現時点ではサポートされていない。実験的機能のため、今後のリリースで仕様が変更される可能性がある。

この機能はデフォルトでは無効になっている。有効化するにはWooCommerceの設定画面から「設定 → 詳細 → 機能」と進み、「商品ギャラリー動画」をオンにする必要がある。商品の見せ方を動画で強化したいストアはテスト環境での検証を推奨する。

仮想商品の管理画面表示が整理された

発送処理が不要な仮想商品のみの注文では、管理画面の注文サマリーに配送先住所が表示されないようになった。これまでStore APIのチェックアウト処理が互換性維持のために請求先住所から配送先住所を生成していたため、仮想商品のみの注文でも意味のない住所が表示されていた。

この変更により、仮想商品のみの注文画面がすっきりと整理される。実際の住所データが削除されるわけではなく、表示されなくなるだけだ。物理商品を含む注文や、配送情報が未確定の注文では従来どおり住所が表示される。

開発者向けの変更点

開発者向けの変更点

WooCommerce 11.1.0には複数の開発者向け変更が含まれる。ブロックエディタアセットの統合、注文アイテム削除ロジックの修正、WooCommerce Adminの安定済みフィーチャーフラグ廃止などだ。

統合ブロックエディタアセット(実験的)

実験的な新機能として、ブロックエディタ向けのJavaScriptとCSSファイルが統合された。これまでWooCommerceのブロックはそれぞれ個別のスクリプトとスタイルを読み込んでいたが、共有バンドルにまとめることでエディタ画面でのリクエスト数と総サイズが削減される。

デフォルトでは無効になっており、11.1.0では影響が出ない。有効化した場合もフロントエンド側のアセットは変更されず、既存のブロックハンドルは従来どおり動作する。管理画面の編集速度を改善したいストアは検討の余地がある。

注文アイテム削除ロジックの修正

WooCommerceの注文アイテム削除処理に含まれていた潜在的なバグが修正された。更新前は、拡張プラグインが注文保存前に差し込んだ置換用アイテムが、削除処理によって誤って消される可能性があった。

具体的にはWC_Abstract_Orderクラスのremove_order_itemsメソッドが、削除要求時に存在していたアイテムIDを記録するようになった。これにより拡張プラグインが追加したアイテムが誤って削除されるのを防ぐ。9割以上の拡張プラグインではコード変更は不要だが、カスタム注文データストアを実装している場合はget_item_idsとdelete_items_by_idsの実装を確認する必要がある。

安定済みフィーチャーフラグの廃止

WooCommerce Adminの安定機能として採用済みのフィーチャーフラグの一部が、設定パイプラインを介さず直接読み込まれるようになった。機能自体は削除されておらず、互換性維持のための互換レイヤーも残されている。

互換レイヤーはFeatures::is_enabled()とwindow.wcAdminFeaturesに対して従来の値を返し続けるが、非推奨警告を出力するようになった。自作の拡張プラグインでフィーチャーフラグに依存している場合は、互換レイヤーが撤去される前に対応を進めておきたい。

この記事のポイント

  • バリエーション画像ギャラリーがWooCommerce標準機能として全ストアで有効化された
  • 専用プラグイン「WooCommerce Additional Variation Images」は提供終了となる
  • Store APIとREST APIの応答速度が最大42%向上した
  • EU顧客向け注文撤回フォームが追加された(デフォルトでは無効)
  • 商品ギャラリーの動画対応はベータ機能としてデフォルト無効で提供される
  • 仮想商品のみの注文では管理画面に配送先住所が表示されなくなった
WooCommerceのApple PayとGoogle Payがクラシックカートで表示されない時の直し方

WooCommerceのApple PayとGoogle Payがクラシックカートで表示されない時の直し方

ECサイトでWooCommerceのクラシックカートとクラシックチェックアウトにApple PayやGoogle Payのボタンが表示されない場合、原因の多くはStripeが提供するホスト型決済方法設定がショートコード版ページのJavaScript初期化と衝突していることにある。商品ページやブロックカートでは正常でも、ショートコード版だけ動かないという状況では、決済ゲートウェイの初期化スクリプトが正しく読み込まれていない可能性が高い。

なぜクラシックカートだけApple PayとGoogle Payが表示されないのか

なぜクラシックカートだけApple PayとGoogle Payが表示されないのか

WooCommerceのStripeゲートウェイは、ページの種類に応じて決済ボタンを表示するためのJavaScriptを別々のタイミングで初期化する。ブロックカートとブロックチェックアウトは新しいGutenbergブロックとしてレンダリングされるため、StripeのExpress Checkoutボタンを配置する専用のコンテナが自動で用意される。

一方、クラシックカートとクラシックチェックアウトはショートコード([woocommerce_cart]と[woocommerce_checkout])でページに埋め込まれる。この方式では、テーマのJavaScriptやjQueryの読み込み順によってStripeの初期化スクリプトが正しく実行されず、ボタンが表示されないことがある。特にカスタムテーマやテーマビルダーを使っている場合は競合が起きやすい。

もう一つの有力な原因が、WooCommerceのログに出力されている「Stripe-hosted payment method configuration(ホスト型決済方法設定)」への切り替えエラーだ。Stripeがホストする決済方法設定に切り替わると、従来のローカル設定で動いていたExpress Checkoutボタンの初期化ロジックと整合しなくなることがある。これはStripeアカウント側の設定変更によって発生する。

つまり、症状がショートコード版ページに限定されるのは、決済ゲートウェイ自体の設定ミスではなく、ページのレンダリング方式とStripeスクリプトの初期化タイミングのずれが主因であるケースがほとんどだ。

JavaScriptコンソールでエラーを確認する手順

JavaScriptコンソールでエラーを確認する手順

真っ先に調べるべきは、クラシックカートとクラシックチェックアウトのページでJavaScriptエラーが出ているかどうかだ。ブラウザのデベロッパーツールを使えば、原因となるスクリプトを特定できる。

Chromeの場合、クラシックカートのページを開いた状態で「F12」キーを押し、「Console」タブを確認する。赤いエラーメッセージが表示されていれば、その内容を記録する。特にwc_stripe_upe_paramsやwp.escapeHtmlに関連するエラーはStripeゲートウェイの初期化失敗を示す代表的なものだ。

FirefoxやEdgeでも同様に、開発者ツールのコンソールから確認できる。スマートフォンで確認する場合は、パソコンのブラウザでデベロッパーツールを開き、デバイスエミュレーションモードにして同じページを読み込むとよい。

Stripeのホスト型決済方法設定を無効化する

Stripeのホスト型決済方法設定を無効化する

WooCommerceのログにホスト型決済方法設定への切り替えエラーが出ている場合、Stripeダッシュボード側の設定を変更するか、プラグイン側でホスト型設定を手動設定に戻す必要がある。

STEP 1 Stripeダッシュボードにログインし「Payment Method Configurations」を開く
↓
STEP 2 作成済みの設定がホスト型になっていないか確認する
↓
STEP 3 WooCommerce管理画面の「Stripe設定」で決済方法を手動設定に切り替える
↓
STEP 4 クラシックカートとチェックアウトでボタンが表示されるか再テストする

このデモはStripe設定の確認から修正までの手順の流れを示したものだ。実際の管理画面の項目名はWooCommerce Stripeプラグインのバージョンによって若干異なる。

Stripeダッシュボードでは、ホスト型決済方法設定が有効になっていると、決済方法の組み合わせがStripeサーバー側で管理される。これがWooCommerce側のExpress Checkoutボタン初期化と競合し、クラシック版ページでのみボタンが出ない状態を引き起こすことがある。WooCommerce側のStripe設定画面で「決済方法を手動で管理」するオプションを選択し、Apple PayとGoogle Payを明示的に有効化すると改善するケースが多い。

プラグインの再設定だけでは直らない場合は、Stripeアカウントの接続を一度解除して再接続するのも有効だ。WooCommerceの「決済」タブからStripeを選び、「接続を解除」を押した後、再度Stripeアカウントで接続する。この操作でプラグインがStripeサーバーから最新の設定を取得し直し、ホスト型決済方法設定とのずれが解消されることがある。

クラシックカートのショートコードとページ設定を再確認する

クラシックカートのショートコードとページ設定を再確認する

クラシックカートとチェックアウトのページに正しいショートコードが貼られているかも併せて確認する。カートページには[woocommerce_cart]、チェックアウトページには[woocommerce_checkout]が必須だ。

WooCommerceの「設定」→「詳細設定」タブにある「カートページ」と「チェックアウトページ」の指定が、実際にショートコードを貼ったページと一致しているか確認する。別のページを指定したままだと、表示されている地図ページとStripeの初期化対象ページがずれて、ボタンが出ないことがある。

ページビルダー(ElementorやBeaver Builderなど)でカートページを作成している場合は、ショートコードウィジェットを配置しているか確認する。ページビルダーのテキストブロックにショートコードを直接入力していると、WooCommerceのテンプレートフックが正しく読み込まれず、StripeのExpress Checkoutボタン用のフックが実行されないことがある。

キャッシュとCDNを削除して再テストする

キャッシュとCDNを削除して再テストする

設定変更後もボタンが表示されない場合は、サーバー側のキャッシュとCDNのキャッシュが古いスクリプトを配信し続けている可能性がある。WooCommerce専用のキャッシュプラグインを使っている場合は、そのキャッシュを全削除する。CDN(コンテンツデリバリネットワーク / 配信網)を利用している場合は、CDNのダッシュボードからキャッシュをパージする。

その後、シークレットウィンドウ(プライベートブラウジング)でクラシックカートのページを開いて確認する。通常のブラウザに残っているクッキーやサービスワーカーが古いスクリプトを参照していることがあるため、シークレットウィンドウで確認するとキャッシュの影響を排除できる。

それでも直らない場合、一時的にすべてのプラグインを無効化して標準テーマに切り替え、WooCommerceとStripeゲートウェイだけを有効化した状態でテストする。この最小構成でボタンが表示されれば、別のプラグインかテーマが原因だ。影響しているプラグインを一つずつ有効化して切り分けていく。

よくある質問

商品ページではボタンが出るのにクラシックカートでは出ないのはなぜか

商品ページとクラシックカートではExpress Checkoutボタンを初期化するJavaScriptのフックが異なる。商品ページはWooCommerce標準のフックで動くが、カートとチェックアウトはページテンプレートの構造に依存するため、テーマやプラグインの競合で初期化が妨げられることがある。

ブロックカートに切り替えれば解決するのか

ブロックカートとブロックチェックアウトはGutenbergブロックとしてレンダリングされるため、Stripeゲートウェイが専用コンテナを確実に配置でき、ボタンが正常に表示される。どうしてもクラシック版を使い続ける必要がなければ、ブロック版への移行は有効な回避策になる。

Stripeアカウントの再接続だけでは直らない場合はどうするか

再接続で直らない場合は、WooCommerceのStripe設定画面でExpress Checkoutボタンの表示オプションを一度すべてオフにして保存し、再度オンにして保存する。これでプラグインの設定値がリフレッシュされ、クラシックページ用のフックが再登録されることがある。

ログに出るホスト型決済方法設定のエラーは無視してよいか

無視しないほうがよい。ホスト型決済方法設定への切り替えエラーは、Stripe側の設定とWooCommerceプラグインの設定が同期していない状態を示している。この状態を放置すると、クラシックページでのボタン非表示だけでなく、支払い処理自体に影響が出る可能性がある。Stripeダッシュボードで決済方法設定を確認し、手動設定に切り替えることを推奨する。

スマートフォンでもボタンが表示されないのは同じ原因か

基本的には同じ原因だ。ただしスマートフォンではApple PayとGoogle Payの表示条件が端末の対応状況にも左右される。iPhoneならSafari、AndroidならChromeで、ウォレットにカードが登録されていないとボタン自体が表示されない。パソコンで表示されることを前提に原因を切り分けるほうが正確だ。

この記事のポイント

  • クラシックカートとチェックアウトだけボタンが出ないのはStripeスクリプトの初期化タイミングのずれが主因
  • デベロッパーツールのコンソールでJavaScriptエラーを確認する
  • Stripeダッシュボードのホスト型決済方法設定を手動設定に切り替える
  • ショートコードの貼付位置とWooCommerceの設定ページ指定が一致しているか確認する
  • キャッシュとCDNを削除し、シークレットウィンドウで再テストする
WooCommerceチェックアウトでVAT任意欄が空だと無効エラーになる不具合の修正方法

WooCommerceチェックアウトでVAT任意欄が空だと無効エラーになる不具合の修正方法

WooCommerce のチェックアウトで VAT 番号のフィールドが任意設定なのに、空のまま進むと「VAT が無効」と表示されて注文が完了しない場合は、使用している VAT 関連プラグインのアップデートに不具合が混入している。最新バージョンへ更新すれば多くのケースで直り、どうしても更新が難しいなら前のバージョンに戻すことでチェックアウトを復旧できる。

なぜ VAT 任意項目が空でエラーになるのか

なぜ VAT 任意項目が空でエラーになるのか

WooCommerce の標準機能に VAT 番号のバリデーション(入力値の検証)は含まれていない。チェックアウト画面に VAT フィールドを追加し、「無効な VAT」「VAT が無効」といったエラーチェックを行っているのは、EU VAT Number 系の拡張プラグインだ。こうしたプラグインでは管理画面から VAT フィールドを必須にするか、任意にするかを切り替えられるが、特定のバージョン(報告では 4.7.6)で、空欄を「無効な VAT」と誤判定する不具合が発生した。設定上は任意でも、チェックアウト処理時に空の値を無効と見なしてエラーを返すため、購入完了まで進めなくなる。

この現象はプラグイン開発者側の不具合であり、サイト側の設定ミスではない。同様の症状が出た場合、まずはプラグインが最新の安定版かどうかを確認するのが最も確実な対処になる。

プラグインの最新バージョンに更新する

プラグインの最新バージョンに更新する
STEP 1 サイト全体のバックアップを取得する
↓
STEP 2 プラグイン一覧で対象プラグインの更新通知を確認する
↓
STEP 3 更新を実行し、変更を反映させる
↓
STEP 4 キャッシュをクリアし、チェックアウトが正常に動作するかテストする

上の手順デモは、不具合が修正されたバージョンへ更新する際の流れを示している。実際の管理画面では、VAT 関連プラグインの名前(例 EU VAT Number for WooCommerce 等)を特定し、更新可能なバージョンが表示されていれば「今すぐ更新」をクリックするだけだ。

本件のフォーラム報告例では、バージョン 4.7.6 で問題が発生し、4.7.8 で修正された。同様のケースでは、開発元が既に不具合を認識して修正版をリリースしていることが多い。更新後も症状が続く場合は、プラグインの設定画面で VAT フィールドの「必須」オプションが誤ってオンになっていないか再確認する。

更新できない場合の緊急回避策

更新できない場合の緊急回避策

何らかの理由ですぐにプラグインを最新版にできない場合、一時的にチェックアウトの支障を取り除く方法として、プラグインを前の安定バージョンに戻す方法がある。プラグインの提供ページから過去のバージョンをダウンロードし、手動で上書きアップロードすれば、VAT フィールドが空でもエラーにならなかった状態に戻せる。

Before 不具合発生中
VAT 任意なのに空欄で「VAT が無効」とエラー表示
↓
After 前バージョンに戻す
VAT 空欄のままチェックアウトが正常に完了する
■ エラー状態 ■ 復旧後

プラグインファイルを手動で置き換える際は、必ず FTP やサーバーのファイルマネージャーでアクセスするか、WordPress 管理画面の「プラグイン」→「新規追加」→「プラグインのアップロード」から ZIP ファイルでインストールする。作業前に必ずバックアップを取っておく。

もうひとつの緊急手段として、チェックアウト画面から VAT フィールドを一時的に非表示にする方法もある。子テーマの functions.php にフィルターを追加してフィールドを除去すれば、バリデーション自体が行われなくなる。ただしこれは購入者から VAT 番号を取得できなくなるため、後日プラグインが修正されたら元に戻す必要がある。

根本原因を特定して再発を防ぐ

根本原因を特定して再発を防ぐ

プラグインの自動更新を有効にしていると、気づかないうちに不具合を含むバージョンが適用されてしまうことがある。VAT のような決済に直結するフィールドでトラブルが起きると、数時間の売上損失につながる可能性が高い。そのため、VAT 系プラグインや決済関連プラグインについては、本番環境へ適用する前にステージング環境で動作確認を行うか、少なくとも更新直後に手動でチェックアウトを通すテストを習慣化する。

また、プラグインの更新履歴(Changelog)に目を通し、「fix」「bug」「checkout」といったキーワードの修正が含まれているかどうかを更新前に確認しておくと、問題の発生にすぐ気づける。

よくある質問

どのプラグインが原因かを特定できない時はどうすればよいか

チェックアウト画面に VAT 関連の項目を追加しているプラグインをすべて疑う。プラグイン一覧で「VAT」「EU」「Tax」などで検索し、該当するプラグインをひとつずつ停止して、チェックアウトの動作を確認する。問題のプラグインが特定できたら、そのプラグインのサポートフォーラムで同様の報告がないか調べる。

VAT フィールドを必須に変更すれば一時的に回避できるのか

フィールドを必須にすると、常に VAT 番号の入力を求められるため、空欄によるエラーは発生しなくなる。しかし日本国内の顧客向けに VAT 不要のサイトでは、必須設定は購入体験を損ねる。商品やターゲットに応じて慎重に判断する必要がある。

コードを一切触らずにエラー表示だけ消す方法はあるか

管理画面の設定から VAT フィールドを無効化するか、チェックアウトのフィールド編集機能を持つプラグインで該当フィールドを削除する。ただし、これらの操作もバックアップを取ってから実行し、注文情報に必要なデータが欠落しないように注意する。

更新後もエラーが解消されない場合の次の手は

まずキャッシュ系プラグインや CDN が古いスクリプトを配信していないか確認する。次に、VAT プラグイン以外のチェックアウト関連プラグインとの競合を疑い、すべてのプラグインを一時停止しながら原因を切り分ける。それでも解決しない場合はプラグイン開発元に直接報告する。

この記事のポイント

  • 任意設定の VAT フィールドが空でエラーになるのはプラグインの不具合
  • 最新バージョンへの更新で修正されるケースが大半
  • 更新できない時は前の安定バージョンに戻すかフィールドを一時非表示にする
  • 決済関連プラグインはステージングテストと更新履歴確認を習慣化する
クロールバジェット最適化の新ガイドライン、ECサイトが実践すべき手法

クロールバジェット最適化の新ガイドライン、ECサイトが実践すべき手法

Googleがクロールインフラストラクチャの公式ドキュメントを更新し、「クロールバジェットの最適化」に関する新たなガイドラインを公開した。ECサイト運営者にとって、この変更は商品ページのインデックス速度に直結する。クロールされなければ検索結果に表示されないからだ。

今回の更新で注目すべきは、新サイトに割り当てられる「保守的なクロールバジェット」の考え方と、304ステータスコードに関する注意喚起だ。特に304の扱いは、安易に導入すると検索順位に影響を与える可能性がある。

この記事では、Googleの新ガイドラインの要点と、ECサイトが実践すべきクロールバジェット最適化の手法を解説する。

クロールバジェットとは何か

クロールバジェットとは何か

クロールバジェットとは、Googlebotが一定期間内に特定のサイトをクロールするURLの総量を指す。インターネット上のURL数は膨大であり、Googleは各サイトに割り当てるクロール量を最適化する必要がある。この割り当てが「バジェット(予算)」と呼ばれる理由だ。

サイト構造が整理されておらず、無駄なURLが多いサイトは、クロールに時間がかかり、結果としてインデックスされるページ数が少なくなる。ECサイトの場合、商品ページがインデックスされなければ、検索経由の流入機会を失うことになる。

クロールバジェットが無駄に使われるサイト
Googlebot → 重複ページ → ソフト404 → 無駄なパラメータURL
※クロールの大半が無駄なURLに消費され、重要な商品ページまで到達できない
■ Googlebotが無駄なURLを巡回
↓
クロールバジェットが最適化されたサイト
Googlebot → 新着商品ページ → 更新されたカテゴリ → ブログ記事
※無駄なURLが除外され、重要なページだけがクロールされる
■ 重要なページを効率的に巡回

クロールバジェットを意識したサイト設計は、検索エンジンに「このサイトは効率的にクロールできる」と認識させる第一歩だ。以下、Googleの新ガイドラインに沿った具体的な施策を見ていく。

新サイトには保守的なクロールバジェットが割り当てられる

新サイトには保守的なクロールバジェットが割り当てられる

Googleの更新されたドキュメントで明確にされたのが、新規サイトに対するクロールバジェットの初期値だ。新サイトには「保守的な」バジェットが割り当てられ、サーバーに過負荷をかけずに重要なコンテンツをカバーできるよう設計されている。

段階的なコンテンツ公開が鍵

新サイトを立ち上げる際は、一度に大量のページを公開するよりも、徐々にページ数を増やす方がGooglebotの信頼を得やすい。たとえば、100商品を1日で公開するより、1日3商品ずつ約1ヶ月かけて公開する方が、クロールバジェットの観点からは有効だ。

STEP 1 新サイト公開(少数の重要ページのみ)
Googlebotがサーバー負荷を確認しながら巡回開始
↓
STEP 2 1日数商品ずつ追加公開
XMLサイトマップを更新し、Googleに変更を通知
↓
STEP 3 定期的な更新を継続
Googlebotの巡回頻度が徐々に増加
↓
STEP 4 クロールバジェットの拡大
信頼が確立され、より多くのページが巡回対象に

この段階的アプローチにより、Googlebotはサイトの更新パターンを学習し、クロールバジェットを徐々に拡大していく。XMLサイトマップの自動更新と組み合わせることで、さらに効果が高まる。

表示速度の改善がバジェットを増やす

サイトの読み込み速度が速いほど、Googlebotは効率的にクロールできる。これは以前から知られていた事実だが、今回のガイドラインでも改めて強調された。表示速度の改善は、ユーザー体験の向上だけでなく、クロールバジェットの増加にも直結する。

Googleが提供するPageSpeed InsightsやLighthouseを使って定期的にパフォーマンスを測定し、改善を続けることが重要だ。ECサイトでは、画像の最適化や不要なスクリプトの削減が特に効果的だ。

人気ページはクロール頻度が高まる

外部リンクや内部リンクを多く集めているページは、Googlebotの巡回頻度が高くなる。ECサイトの場合、トップページや主要カテゴリページ、よく参照される商品ページが該当する。内部リンク構造を最適化し、重要なページへリンクを集中させることで、クロール頻度を向上させられる。

クロール効率を下げる要因とその対策

クロール効率を下げる要因とその対策

クロールバジェットを浪費する要因はいくつかある。以下に主要なものと対策を示す。

robots.txtで不要ページをブロック

プライベートログインページ、ショッピングカート、動的に生成されるページなど、インデックス不要なページはrobots.txtのdisallowディレクティブでブロックする。これにより、Googlebotが本当に重要なページだけを巡回するよう誘導できる。

重複コンテンツの削除と統合

同じ内容のページが複数存在すると、クロールバジェットが分散される。商品バリエーション(色違い、サイズ違い)でURLが分かれている場合は、canonicalタグで正規URLを指定するか、統合を検討する。

ソフト404とリダイレクトチェーンを回避

削除されたページが200ステータスコードを返す「ソフト404」は、Googlebotが無駄なクロールを続ける原因となる。存在しないページは404または410レスポンスを返すように設定する。また、1つのページに対して複数のリダイレクトが発生する「リダイレクトチェーン」も、クロール効率を低下させるため避けるべきだ。

Search Consoleのクロール統計を活用

Google Search Consoleの「設定」→「クロール統計」レポートでは、Googlebotのクロール頻度や発生した問題を確認できる。このレポートを定期的にチェックし、クロールバジェットの消費状況を把握することが、最適化の出発点となる。

304ステータスコードの注意点

304ステータスコードの注意点

今回のガイドライン更新で追加されたのが、304(Not Modified)ステータスコードに関する推奨だ。Googleは「前回のクロールからページが変更されていない場合、304コードを返すことでGoogleにキャッシュ版の再利用を促し、サーバー帯域とリソースを節約できる」としている。

しかし、この推奨には注意が必要だ。Practical Ecommerceの記事では、Jill Kocher氏が次のような見解を示している。304コードを重要なページに使用すると、検索結果での表示順位やインデックスステータスに影響を与える可能性がある。同氏は、期限切れ商品やポリシーページなど、重要性の低いページに限定して使用することを推奨している。

304コードを重要な商品ページに使った場合のリスク
Googlebot → 304 Not Modified
※キャッシュが再利用され、実際のコンテンツ更新が検出されないおそれ
⚠ 表示順位の低下やインデックスステータスへの悪影響の可能性
■ リスクあり(重要ページには非推奨)
↓
304コードの安全な使用例
期限切れ商品 や プライバシーポリシー
※検索順位に影響しないページに限定して使用
✅ サーバーリソースの節約に貢献
■ 安全に使用可能

ECサイト運営者としては、この304コードの推奨を鵜呑みにせず、自社のSEO戦略に照らして慎重に判断する必要がある。売上に直結する商品ページやカテゴリページには適用せず、重要度の低い固定ページに限定するのが賢明だ。

この記事のポイント

  • 新サイトのクロールバジェットは「保守的」に設定されるため、段階的なコンテンツ公開が有効
  • 表示速度の改善と定期的な更新が、クロールバジェット拡大の鍵
  • robots.txtの活用、重複コンテンツの統合、ソフト404の排除で無駄なクロールを削減
  • Search Consoleのクロール統計レポートで状況を定期的にモニタリング
  • 304ステータスコードは重要ページには使用せず、影響の少ないページに限定する
WooCommerce 11.0でget_queried_object()がショップページでもWP_Postを返す改善

WooCommerce 11.0でget_queried_object()がショップページでもWP_Postを返す改善

WooCommerce 11.0より、ショップページで get_queried_object() を呼び出した際の戻り値の型が WP_Post_Type から WP_Post に統一される。これまでショップページだけが例外的に商品の投稿タイプオブジェクトを返していたが、今回の変更でWordPress標準の挙動と一貫性が保たれることになる。

この修正は、WooCommerceが内部的に管理するクエリの取り扱いをWordPressコアに合わせるもので、テーマやプラグインの開発者が「ショップページかどうか」を意識せずに get_queried_object() を扱えるようにする狙いがある。フロントページにショップページを設定している場合も同様の挙動となる。

WooCommerce 11.0のショップページ改善

WooCommerce 11.0のショップページ改善

get_queried_object() は現在のWordPressクエリに対応するオブジェクトを取得する標準関数だ。通常の固定ページや投稿ページでは WP_Post オブジェクトを返すが、これまでのWooCommerceではショップページに限り WP_Post_Type オブジェクト、つまり商品(product)の投稿タイプ情報を返していた。この不一致が開発者にとって混乱の元となっていた。

WooCommerce Developer Blogの説明によれば、ショップページで get_queried_object() を呼び出して「商品アーカイブであること」を判定するコードを書いていた場合、この変更の影響を受ける可能性がある。逆に言えば、今回の修正で is_shop() のような条件分岐タグと get_queried_object() の戻り値の関係が整理され、より直感的なコードが書けるようになる。

WooCommerce 10.x までの挙動(Before)
Shopページ → WP_Post_Type (商品の投稿タイプ情報)
その他固定ページ → WP_Post (ページの投稿オブジェクト)
■ Shopページだけが例外で、他のページと異なるオブジェクト型を返していた
↓
WooCommerce 11.0 以降の統一された挙動(After)
Shopページ → WP_Post (ショップ固定ページの投稿オブジェクト)
その他固定ページ → WP_Post (ページの投稿オブジェクト)
■ すべてのページで一貫して WP_Post を返すように統一された

この変更の背景には、WordPressの「投稿ページ」設定と同様にショップページでも WP_Post を返すべき、という設計上の判断がある。WooCommerce 11.0ではこの長年の不一致が解消され、より予測しやすいAPIへと改善された。

影響を受けるコードの判断方法

影響を受けるコードの判断方法

自作のテーマやプラグインでショップページのクエリオブジェクトを参照している場合、以下のいずれかの関数やプロパティを使用していないか確認する必要がある。

  • get_queried_object() を呼び出している
  • get_queried_object_id() を呼び出している
  • $query->queried_object に直接アクセスしている
  • $query->queried_object_id に直接アクセスしている

これらのコードがショップページ上で実行され、戻り値として WP_Post_Type オブジェクトを期待しているなら、WooCommerce 11.0へのアップデート後に動作が変わる可能性が高い。とくに、queried_object->labels->name などのプロパティに依存している場合は要注意だ。

Before / After コードの比較

具体的なコードの違いを見てみよう。以下はショップページでの get_queried_object() の戻り値の変化を示している。

// WooCommerce 10.x まで Shopページのみ例外
get_queried_object();          // → WP_Post_Type
get_post_type_object( 'product' ); // → WP_Post_Type

// その他の固定ページ
get_queried_object();          // → WP_Post
get_post_type_object( 'product' ); // → WP_Post_Type
// WooCommerce 11.0 以降 Shopページも含めて統一
get_queried_object();          // → WP_Post
get_post_type_object( 'product' ); // → WP_Post_Type

この変更の影響を受けないケース

次のような状況では、WooCommerce 11.0の変更による影響はなく、既存のコードはそのまま動作する。

  • 単一の商品ページ(single-product)では引き続き商品の WP_Post オブジェクトが返る
  • 商品カテゴリやタグ、ブランド、属性などのタクソノミーページでは WP_Term オブジェクトが返る
  • その他の投稿タイプアーカイブや個別ページはもともと変更の対象外
  • is_shop() や is_archive()、is_post_type_archive( 'product' ) といった条件分岐関数の挙動は従来どおり変わらない

開発者が取るべき具体的な対応

開発者が取るべき具体的な対応

もし既存のコードがショップページで get_queried_object() の戻り値を WP_Post_Type として扱っている場合、WooCommerce 11.0へのアップデートに備えて改修が必要だ。修正の基本方針は「オブジェクトの型をチェックしてからプロパティにアクセスする」ことにある。

商品の投稿タイプ情報を取得する推奨方法

商品の WP_Post_Type オブジェクトが必要な場合は、get_post_type_object() を使うのが安全で推奨される方法だ。この関数はWooCommerceのバージョンに関係なく常に正しいオブジェクトを返す。

$product_post_type = get_post_type_object( 'product' );

if ( $product_post_type instanceof WP_Post_Type ) {
    // 商品のWP_Post_Typeオブジェクトは
    // get_post_type_object() から引き続き取得できる
    $singular_name = $product_post_type->labels->singular_name;
}

ショップページのWP_Post情報を扱うコード例

ショップページ自体の情報(ページタイトルやスラッグなど)を取得したい場合は、WooCommerce 11.0以降は get_queried_object() から直接 WP_Post としてアクセスできるようになる。以下はその典型的な使用例だ。

$shop_page = get_queried_object();

if ( $shop_page instanceof WP_Post ) {
    // WooCommerce 11.0以降、ショップページでも
    // WP_Postとして扱える
    $shop_title = $shop_page->post_title;
    $shop_slug  = $shop_page->post_name;
}
修正の流れと対応手順
STEP 1 ショップページで get_queried_object() / $query->queried_object を使っている箇所を特定する
↓
STEP 2 戻り値を WP_Post_Type として使っているか確認する( instanceof や型チェックをしていない場合)
↓
STEP 3 get_post_type_object( 'product' ) で商品の投稿タイプ情報を個別に取得し、既存コードを書き換える
↓
STEP 4 テスト環境でWooCommerce 11.0にアップデートし、ショップページが正しく表示されるか検証する

重要なのは、get_queried_object() の戻り値に依存した条件分岐を書く前に、必ず instanceof でオブジェクトの型をチェックする習慣をつけることだ。これにより、WooCommerceの将来のアップデートや他のプラグインとの競合にも強いコードになる。

この記事のポイント

  • WooCommerce 11.0ではショップページの get_queried_object() が WP_Post を返すように統一される
  • 商品の投稿タイプ情報が欲しい場合は get_post_type_object( 'product' ) を使用する
  • is_shop() などの条件分岐関数の挙動は変わらないため、ページ判定ロジックの修正は不要
  • 影響を受けるコードは、おもにショップページでクエリオブジェクトのプロパティに直接アクセスしている箇所
  • アップデート前に instanceof による型チェックを追加し、テスト環境で検証するのが安全な移行手順
Search Consoleに生成AIレポート登場、ECサイト運営への影響を解説

Search Consoleに生成AIレポート登場、ECサイト運営への影響を解説

Search Consoleの生成AIレポートが登場、ECサイト運営に何をもたらすか

Search Consoleの生成AIレポートが登場、ECサイト運営に何をもたらすか

Google Search Consoleに「生成AI」セクションが追加され、全ユーザーが利用可能になった。このレポートは、ECサイトのページがAI OverviewやAI Modeでどれだけ表示されているかを確認できる初めての公式データだ。Google検索のAI回答に自社の商品ページやブログ記事が引用されているかを把握する手がかりになる。

ただし提供される指標は「インプレッション」のみであり、クリック率や実際の閲覧数は含まれない。しかもこのインプレッションの定義には大きな注意点がある。カウントの仕組みを正しく理解しないまま数字を追うと、誤った施策につながりかねない。

従来のSearch Console(Before)
「検索パフォーマンス」レポートでクリック数・表示回数・CTR・掲載順位を確認
↓
生成AIレポート追加後(After)
AI OverviewやAI Modeでのインプレッションを別レポートで確認可能
※生成AIレポートにはクリックデータは含まれない。インプレッションの意味を慎重に解釈する必要がある

この新レポートは「パフォーマンス>検索結果>生成AI」に配置されている。AI回答に表示されたURLのリスト、期間別のインプレッション数、検索者の国とデバイス情報が確認できる。ただしAI Overview、AI Mode、Discoverといった検索機能を区別するフィルターは用意されていない。

ECサイトでAI回答が目立つ意味

オンラインストアにとって、AI回答への掲載は新たな流入経路になりうる。たとえば「小型ビジネス向けSMSマーケティングツール」のような質問に対して、AIがカテゴリ別にツールを紹介するケースが増えている。自社の商品カテゴリページや比較記事が引用されれば、見込み客の目に触れる機会が広がる。

しかしAI回答内で表示されるURLは、必ずしもユーザーに実際に見られているとは限らない。その点を次章で詳しく見ていく。

「インプレッション」の落とし穴、表示されていなくてもカウントされる仕組み

「インプレッション」の落とし穴、表示されていなくてもカウントされる仕組み

生成AIレポートの唯一の指標であるインプレッションについて、GoogleのJohn Mueller氏は「URLがAI回答のどこかに含まれていれば、ユーザーの操作がなくてもカウントされる」と説明している。つまり、検索者が実際にそのURLを目にしたかどうかは問われない。

AI Overviewで引用元が隠れている状態(Before)
AI回答が省略され、引用元を見るには「もっと見る」→「すべて表示」の2クリックが必要
↓
クリック後にすべての引用元が展開(After)
ここでようやく自社URLが表示される。しかしSearch Console上は「インプレッション」としてすでに計上済み
※実際の閲覧有無に関わらず、AI回答にURLが含まれた時点でインプレッションが発生する

このカウント方式によって「自社ページがAI回答で大量に表示されている」という表面的な数字が生まれやすい。だがその大半は、検索者が「もっと見る」を押さずに離脱したかもしれない。インプレッション数だけを根拠にAI最適化の成否を判断するのは危うい。

フォローアップ質問や「他のユーザーも質問」もインプレッションを生む

AI Modeで検索者が追加入力した場合も、回答に含まれるURLは新たなインプレッションとして計上される。また「他のユーザーも質問」ボックスは、質問をクリックしてAI回答が開かない限りインプレッションは発生しない。つまりクリックを経て初めてカウントが始まるが、展開後の回答内のURLはやはりユーザーが実際に目を向けたかに関わらずインプレッションに含まれる。

検索者 質問をクリック → AI回答 が表示 → 引用URL がインプレッション取得
※クリック後に表示される引用URLは、すべてインプレッション対象。閲覧の有無は問わない

AI回答にECサイトが取り上げられるパターンと「クリックなき表示」の実態

AI回答にECサイトが取り上げられるパターンと「クリックなき表示」の実態

オンラインストアの商品比較記事やガイドコンテンツは、AI Overviewでカテゴリ推薦やリスト形式で引用されることが多い。たとえば「ベストSMSマーケティングツール」の検索では、AIが使用用途別にツールを整理し、出典として複数の記事URLを提示する。

ここで重要なのは、初期表示では引用元が完全には見えていない点だ。「もっと見る」ボタンで回答全文が展開され、さらに「すべて表示」を押すとすべての出典が列挙される。この2段階の操作を検索者が実行したかは分からない。それでもSearch Consoleの生成AIレポート上は、該当URLが「インプレッションを獲得した」と記録される。

STEP 1 AI Overviewが部分的に回答を表示(引用元は非表示)
↓
STEP 2 検索者が「もっと見る」を押すと回答全文と一部の引用が表示
↓
STEP 3 「すべて表示」で全引用元が現れるが、この時点ですべてインプレッション済み
※Search ConsoleはSTEP 1の時点でインプレッションを計上する。クリックデータは存在しない

この流れを理解しておけば、生成AIレポートの数値に振り回されずに済む。ECサイトのSEO担当者は「本当に読まれているのか」という視点を常に持つ必要がある。

実践的な活用法〜通常トラフィックとAIインプレッションをExcelで突き合わせる

実践的な活用法〜通常トラフィックとAIインプレッションをExcelで突き合わせる

クリックデータがない以上、AIインプレッション単体では施策の優先順位を決めにくい。そこで有効なのが、通常の検索パフォーマンスレポートのデータとの組み合わせだ。具体的な手順は以下の通り。

  • 「検索パフォーマンス」レポートから、トラフィックの多い上位URLリストをダウンロードする
  • 「生成AI」セクションから、インプレッション数の多いURLリストをダウンロードする
  • 両方をExcelでVLOOKUPなどを使って紐づけ、URLごとのトラフィックとAIインプレッションを可視化する
パターンA:トラフィックは多いがAIインプレッションが少ない
AI回答に取り上げられていない強みページ。構成や解決策の明示を改善し、AIに引用されやすくする
↓
パターンB:AIインプレッションは多いがトラフィックが少ない
コンテンツの更新や内部リンク強化で通常の検索順位を高め、クリック獲得力を底上げする
※両方のデータを組み合わせることで、AI表示と実際の集客力のギャップが明確になる

この突き合わせ作業は手間がかかるが、ECサイトがAI時代に取るべき施策の方向性を見極めるうえで欠かせない。とくにパターンBの「AIには表示されるがクリックが少ない」ページは、商品詳細の充実や関連商品への導線強化が効果を発揮しやすい。

AI回答への表示をブロックできるが、ECサイトは原則不要

AI回答への表示をブロックできるが、ECサイトは原則不要

Search Consoleには新たに「AI制御」機能が追加され、サイト単位でAI回答へのコンテンツ表示をブロックできるようになった。設定は「設定>AI制御>検索生成AI」から行い、デフォルトでは許可状態になっている。

AI制御のトグル設定
許可(デフォルト) ← 切り替え → ブロック(非推奨)
ECサイトにとってAI表示を拒否するメリットはほぼない。新たな集客機会を失うだけ

ブロックを有効にすると、AI OverviewやAI Modeから自社の商品ページや記事が完全に除外される。Practical Ecommerceの記事でも「EC事業者がこれを行う理由は見当たらない」と指摘されている通り、販売機会を自ら狭める行為になる。むしろAI回答に表示されることで、検索者が能動的にクリックしなくてもブランド認知が高まる可能性を考慮すべきだ。

この記事のポイント

  • Search Consoleに生成AIレポートが追加され、AI回答での表示状況を確認できるようになった
  • インプレッションはユーザーの閲覧有無を問わずカウントされるため、数字を鵜呑みにしない
  • 通常の検索パフォーマンスデータとAIインプレッションをExcelで紐づけ、ギャップを分析する
  • AI回答への表示ブロックはECサイトにとってメリットがなく、原則不要
Googleのノンコモディティ方針、ECサイトが取るべきコンテンツ戦略

Googleのノンコモディティ方針、ECサイトが取るべきコンテンツ戦略

Googleが2026年5月、AI検索時代を見据えた新しい可視性ガイドラインを公開した。その中核にあるのが「ノンコモディティ・コンテンツ(Non-Commodity Content)」という概念だ。誰にでも書ける凡庸な情報ではなく、書き手自身の経験や独自の視点がにじむコンテンツを評価するという方針である。

Practical Ecommerceの記事によると、この考え方自体は目新しいものではない。Googleは長年にわたりEEAT(経験・専門性・権威性・信頼性)を重視してきた。しかしAIによるゼロクリック検索が急速に台頭する中で、改めて「人間にしか書けないコンテンツ」の重要性が言語化された形だ。

この記事では、Googleの「ノンコモディティ」方針の具体的な内容を整理する。あわせて、ECサイトを運営する事業者やWooCommerceユーザーがこの変化をどう受け止め、どんなコンテンツ戦略を取るべきかを実務目線で解説する。

Googleが定義する「コモディティコンテンツ」とは何か

Googleが定義する「コモディティコンテンツ」とは何か

GoogleのAI可視性ガイドラインは、検索上位を目指すコンテンツを2つに大別している。「コモディティコンテンツ」と「ノンコモディティコンテンツ」だ。まず前者の定義から確認しよう。

誰が書いても同じになる情報

コモディティコンテンツとは、いわゆる「一般的な知識」に基づいて書かれた情報のことだ。具体例としてGoogleが挙げているのが「初めて住宅を購入する人への7つのヒント」といった記事である。この手の内容は、どの書き手が担当しても似たような仕上がりになる。

実務的にいえば、競合他社の記事を参考に構成し、公開データだけを元にまとめた商品比較記事や、製品スペックを並べただけの紹介ページが該当する。生成AIを使えば数分で量産できるタイプのコンテンツだ。

検索におけるコモディティコンテンツの限界

Google検索のインハウスリエゾンであるダニー・サリバン氏は、2026年4月のSearch Central Live Torontoでこのテーマを取り上げている。同氏が示した業界別の対比表を見ると、コモディティコンテンツの問題点がより明確になる。

  • ランニングシューズ販売店の場合「ランニングシューズ購入時に考慮すべき10のポイント」
  • インテリアデザイナーの場合「2024年に見逃せないキッチントレンド」

これらは情報として誤りではない。しかし、検索エンジンから見れば「どのサイトを上位表示してもユーザー体験に大差がない」と判断されるリスクをはらむ。AIによる回答生成が進むほど、この傾向は強まるだろう。

ノンコモディティコンテンツが評価される理由

ノンコモディティコンテンツが評価される理由

一方のノンコモディティコンテンツは、書き手固有の経験や専門知識に裏打ちされた情報を指す。生成AIが簡単に要約したり、出典なしで再利用したりしにくい性質を持つ。

Googleが示した具体例

先のダニー・サリバン氏による業界別の対比表では、ノンコモディティに該当する例として以下が挙げられている。

  • ランニングシューズ販売店「なぜこの顧客のシューズは400マイルで壊れたのか、摩耗パターンの分析」
  • インテリアデザイナー「大理石 vs ブドウジュース、5人家族に石材を勧めなかった理由」

どちらも実際の顧客対応や施工現場で起きた具体的なエピソードだ。競合が簡単に真似できる内容ではなく、読み手に「この店で買いたい」「このデザイナーに依頼したい」と思わせる力がある。

EEATとの関係性

ノンコモディティという用語は新しいが、背景にある考え方はGoogleが長年重視してきたEEATと重なる。EEATとは「Experience(経験)」「Expertise(専門性)」「Authoritativeness(権威性)」「Trustworthiness(信頼性)」の頭文字を取った評価基準だ。

Practical Ecommerceの記事では、Googleが以前から人間の評価者に対してEEATに基づくサイト評価を指示しており、ランキングアルゴリズムにもヘルプフルコンテンツシステムの一部としてEEATに似た要素が組み込まれている可能性が高いと指摘している。要するに、新しい概念が登場したというより、AI時代に合わせて既存の評価軸を再定義したと見るのが自然だ。

コモディティコンテンツ(Before)
「ランニングシューズ購入時に考慮すべき10のポイント」
どのサイトにも載っている一般的なアドバイスを列挙した記事。生成AIで容易に複製できる。
検索評価: 差別化要因が乏しく、上位表示が難しい
↓
ノンコモディティコンテンツ(After)
「なぜこの顧客のシューズは400マイルで壊れたのか、摩耗パターンの分析」
実際の顧客事例と店舗独自の分析データに基づく記事。生成AIでは再現できない具体性がある。
検索評価: 独自性が評価され、上位表示の可能性が高まる
※Practical Ecommerce掲載のGoogle公式事例を基に再構成

上図の対比からわかるように、ノンコモディティコンテンツは「そのサイトでなければ読めない情報」を提供する。この一点がAI時代の検索評価において決定的な差となる。

ECサイトが取り組むべきコンテンツ戦略

ECサイトが取り組むべきコンテンツ戦略

では、WooCommerceをはじめとするECサイト運営者は、この方針転換にどう対応すればよいのか。具体的な打ち手を3つの軸で整理する。

独自データに基づく分析記事

顧客の購買データや問い合わせ履歴を分析し、傾向を記事化する手法はノンコモディティコンテンツの典型例だ。「昨年と比べて20代女性の購入単価が15%上昇した理由」「雨の日に売れる商品トップ5とその背景」といった内容である。

WooCommerceのレポート機能やGoogleアナリティクスのデータを活用すれば、小規模店舗でも十分に独自性のある分析が可能だ。数字と具体的な事例をセットにすることで、読み手の信頼を得やすくなる。

実際の使用例や顧客ストーリー

商品紹介ページに顧客の使用シーンを詳細に盛り込むことも効果的だ。「30代男性がキャンプで3日間使用した感想」「子育て中の女性が選んだ理由と1カ月後の変化」といった具体的なエピソードは、スペック表では伝わらない価値を読者に届ける。

重要なのは、単なるレビュー評価の転載ではなく、店舗スタッフが直接ヒアリングした内容や観察した気づきを文章化することだ。この一手間が、生成AIでは代替できない独自性を生む。

専門家としての見解や実験結果

自社で取り扱う商材について、スタッフが実際に検証した結果を公開する方法もある。「3種類の防水スプレーを実際に試して効果を比較した」「同価格帯の Bluetooth イヤホン5製品を音質測定器でテストした」といった記事だ。

これらは手間とコストがかかるが、検索エンジンからの評価だけでなく、ブランドの信頼構築やリピーター獲得にも直結する。YouTube動画と組み合わせれば、さらに効果は高まるだろう。

コモディティコンテンツが無価値というわけではない

コモディティコンテンツが無価値というわけではない

ここまでノンコモディティの重要性を強調してきたが、誤解してはいけない点がある。商品リリース情報や価格改定のお知らせ、採用情報といった「コモディティ的」なコンテンツにも確かな価値は存在する。

読者が求めるなら迷わず発信する

Practical Ecommerceの記事はこの点を明確に指摘している。読者が知りたい情報であれば、それがコモディティコンテンツであっても積極的に発信すべきだ。自社ブランドのファンは新製品の発表を待っているし、既存顧客はメンテナンス情報を必要としている。

直接流入の強化は、結局のところ最も確実なSEO対策である。コモディティかノンコモディティかという区分に過度に縛られるより、まずは目の前の顧客が何を求めているかに集中する姿勢が大切だ。

バランスの取れたコンテンツ設計を

理想的なのは、両方のタイプをバランスよく配置することだ。商品ページはコモディティ的な基本情報をしっかり押さえつつ、ブログ記事ではノンコモディティ的な独自コンテンツで差別化する。この二層構造が、AI検索時代のECサイトに求められるコンテンツ戦略の基本線となる。

WooCommerceサイト運営者が今すぐ始めるべき3つの施策

WooCommerceサイト運営者が今すぐ始めるべき3つの施策

ここまでの内容を踏まえ、WooCommerceでECサイトを運営する事業者が今日から取り組める具体的なアクションを3つに絞って提案する。

1. 商品説明文に実体験を注入する

メーカー提供のスペック情報をそのまま転載している商品説明ページがあるなら、すぐに手を入れるべきだ。スタッフが実際に商品を使った感想や、想定外の使い方の発見、競合品との微妙な違いなどを追記するだけで、コンテンツの独自性は格段に高まる。

2. 社内ブログに顧客事例カテゴリを新設する

WooCommerceサイトにブログ機能を追加するのは難しくない。そこに「お客様事例」というカテゴリを作り、月1本のペースで実際の顧客ストーリーを掲載していく。許可を得た上で、購入のきっかけや使用後の変化を具体的に聞き取って記事化する。

3. アクセス解析から問いの種を探す

Googleサーチコンソールで自社サイトに流入している検索クエリを確認し、まだ十分に回答できていない質問を特定する。「〇〇 比較」「〇〇 口コミ」「〇〇 使い方」といったクエリに対して、自社の実体験やデータに基づいた回答記事を用意すれば、それがそのままノンコモディティコンテンツになる。

この記事のポイント

  • GoogleはAI検索時代に対応するため「ノンコモディティコンテンツ」の重要性を正式に打ち出した
  • ノンコモディティとは、書き手固有の経験や専門知識に裏打ちされた、生成AIでは簡単に再現できない情報を指す
  • ECサイトでは顧客データ分析、使用事例の詳細な紹介、自社検証記事の公開が有効な差別化策となる
  • 読者が求める情報であれば、コモディティ的なコンテンツにも価値はある、バランスが肝心
WooCommerce 10.9 Beta公開、決済フローの改善と管理画面刷新の全容

WooCommerce 10.9 Beta公開、決済フローの改善と管理画面刷新の全容

WooCommerce 10.9 のベータ版が公開された。正式リリースは2026年6月23日の予定だ。今回のアップデートでは、決済フローのデータベース負荷を下げる施策と管理画面の UI 刷新、そしてコアへのメールログ機能の統合という 3 つの柱に加え、多数の実験的機能が同梱されている。

中でも決済の「離脱」を減らす設計変更は、100 を超える細かなデータベース処理の整理とともに、ストア運営者にとって直接的なパフォーマンス向上をもたらす。また、長年要望の多かったバリエーション画像ギャラリーやカラースウォッチが機能フラグとしてコアに組み込まれ、開発者向けの新 API 群も登場する。本記事では、EC サイト運営者が知っておくべき変更点を中心に、WooCommerce 10.9 の内容をわかりやすく解説する。

決済フローの最適化とデータベース負荷低減

決済フローの最適化とデータベース負荷低減

WooCommerce では従来、ユーザーが商品をカートに入れて決済画面を開いた時点で「下書きの注文(draft order)」というレコードを作成していた。この下書きは、購入を完了しなかった訪問者でもそのままデータベースに残り、時間が経つと大量の孤立レコードとなってストアのパフォーマンスを圧迫する原因になっていた。

10.9 ではこの処理が見直され、注文確定の直前まで下書きの作成を遅延させる設計に切り替わる。具体的には、Store API が新規セッションの GET リクエストや PATCH リクエストを受けても、すぐに下書き注文を永続化しない。結果として、購入が成立しなかったユーザーによる不要なレコードが大幅に減少し、データベースへの書き込み負荷が軽減される仕組みだ。

これに付随し、決済処理の保存回数やルックアップの最適化、商品フィルタの SQL 挙動の改善、管理画面と店舗側の商品ページにおけるクエリ数の抑制も同時に行われる。全体として、特に商品数が多いストアでは、管理画面やチェックアウト時の体感スピードが段違いに変わるだろう。

従来の決済フロー(Before)
1. セッション開始 → 2. カート取得 → 即座に下書き注文を作成 → 3. 決済 → 4. 未完了でも下書きが残る
※ 購入を途中でやめた顧客のゴミデータが蓄積しがち
↓
改善後の決済フロー(After)
1. セッション開始 → 2. カート取得 → 下書き作成は保留 → 3. 実際に注文確定するタイミングで初めて作成 → 4. 未完了レコードは発生しない
※ データベースへの無駄な書き込みが減り、サーバー負荷が下がる

上図は旧来のやり方と 10.9 の改善点を概念的に示したものだ。実際の実装では Store API と内部の注文管理の細かい連携が組み合わさり、データベースへの影響はより精密にコントロールされる。

WooCommerce管理画面のUIが刷新

WooCommerce管理画面のUIが刷新

店舗の管理画面にアクセスしたときに「すっきりした」と感じるようであれば、それは錯覚ではない。10.9 では WooCommerce の管理ヘッダーが WordPress のデザインシステムに合わせて洗練され、全体的な見た目が統一される。

加えて、小さな画面サイズで表示が崩れていた管理画面の各ビューには個別の修正が行われ、管理画面全体で利用されるモーダル(ポップアップ)も一貫性のあるスタイルに揃えられた。これまで各ページでちらばっていた「タスクリストのリマインダーバー」は大部分の管理画面から削除されるが、初期設定の案内自体は WooCommerce ダッシュボードやアクティビティパネルから引き続き確認できる。

この UI 調整は、一見すると小さな変更に見えるが、日常的に管理画面を操作する運営者にとっては、不要な情報を減らし、必要な操作に集中しやすくなる利点がある。パフォーマンス面でも、画面描画に使われる余分な JS や CSS が整理されているため、軽量化にもつながっている。

トランザクションメールのログ機能がコアに実装

トランザクションメールのログ機能がコアに実装

これまで WooCommerce で送信される注文確認メールやステータス更新のメールが「届いていない」というトラブルに遭遇した場合、原因を特定するには別途メールログ用のプラグインをインストールするか、テストメールを手動で送信するしかなかった。

10.9 からは、こうしたトランザクションメールの送信状況が WooCommerce コア内で直接記録されるようになる。ログは WooCommerce → ステータス → ログ の画面から確認でき、送信結果(成功・失敗)や、利用可能な場合は失敗理由も表示される。新たにプラグインを追加する必要はない。

この機能により、店舗運営者はメール不達の調査がはるかにスムーズになる。ログには日時やトリガーとなったアクションも含まれるため、顧客から「メールが届かない」という問い合わせがあった際、迅速に状況を確認できるようになるだろう。

実験的機能の最新情報

実験的機能の最新情報

WooCommerce 10.9 は Automattic の「Radical Speed Month」の勢いもあり、数多くの実験的・ベータ機能が盛り込まれている。いずれもオプトインまたは機能フラグで有効化するタイプだが、将来の標準機能を見据えた重要な布石だ。

Canonical WooCommerce abilities 〜商品と注文の操作を抽象化〜

WooCommerce 10.9 では、商品や注文を操作するための最初の「カノニカル(標準的)な abilities」が導入される。abilities は、REST API のエンドポイントを 1 対 1 でラップするのではなく、スキーマで定義されたビジネス操作(商品の問い合わせ、作成・更新、注文の検索、ステータス変更、注文メモの追加など)を、権限チェックやメタデータを伴って提供する仕組みだ。

これにより、WooCommerce は WordPress Abilities API や MCP、管理ツール、CLI、自動化処理、そして将来のあらゆる「エージェント」インターフェースに対して、トランスポートに依存しない共通の契約を持つことになる。最初に商品と注文の abilities が提供され、既存の WooCommerce 専用 MCP エンドポイントは猶予期間として残される。さらに、同じパターンがサブスクリプションや決済口座、配送ルール、商品アドオン、ギフトカードといった拡張機能の領域にも展開される予定だ。

商品管理エディタの移行と製品エディタ v2 の廃止予定

実験的な商品カタログエディタは 10.9 でも成熟を続けており、クラッシュリカバリ、ドロワーや URL 状態の処理改善、よりタイプを認識したクイック編集フィールド、バリエーション編集の強化などが含まれる。一方で、ブロックベースの製品エディタ(Product Editor)ベータとその拡張 API は、WooCommerce 11.0 での削除を前に非推奨となる。

拡張機能の開発者はこの API を利用しているかを今すぐ監査し、移行パスを計画する必要がある。ただし、この廃止は WooCommerce 内の商品データやコンテンツには一切の影響を及ぼさないため、商品情報そのものが消える心配はない。

バリエーション画像ギャラリーとカラースウォッチ

同じ商品の色違いやサイズ違いに対して、画像ギャラリーを切り替える「バリエーション画像ギャラリー」がネイティブ機能として WooCommerce に追加される(デフォルトではオフ)。WooCommerce → 設定 → 詳細 → 機能 の「Variation gallery」トグルから有効化できる。

さらに、ビジュアル属性とカラースウォッチも機能フラグ制御で試験的に導入される。属性の各項目(例えば「赤」「青」)に色データや画像データを持たせ、商品フィルターやバリエーションセレクターのブロックでスウォッチを表示できるようになる。ストア API のレスポンスも、ビジュアル属性が必要な場合にだけ関連フィールドを返すよう配慮されているため、既存の連携に影響は少ない。

この他にも、買い物客向けのコレクション機能(ウィッシュリストや後で買う)、ブロックベースのメールエディタのテンプレート更新検知と部分適用、在庫復活通知、顧客レビューリクエストメール、実験的なデュアル API と GraphQL 基盤など、多岐にわたるベータ機能が同時に公開されている。いずれも開発者フィードバックを受け付けながら、今後のバージョンで徐々に本格導入される見込みだ。

この記事のポイント

  • WooCommerce 10.9 では、決済前の下書き注文作成が遅延され、データベース負荷が大幅に軽減される
  • 管理画面のヘッダーやモーダル、タスクリストの表示が整理され、よりスッキリした UI に
  • メール送信の成否を WooCommerce の管理画面内でログ確認できるようになった
  • 商品と注文の操作を抽象化する abilities や、バリエーション画像ギャラリーなど実験的機能が多数追加
Shopify障害で店舗停止、広告費消失のリスクと対策

Shopify障害で店舗停止、広告費消失のリスクと対策

2026年6月3日、Shopifyで大規模なサービス障害が発生した。店舗フロントの表示不具合やチェックアウト機能の停止により、世界中のEC事業者が売上機会を失った。とりわけGoogleやMetaに広告予算を投下していた事業者は、クリックを集めながら購入完了に結びつけられないという致命的な状況に陥っている。

本記事では、この障害がECサイトの広告パフォーマンスとSEOに及ぼす実務的な影響、および同様の事態を想定したリスク分散策を整理する。Shopifyに限らず、SaaS型ECプラットフォームに依存する事業者共通の課題として捉えてほしい。

障害の概要と影響範囲

障害の概要と影響範囲

Shopifyは米国東部時間9時27分に問題を認識し、管理画面やPOSレジ、カスタマーサポートへのアクセス障害を公表した。店舗フロントやチェックアウトにも波及し、購入完了ができない状態が約1時間にわたって続いた。10時37分には根本原因を特定し、回復に向かっていると発表している。

影響を受けたのは以下の4領域だ。いずれもEC事業の中核を担う機能であり、たとえ短時間の停止でも事業者の損失は無視できない。

  • 店舗フロントの表示
  • チェックアウト処理
  • 管理画面へのログイン
  • 実店舗向けPOSレジ

Search Engine Landの記事によれば、この障害を最初に報告したのはSenior Paid Media ManagerのAyisha Yousef氏だ。同氏はLinkedIn上でエラーメッセージのスクリーンショットを共有し、広告運用担当者へ注意を呼びかけた。

Shopify障害の時系列

9:27 EDT Shopifyが問題を認識、管理画面とPOSの障害を公表
↓
9:45 EDT 調査中であることを追記、チェックアウト障害が拡大
↓
10:37 EDT 根本原因を特定、復旧対応を実施中と発表

このタイムラインからわかるのは、障害検知から復旧まで約1時間10分というスピード感だ。しかしEC事業者にとって、ピーク時間帯の1時間は致命的な機会損失になりうる。

チェックアウト停止が広告運用に直撃する仕組み

チェックアウト停止が広告運用に直撃する仕組み

最も深刻なのが、広告経由で流入したトラフィックが一切売上に結びつかない状況だ。Googleショッピング広告やMetaのダイナミック広告で商品を表示し、ユーザーがクリックして店舗に到達しても、チェックアウト画面でエラーが発生すれば購入は成立しない。

広告費はクリック単位で課金される。つまり「クリックは発生するがコンバージョンはゼロ」という状態が続けば、ROAS(広告費用対効果)は急落する。以下の図は、障害発生中に起こる広告費消失のメカニズムを単純化したものだ。

通常時(Before)
広告クリック → 商品ページ表示 → チェックアウト完了 → 売上発生
↓
障害発生時(After)
広告クリック → 商品ページ表示 → チェックアウトエラー → 売上ゼロ・広告費だけ消費

この構造は、広告キャンペーンのパフォーマンスデータにも深刻な歪みをもたらす。障害時間帯のコンバージョン率が異常に低くなるため、キャンペーン全体の平均値を押し下げ、自動入札戦略の学習にも悪影響を与える可能性がある。

Google広告とMeta広告への具体的な影響

Google広告では、コンバージョンデータがスマート自動入札のシグナルとして使われる。障害によるゼロコンバージョンが一定期間続くと、アルゴリズムが「このキャンペーンは効果が低い」と判断し、入札単価の引き下げや表示頻度の低下を招く。

Meta広告(Facebook・Instagram)も同様だ。コンバージョンAPIで送信される購入イベントが途絶えると、アルゴリズムが最適なオーディエンスを見失い、その後の配信精度が低下する。特に障害直後の数日間は、通常よりもCPA(顧客獲得単価)が跳ね上がる傾向があると指摘する広告運用者もいる。

Search Engine Landの記事では、Shopify障害中は広告キャンペーンの成果を通常通り評価できないため、後日パフォーマンスを検証する際には障害時間帯を除外するか、別途注釈を加えることが推奨されている。

EC事業者が直面するプラットフォーム依存リスク

EC事業者が直面するプラットフォーム依存リスク

今回の障害は、多くのEC事業者が単一のプラットフォームに売上インフラのすべてを依存している現実を浮き彫りにした。Shopifyは数百万のオンラインストアを支える巨大プラットフォームであり、その停止は個別店舗の努力ではどうにもならないレイヤーで発生する。

とりわけ、以下のような状況にある事業者ほど影響が大きい。

  • プロモーションや新商品発売のタイミングと重なったケース
  • インフルエンサー施策で集中的にトラフィックを集めていたケース
  • Shopifyペイメント以外の決済手段を持たないケース

これは「SaaS型ECの構造的リスク」と言い換えられる。自社サーバーでECサイトを構築するオンプレミス型に比べ、SaaS型は運用負荷が低い半面、障害発生時のコントロール権はゼロに等しい。復旧を待つ以外に打てる手が限られるのだ。

依存度を下げるための分散戦略

完全にShopifyから離れるのは現実的ではない。しかし、致命的な売上機会損失を減らすための「保険」として、以下のような分散策を検討する価値はある。

  • バックアップ用のランディングページを外部で用意しておく(NotionやGoogleサイトで簡易的な注文フォームを設置するなど)
  • InstagramショップやAmazonストアなど、販売チャネルを複数持つ
  • 広告のリンク先をShopifyストア以外にも切り替えられる体制を整える
  • Shopifyとは別の決済リンク(Stripe Payment Linksなど)をSNSプロフィールに常設する

これらの対応は、日常的には使わなくても、緊急時に即座に切り替え可能な「避難経路」として機能する。障害発生から復旧までの1時間を耐え抜くための備えだ。

障害発生時に取るべき3つの即時対応

障害発生時に取るべき3つの即時対応

Shopifyに限らず、ECプラットフォームの障害を検知した際に、広告運用とSEOの両面で即座に実行すべき対応を整理した。以下の3ステップは、今回のShopify障害の事例をもとに構成している。

STEP 1 広告キャンペーンを一時停止する
Google広告・Meta広告・TikTok広告など、Shopifyストアをリンク先とするすべての広告を手動で一時停止する。自動化ルールを事前に設定しておくと迅速に対応できる。
↓
STEP 2 ストアフロントに状況を表示する
管理画面にアクセスできる場合は、トップページに「現在システム障害によりチェックアウトに不具合が発生しています」という告知バナーを設置する。SEO的にはnoindexを付与せず、一時的な障害であることを伝える。
↓
STEP 3 復旧後にパフォーマンスデータを補正する
障害時間帯のデータを分析から除外し、キャンペーン評価に歪みが生じないようにする。Googleアナリティクスで障害時間帯をセグメント化し、レポートに注釈を残しておく。

STEP 1の広告停止が最も重要だ。検索広告のクリック単価はリアルタイムで消費され続けるため、障害を検知してから数分以内に対応できるかどうかで、無駄になる広告費の額が大きく変わる。Google広告の自動化ルールで「コンバージョンがゼロになったらキャンペーンを停止する」条件を事前に設定しておくと、人的対応の遅れを防げる。

SEO視点で見る障害時の注意点

チェックアウトや管理画面の障害が直接的にSEOにペナルティを与えることはない。ただし、店舗フロントが完全に表示されない状態が長時間続くと、Googlebotがクロールに失敗し、インデックスの鮮度が落ちる可能性はある。

より実務的に注意すべきは、SNSや口コミで「このストア使えない」というネガティブな評判が広がることだ。ブランド検索の増加に対して、表示される検索結果がネガティブな情報に偏ると、その後のオーガニック流入にも影響が出る。障害発生時には、自社のSNSアカウントで状況を説明し、検索結果のコントロールに努めることが重要になる。

この記事のポイント

  • Shopifyの大規模障害はEC事業者に広告費の無駄遣いと機会損失をもたらした
  • チェックアウト停止中は広告キャンペーンを即座に停止し、復旧後にデータ補正を行う必要がある
  • 単一プラットフォームへの依存度を下げるため、販売チャネルと決済手段の分散が有効
  • 障害発生時に備えた広告自動化ルールの設定が、被害を最小化する鍵となる
  • 復旧後はキャンペーンパフォーマンスを適切に評価し、アルゴリズムの誤学習を防ぐこと
WooCommerce 10.9で取引メールログ機能がコアに統合、送信失敗の可視化でトラブル解決が容易に

WooCommerce 10.9で取引メールログ機能がコアに統合、送信失敗の可視化でトラブル解決が容易に

WooCommerceのメールトラブルシューティング用ドキュメントは、サポート対応の中で常に上位のアクセス数を記録してきた。全サポートやり取りの1%以上で、最終的にこのドキュメントを案内する流れになっているという。こうした状況を踏まえ、WooCommerce開発チームは問題の切り分けに不可欠なログ機能をコアプラグインに組み込む判断を下した。

WooCommerce 10.9では、取引メール(トランザクショナルメール)の送信ログ機能が標準搭載される。店舗運営者はどのメールが正常に送信され、どのメールが失敗したのかをログで一元的に確認できるようになる。失敗時には具体的なエラー理由も記録されるため、従来のように外部のログ取得プラグインを導入する手間が省ける。

取引メールのログ機能の仕組み

取引メールのログ機能の仕組み
従来のトラブルシューティング(Before)
メールが届かない原因がわからず、外部のログプラグインを別途導入する必要があった。
エラー発生 手探りで原因調査 → プラグイン追加 ようやくログ取得
↓
WooCommerce 10.9 での改善(After)
コア機能としてログが自動出力され、管理画面からすぐに送信成否と失敗理由が確認できる。
送信完了 管理画面で即確認 → 失敗時 エラー理由が明示

このデモ図で示すように、従来はエラーのたびに外部ツールやプラグインを頼っていたが、10.9以降はWooCommerce本体が自動的にメール送信のログを取得する。店舗運営者の負担が一段階減る形だ。

内部設計の要点

新たに導入されるEmailLoggerクラスは、以下の4つのフックに接続される。これにより、メール送信のあらゆる局面を捕捉できる仕組みになっている。

  • woocommerce_email_sent:WooCommerceがメールを送信するたびに発火し、成功または失敗の真偽値とWC_Emailインスタンスを受け取る。
  • woocommerce_email_disabled:メール種別が設定で無効化されていて送信が行われなかった場合に発火する。
  • woocommerce_email_skipped:受信者が存在しないなどの前提条件を満たさず、送信がスキップされた場合に発火する。短い理由識別子も渡される。
  • wp_mail_failed:WordPress全体のメール送信失敗フック。ここからWP_Errorメッセージを取得し、SMTP接続エラーなどの具体的な原因をログに含める。

いずれの結果も、wc_get_logger()を通じて新しいソース名transactional-emailsの下に書き込まれる。WooCommerce標準のロガーを経由するため、店舗側がすでに設定しているログハンドラ(ファイルまたはデータベース)とログレベルしきい値をそのまま利用できる。

  • ログハンドラ:デフォルトはwp-content/uploads/wc-logs/ディレクトリへのファイル出力だが、WooCommerce > ステータス > ログ画面でデータベース保存に切り替えている場合はそちらが使われる。新たなストレージ層は不要だ。
  • ログレベル:送信成功はINFO、失敗はWARNING、無効化やスキップによる未送信はNOTICEとして記録される。本番環境でエラーレベルのみ取得する設定にしておけば、失敗だけを素早く把握できる。
  • 保持期間:他のWooCommerceログと同様に、WooCommerce > ステータス > ログ > 設定から保持ポリシーを管理できる。

ログに記録される情報

各ログエントリは1行で完結し、大量のメールが飛び交う店舗でもストレージへの影響はほとんどない。文脈情報は次のような構造で出力される。

context = [
    'source'     => 'transactional-emails',
    'email_type' => 'customer_processing_order',
    'status'     => 'sent' | 'failed' | 'disabled' | 'skipped',
    'recipient'  => 'jdoe' | 'guest' | 'jdoe, guest',
    'reason'     => 'no_recipient',          // スキップ時のみ
    'order'      => 12345,                   // 注文ID、状況に応じて'product'や'user'が入る
]

ログレベルが3段階に整理されているため、WARNINGなら即座に問題を疑い、NOTICEなら設定通りの挙動であることを確認し、INFOなら正常に送信されたと判断できる。フィルタリングやアラートの仕組みと組み合わせれば、運用の自動化にもつなげやすい。

注文画面での確認

ログとは別に、個々の注文に関連づいたメールの履歴が注文ノートにも表示されるようになった。WooCommerce > 注文から任意の注文を開くと、その注文に対して送信が試みられた取引メールとその成否が一覧できる。

ここで注意したいのは、注文ノートに表示されるのは「実際に送信が試みられたメール」だけという点だ。設定で無効化されているメール種別や、受信者不在でスキップされたものは表示されない。注文ノートを無駄に長くせず、期待される挙動とその結果に焦点を絞る設計思想がうかがえる。

プライバシーと拡張性への配慮

プライバシーと拡張性への配慮
ログ出力時のプライバシー保護フロー
送信先アドレス → ユーザー名に変換 → ゲストは’guest’と記録
エラーメッセージ内のアドレス → 正規表現で除去
■ ユーザー名マッピング ■ アドレス情報の削除処理

上図のように、メールアドレスが直接ログに書き込まれることはない。プライバシー保護と拡張性の両面に配慮した設計が盛り込まれている。

プライバシー保護の仕組み

受信者のメールアドレスはログに一切出力されない。resolve_recipient()メソッドが各アドレスをWordPressのユーザー名に変換する。アカウントを持たない購入者(ゲスト)の場合は'guest'というラベルに置き換えられる。BCCなどで複数の受信者がいる場合は、カンマ区切りのラベル一覧が記録される。

PHPMailerが返すエラー文字列には、しばしば受信者アドレスが直接埋め込まれているが、これもredact_emails()という正規表現によるスクラブ処理で除去される。この処理はRemoteLogger::redact_user_data()と同等のロジックを採用しており、WooCommerce全体で一貫したプライバシー保護が維持される。

拡張ポイント

WooCommerce 10.9では、メールログの動作をカスタマイズするためのフィルターフックが2つ追加されている。

  • woocommerce_email_log_enabled:ログ出力の有効・無効を切り替える。グローバルに無効化したり、$email_idをチェックして特定のメール種別だけ対象外にできる。
  • woocommerce_email_log_context:ログに書き込まれる文脈情報を書き換える。フィルターには書き込み前の配列が渡されるため、項目の追加・削除・変更が自由に行える。

ログ機能そのものは、WooCommerce > ステータス > ログ > 設定タブから管理画面でオフにできる。特定の機能のみを無効にしたい場合は、以下のコードをテーマのfunctions.phpなどに追加する。

add_filter( 'woocommerce_email_log_enabled', '__return_false' );

パフォーマンスへの影響を最小限にしたい場合や、すでに別のシステムでメールログを収集している場合は、このフィルターで柔軟に対応できる。

実装上の注意点と今後の展望

実装上の注意点と今後の展望

ログ機能にはひとつ、既知の制限が存在する。wp_mail_failedはWordPress全体のグローバルなフックであるため、WooCommerceのメール送信処理の直後に別のプラグインが送信に失敗した場合、そのエラーが誤ってWooCommerceのメールに紐づく可能性がある。

$last_mail_errorはWooCommerceのメール送信ごとにクリアされるため、古いエラーが後続の処理に引き継がれることはない。しかし、送信の直後という非常に狭い時間枠では、別のエラーが紛れ込む余地が理論上残る。この事象は実際にはまれであり、影響を受けるのは人間が読むための失敗理由テキストだけだ。email_typeやstatusといった主要な情報は常に正確である。

この取引メールログ機能は、Automatticが実施した「Radical Speed Month」の一環として開発された。まずは診断機能としての土台を固め、次のステップではWooCommerceが自らメールエラーを警告し、修正を支援する能動的なレイヤーの追加を検討しているという。トラブルシューティングにかかる時間をさらに短縮し、より多くの店舗運営者がメール問題に煩わされずに済む未来を描いている。

この記事のポイント

  • WooCommerce 10.9から、取引メールのログ機能がコアプラグインに標準搭載される。外部ツール不要で送信の成否と失敗理由を把握できる。
  • ログはINFO(成功)、WARNING(失敗)、NOTICE(未送信)の3段階で出力され、管理画面の注文ノートにも関連メールの履歴が表示される。
  • メールアドレスはログに直接記録されず、ユーザー名やゲストラベルに変換される。エラーメッセージ内のアドレス情報も自動で除去される。
  • フィルターフックを使ってログ出力の無効化や文脈情報のカスタマイズが可能。パフォーマンスや既存システムとの兼ね合いで柔軟に調整できる。
  • 開発チームは今後の展開として、エラーを自動検知して運営者に通知する仕組みの追加を視野に入れている。