Show product recommendations in Shopify

In this snippet, the section content builds the general display by looping through each product returned through the products attribute of the recommendations object.

Add this code to sections/product-recommendations.liquid

  data-url="{{ routes.product_recommendations_url }}?section_id={{ }}&product_id={{ }}&limit=4"
  {%- if recommendations.performed and recommendations.products_count > 0 -%}
    <h2>You may also like</h2>

      {%- for product in recommendations.products -%}
        <li class="product">
          <a href="{{ product.url }}">
              src="{{ product.featured_image | image_url: width: 300, height: 300 }}"
              alt="{{ product.featured_image.alt }}"

            <p class="product__title">{{ product.title }}</p>
            <p class="product__price">{{ product.price | money}}</p>
      {%- endfor -%}
  {%- endif -%}

{% javascript %}
  const handleIntersection = (entries, observer) => {
    if (!entries[0].isIntersecting) return;


    const url = productRecommendationsSection.dataset.url;

      .then(response => response.text())
      .then(text => {
        const html = document.createElement('div');
        html.innerHTML = text;
        const recommendations = html.querySelector('.product-recommendations');

        if (recommendations && recommendations.innerHTML.trim().length) {
          productRecommendationsSection.innerHTML = recommendations.innerHTML;
      .catch(e => {

  const productRecommendationsSection = document.querySelector('.product-recommendations');
  const observer = new IntersectionObserver(handleIntersection, {rootMargin: '0px 0px 200px 0px'});

{% endjavascript %}

{% schema %}
    "name": "Product recommendations",
    "settings": []
{% endschema %}
1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Oopps, sorry. This discussion is closed.

If you are a paying customer and you are looking for Tech Support please post a ticket on our Support Tickets page and we will respond promptly.

If you are not a paying customer and you would like to post a pre-sale question or a quote request please use our Contact form.

Why did we close the discussion?

Many of the customers started reporting issues as comments instead of the ticketing system and this started delaying our response time.

We are making this change to serve our customers better. We have ramped up our support team and we are trying to get the reply out on the same day.

Thanks for understanding.