2

We have listing menu items for the restaurant and something wrong, it always shows "Sold Out" in Google's search results. The items given to Gooogle as ld+json schema with the availability property.

Snippet part (with liquid variables from backend):

<script type="application/ld+json">
  {
    "@context": "http://schema.org",
    "@type": "Restaurant",
    "name": "{{ account.business_name | replace: '"', "'" }}",
    "description": "{{ location_description | replace: '"', "'" }}",
    "acceptsReservations": "{{ reservations_are_avalible }}",
    "url": "{{ account.website_url | replace: '"', "'" }}",
    "logo": "{{ account.logo_medium_url }}",
    "image": "{{ account.logo_medium_url }}",

    "hasMenu": [
      {% for menu in account.visible_menus %}
        {
          "@type": "Menu",
          "name": "{{ menu.name | replace: '"', "'" }}",
          "url": "{{ menu.path }}",
          "hasMenuSection": [
            {% for menu_section in menu.sections %}
              {
                "@type":"MenuSection",
                "name": "{{ menu_section.name | replace: '"', "'" }}",
                "image": "{{ account.logo_medium_url }}",
                "hasMenuItem": [
                  {% for item in menu_section.items %}
                    {
                      "@type":"MenuItem",
                      "name": "{{ item.name | replace: '"', "'" }}",
                      "description": "{{ item.description | replace: '"', "'" }}"
                      {% if item.pricepoints[0].price != blank %}
                      ,"offers": {
                         "@type": "Offer",
                         "price": "{{ item.pricepoints[0].price }}",
                         "priceCurrency": "USD",
                         "availability": "https://schema.org/InStock"
                      }
                      {% endif %}
                    }
                    {% if forloop.last == false %}
                    ,
                    {% endif %}
                  {% endfor %}
                ]
              }
              {% if forloop.last == false %}
              ,
              {% endif %}
            {% endfor %}
          ]
        }
        {% if forloop.last == false %}
        ,
        {% endif %}
      {% endfor %}
    ]
  }
</script>  

When I search the "borealis grille menu kitchener" I see each item listed as "Sold out": Search result for "borealis grille menu kitchener"

UPDATE (10.24.2020):

This is the ld+json code after the page loaded with all needed properties: Pastebin

This is a test results screenshot from Google rich results testing tool:

Test results image

I have 2 warnings "Missing fileds (optional)" - servesCuisine and priceRange:

Warning image

As you can see the item Buttermilk Fried Chicken Tenders has "InStock" availability. But on the search results of "graffitimarket menu kitchener" it shows "Sold out":

Sold out for Buttermilk Fried Chicken Tenders on the search results

4
  • There isn't actually a question here… Assuming the feature is not doing what you expected, I assume you've run your code through Google's testing tool? – GDVS Oct 22 '20 at 15:19
  • Hi @GDVS, I tested several websites with Google rich results testing website and I don't see any errors. On the current website (Borealis) we have an issue with one of the menu items descriptions text. But I think it's can't cause the main issue. If you know what is wrong, please show me the way how I can catch the error. Thank you. – Ryzhov Mykyta Oct 23 '20 at 7:43
  • In that case I recommend adding your test findings to your original question, with a description of how the results differ from what you expect to see, and/or what you don't understand. – GDVS Oct 23 '20 at 8:41
  • @GDVS Thank you for your advice. I have added an update to the question with rendered ld+json code and results from the search and rich results testing tool. – Ryzhov Mykyta Oct 24 '20 at 12:02
2

What you are showing is a featured snippet. These are not typically based on structured data. They normally process the pages content and use that to put together a snippet. In this case a list of items from the menu.

Your menu items consist of a name and a price. But if you inspect the html, there is also a hidden element containing the words "Sold out". So I suspect Google is not picking up that it is hidden, and has included it.

2
  • Hello Tony, Thank you for your answer. I will try to remove the hidden element from HTML and let you know the results. – Ryzhov Mykyta Oct 26 '20 at 6:45
  • 1
    Hello Tony, Thank you again for your advice!) I have changed the HTML layout and the issue is gone. – Ryzhov Mykyta Nov 2 '20 at 18:02

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.