EC運用

【ShopServe】サイドバー変更が反映されない?同じURLで表示が変わる原因はRefererだった

同じURLの2つのブラウザ画面でサイドバーの表示が異なる様子を示すイラスト|ShopServeサイドバー不具合調査

ShopServeでサイドバーを編集し再構築しても商品ページに反映されない。しかも同じURLなのに表示が変わる——原因はRefererヘッダーによるテンプレートの出し分けでした。切り分けの全過程と解決策を記録します。

ShopServe(ショップサーブ)で運用しているECサイトで、かなり不可解な現象に遭遇しました。サイドバー(商品カテゴリやバナー)のHTMLを管理画面で編集して保存し、「サイト再構築」も複数回実行したのに、商品ページでは古い内容のまま表示されるのです。

さらに厄介なことに、同じURLなのにアクセスの仕方によって表示が変わるという挙動まで確認できました。今回はこの現象を切り分けて解決するまでの記録です。同じ症状で困っている方の参考になれば幸いです。

現象の整理

  • 管理画面でサイドバーのHTMLを編集・保存した
  • 「サイト再構築」を複数回実行した
  • それでも商品ページでは古いサイドバーが表示される
  • 同じURLでも、表示が新しくなったり古くなったりする

「保存できていないのでは」というレベルの話ではなく、明らかに何かの条件で新旧が切り替わっている状態でした。

切り分けの過程(試して除外したもの)

原因の候補をひとつずつ潰していきました。

疑った箇所検証内容と根拠結果
ブラウザキャッシュcache: 'no-store' を付けた fetch() で直接取得しても再現除外
CDN・中間キャッシュレスポンスヘッダーに Cache-Control: privateAge ヘッダー無しで兆候なし除外
JavaScriptJSを一切実行しない fetch() のみのテストでも再現除外
PHP(自社管理のファイル)該当ファイルがそもそも存在しない除外
.htaccess内容を全て確認し、最小構成でテストしても再現除外
Smartyのコンパイル済みキャッシュtemplates_c/ をリネームして強制再生成しても変化なし除外

ひとつ補足すると、最後のSmartyキャッシュの検証では、リネーム操作の直後に一時的な接続エラーが発生し、サイトを落としかけました。本番サーバーのキャッシュ関連フォルダを直接操作する実験は、「安全なはず」と思っても瞬間的な障害リスクがある——これは今回の教訓のひとつです。

ブレイクスルー:アクセス経路で表示が変わる

転機は偶然でした。「カテゴリ一覧ページからリンクをクリックして商品ページへ遷移した場合」と「同じURLに直接アクセスした場合」で、表示が異なることに気づいたのです。

そこで fetch()Referer ヘッダー(参照元の情報)だけを明示的に変えて検証しました。

  • Referer がカテゴリ一覧ページ → 新しい内容が返る
  • Referer が無い(直リンク・ブックマーク等) → 古い内容が返る

リダイレクトは発生しておらず、同一URL・同一ステータス200のまま、Referer の値だけでサーバーが返すHTMLが変わっていたのです。これで「キャッシュの問題ではなく、サーバー側の出し分け」と確定しました。

根本原因:「トップページ用」設定が商品ページに流用されていた

FTPで管理画面の裏側にあるSmartyテンプレートのソースを確認したところ、原因が見えてきました。

ShopServeの管理画面には「商品カテゴリ(サイド用)」という設定が2箇所存在します。

  1. 「商品ページ」用(一覧ページと共通)
  2. 「トップページ」用

今回のサイトはトップページを独自HTMLで構築していたため、「トップページ用の設定は使っていない」と思い込み、編集していませんでした。

ところが実際には、ShopServe内部で「今どのカテゴリの文脈にいるか判断できない場合(=Referer が無い=直リンクアクセス)」のフォールバック表示として、名前とは裏腹に「トップページ」用テンプレートが商品ページにも流用されていました。

つまりこの2つの設定は「トップページ/商品ページ」というページ種別で分かれているのではなく、実質は「カテゴリの文脈があるか無いか」で分岐していて、片方のラベルがたまたま「トップページ」という紛らわしい名前になっていただけだったのです。

解決策

「トップページ」側の同じ設定にも、「商品ページ」側と全く同じ新しいHTMLを貼り付けたところ、直リンクでも新しいサイドバーが表示されるようになり解決しました。

今回の教訓

  • ShopServeでサイドバー等の共通パーツを変更するときは、同じ名前・似た名前の設定が複数箇所に無いか必ず確認し、関連する箇所は全て同時に編集する
  • 「〇〇ページ用」というラベルは、内部のフォールバックロジックと一致しているとは限らない
  • 「同じURLなのに結果が変わる」不可解な現象では、HTTPリクエストヘッダー(Referer 等)による出し分けを疑うのが有効な切り分け手段
  • 本番サーバーのキャッシュ関連フォルダを直接操作する実験は、瞬間的な障害リスクを踏まえて慎重に

カートの内部仕様に振り回されると「もう別のカートに乗り換えたい」と感じがちですが、その判断には切り分けと整理が必要です。考え方は 「ECカートが使いにくい」で乗り換える前に|後悔しないための判断フロー にまとめています。

同じような「更新したのに反映されない」「原因がどこにあるか分からない」というECサイトのトラブルは、状況を伺えばこちらで切り分けできます。お困りの際はお気軽にご相談ください。

この記事の内容を自社で実践したい方へ

現状を確認し、必要な部分だけを整理してご提案します。不要な保守契約や営業は行いません。

EC運営・広告改善について相談する
ブログ一覧へ戻る
あなたの事業に合った方法をご提案します
記事を読んで気になったことがあれば、お気軽にご相談ください。