Urlによってレコメンドがうまく動作しない

Topic summary

Shopifyテーマで、商品ページの「Recommended products」がURLによって表示されたりされなかったりする不具合が相談されている。/collections/.../products/... では表示される一方、/products/... では同じ商品でも表示されず、設定上はレコメンド表示がONになっている。

投稿者の確認では、product.idrecommendations.performed などの値は両URLで同じだったが、recommendations.products_count だけが表示ありURLで「4」、表示なしURLで「0」になった。assign で値を入れても表示なし側では常に0のままで、product-recommendations.liquid 内の条件分岐や recommendations object の挙動が焦点になっている。

回答では、デモストアでは両URL形式とも正常表示されるため、テーマ固有の実装差異の可能性があり、テーマサポートへの問い合わせが推奨された。併せて Shopify の recommendations object と関連ドキュメントが調査先として案内されている。

別案として、自動レコメンドを使わず、メタフィールドに手動で関連商品IDを登録する方法や、未設定時は所属コレクションの商品を表示する代替運用も提案された。根本原因の特定や修正方法はこの時点では未解決。

Summarized with AI on March 7. AI used: gpt-5.4.

https://themes.shopify.com/themes/mr-parker/styles/wardrobe/preview?locale=ja

上記テンプレートを用いて、サイトを構築しております。

トップページの商品一覧から遷移した場合には、商品ページにある「Recommended products」が表示されるのですが、

商品一覧(Collections)から遷移した場合に、同様の商品でも「Recommended products」が表示されない現象に見舞われています。

こちらの原因を究明・解決したいと思っています。

カスタマイズより、レコメンド表示はONにしております。


URLは下記のような形です。

■前者(レコメンドが表示される)

https://ドメイン/collections/frontpage/products/商品名

■後者(レコメンドが表示されない)

https://ドメイン/products/商品名

product.liquidは下記の形です。

{% section 'product-template' %}
{% section 'custom-fields-products' %}
{% section 'product-recommendations' %}

product-recommendations.liquidによって表示を行っていると思われるのですが、こちらは下記のようなコードです。

{% if section.settings.show_product_recommendations %}
{% assign limit = section.settings.recommended_product_limit %}

  

  {%- if recommendations.performed -%}
    {%- if recommendations.products_count > 0 -%}
      

        

          ## {{ section.settings.product_recommendations_heading }}
          
            {%- if settings.header_border_style == 'zigzag' -%}

{% endif %}
          
        

      

      

      {% case section.settings.grid %}
        {% when 2 %}
          {%- assign grid_item_width = 'span-6 auto' -%}
        {% when 3 %}
          {%- assign grid_item_width = 'span-4 md-span-4 sm-span-6 auto' -%}
        {% when 4 %}
          {%- assign grid_item_width = 'span-3 md-span-4 sm-span-6 auto' -%}
       {% endcase %}
      
        {%- for product in recommendations.products -%}
          

              {% render 'product-listing', product: product, limit: limit %}
          

        {%- endfor -%}
      

    {%- endif -%}
  {%- else  -%}
    

  {%- endif -%}
  

{% endif %}

変数に問題があるのかと思い、if文の前で変数を表示してみたところ、両URLにて変数の内容は同じでした。

「product.id」は取得できており、「recommendations.performed」等のif文の判断に用いられている変数も同一(0やfalse等)でした。

しかし、if文のあとで「recommendations.products_count」変数を表示したところ、レコメンド有URLには「4」、レコメンド無URLにおいては「0」と表示されました。

レコメンド無URLにおいては、「recommendations.products_count」にassignを用いて数値を代入しても、常に「0」と表示されました。

対して、レコメンド有のURLにおいてはif文後に数値を代入しても「4」になりました。


上記のような形なのですが、原因や解決方法などはわかりそうでしょうか。

まだ経験が浅く、要領を得ない内容になっていた場合は申し訳ございません。

助力いただけますと非常に幸いです。

不足情報などありましたら、追記いたします。

何卒よろしくお願いたします。

他の方なら原因含めて回答可能かもしれませんが、私個人の回答としてはテーマのサポートに問い合わせることをお勧めします。

以下はデモストアの同じ商品のページで、記載いただいたURLのパターンに合致していると思いますが、どちらのURLでも「Recommended products」は表示されているためです。

https://mr-parker.myshopify.com/products/rockstar-romper

https://mr-parker.myshopify.com/collections/new-arrivals/products/rockstar-romper

■recommendations object

自力で調査を行うという場合には、下記を参照しつつ該当部分の仕組みを確認された方が良いように思います。
全く同じコードではないかもしれませんが、根幹は同じではと思いますので。

https://shopify.dev/docs/themes/liquid/reference/objects/recommendations

https://shopify.dev/tutorials/develop-theme-recommended-products

https://shopify.dev/tutorials/develop-theme-recommended-products-using-liquid

以上ですが、すでに確認済みのことばかりでしたら申し訳ありません。

Shopifyに限らずですが、レコメンドのアルゴリズムは大量のデータが貯まらないと使い物にならないことが多いので、私は自動レコメンドを使用しません。

レコメンド自動化の代わりに、メタフィールドに出したい商品IDを書き込み表示する方法で代替してます。

また、メタフィールドに手動レコメンドが登録されてない場合は、商品が所属しているコレクションを上から数点出す方式でカバーしてます。

1 Like