Solved

How to remove specific pages from storefront search results

VrVa
Excursionist
11 1 5

Hi, hope somebody can help with this.

I'm using pages in my Dawn 6.0.2 theme to store snippets of text, size guides etc. to which I then refer from multiple product templates, so I don't need to fill this content for each template separately.

These pages, however, are not to be seen by my shoppers, so I'm trying to find some way how to hide them from storefront search (and ideally from crawlers as well).

I have found multiple tutorials how to do this but I don't seem to be able to replicate them.

First I tried to create a custom metafield for pages with namespace: "seo", key: "hidden", value: "1" and type: "number_integer" (as explained here: https://shopify.dev/api/examples/marketing-seo?shpxid=7edb94e3-317F-4D11-C7BD-90B4D1B1B5FB#hide-a-re...) but that didn't work...

...so I deleted this custom metafield, since this metafield should be there anyway, just not accessible trough the standard UI and edited the value of it to "1" directly trough url (https://STORE_NAME.myshopify.com/admin/bulk?resource_name=Page&edit=metafields.seo.hidden%3Anumber) but that didn't work either - the pages are still showing in storefront search results.

Does anybody know some way, how to do this?

Accepted Solution (1)
VrVa
Excursionist
11 1 5

This is an accepted solution.

@Cedcommerce this was almost it, thanks a lot, you saved me lot of time 🙂

I only made two changes:

1) When I placed the {% unless %} section as you proposed, it did hide the page I wanted but it "broke" the search results product grid - at places, where the hidden result was supposed to be was empty space, instead of for the other results to fill the empty slot. So I have just moved the code a little (see below).

2) Instead of using page handle I used custom metafield, so I don't need to always edit the code when I want to hide some new page and just change the metafield value.

So if anyone reading this need the same thing, just follow steps below:

Step 1: Go to Admin → Settings → Metafields → Pages → Add definition and create metafield named "hide_from_storefront_search" (or any other name you like) and set content type to Number → Integer, minimum value to "0" and maximum value to "1".

Step 2: Add to your code within the file "main-search-liquid" the red parts below. If you have different theme than Dawn 6.0.2, you might need to be little creative and figure out the differences in code.

 

{%- for item in search.results -%}
{% assign lazy_load = false %}
{%- if forloop.index > 2 -%}
{%- assign lazy_load = true -%}
{%- endif -%}
{% unless item.metafields.custom.hide_from_storefront_search == 1 %}
<li class="grid__item">
{%- case item.object_type -%}
{%- when 'product' -%}
{%- capture product_settings -%}{%- if section.settings.product_show_vendor -%}vendor,{%- endif -%}title,price{%- endcapture -%}
{% render 'card-product',
card_product: item,
media_aspect_ratio: section.settings.image_ratio,
show_secondary_image: section.settings.show_secondary_image,
show_vendor: section.settings.show_vendor,
show_rating: section.settings.show_rating,
lazy_load: lazy_load
%}
{%- when 'article' -%}
{% render 'article-card',
article: item,
show_image: true,
show_date: section.settings.article_show_date,
show_author: section.settings.article_show_author,
show_badge: true,
media_aspect_ratio: 1,
lazy_load: lazy_load
%}
{%- when 'page' -%}
<div class="card-wrapper underline-links-hover">
<div class="card card--card card--text ratio color-{{ settings.card_color_scheme }}" style="--ratio-percent: 100%;">
<div class="card__content">
<div class="card__information">
<h3 class="card__heading">
<a href="{{ item.url }}" class="full-unstyled-link">
{{ item.title | truncate: 50 | escape }}
</a>
</h3>
</div>
<div class="card__badge {{ settings.badge_position }}">
<span class="badge color-background-1">{{ 'templates.search.page' | t }}</span>
</div>
</div>
</div>
</div>
{%- endcase -%}
</li>
{% endunless -%}
{%- endfor -%}

Step 3: Now just for every page that you want to hide from storefront search change the value of your new metafield to "1".

Thanks everyone for your help! 🙂

View solution in original post

Replies 15 (15)

beepzip
Shopify Partner
2 0 0
VrVa
Excursionist
11 1 5

@beepzip this only hides the pages from search engines, not from my storefront search, if I understand it correctly.

PaulNewton
Shopify Partner
6339 579 1343

If you are referring to search results in google or bing,etc that takes time for the pages to be removed as those companies crawlers update their private site indexes.

Or via their webmaster tools to request a recrawl.

 

The stores internal search can still serve stale content for a little bit, or your browser can also be showing you locally cached content.

 

Beyond that you'd want to look in the forums for topics on hiding content, hiding products, hiding pages, etc for the different ways that can be used to skip|hide content in store internal search results.

Basically find the search results item loop and do a check on the current items handle, or a metafield, and use a {% continue %} tag to skip it in the loop.

Roughly:

{% if item.metafields.seo.hidden == 1 %}{% continue %}{% endif -%} 

 

 

 

Save time & money ,Ask Questions The Smart Way


Confused? Busy? Get the solution you need paull.newton+shopifyforum@gmail.com


Problem Solved? ✔Accept and Like solutions to help future merchants

Answers powered by coffee Buy Paul a Coffee for more answers or donate to eff.org


VrVa
Excursionist
11 1 5

Thanks @PaulNewton, this looks like what I need.

I'm not a programmer though, so even (I think) I have found the loop, I'm not sure where to paste your code exactly.

I tried several places, also with and without {%- else -%}, but every time I either get no change at all or no search results at all - not even products without any value in this metafield.


Can you please advise, where exactly I should paste your code?


Below is part of the code in main-search.liquid - the loop - and by red is marked the code I added.
With code like this I don't get any change in storefront search - all results are displayed regardless the value in the seo.hidden metafield.

 

{%- for item in search.results -%}

{% if item.metafields.seo.hidden == 1 %}
{% continue %}
{%- else -%}

{% assign lazy_load = false %}
{%- if forloop.index > 2 -%}
{%- assign lazy_load = true -%}
{%- endif -%}
<li class="grid__item">
{%- case item.object_type -%}
{%- when 'product' -%}
{%- capture product_settings -%}{%- if section.settings.product_show_vendor -%}vendor,{%- endif -%}title,price{%- endcapture -%}
{% render 'card-product',
card_product: item,
media_aspect_ratio: section.settings.image_ratio,
show_secondary_image: section.settings.show_secondary_image,
show_vendor: section.settings.show_vendor,
show_rating: section.settings.show_rating,
lazy_load: lazy_load
%}
{%- when 'article' -%}
{% render 'article-card',
article: item,
show_image: true,
show_date: section.settings.article_show_date,
show_author: section.settings.article_show_author,
show_badge: true,
media_aspect_ratio: 1,
lazy_load: lazy_load
%}
{%- when 'page' -%}
<div class="card-wrapper underline-links-hover">
<div class="card card--card card--text ratio color-{{ settings.card_color_scheme }}" style="--ratio-percent: 100%;">
<div class="card__content">
<div class="card__information">
<h3 class="card__heading">
<a href="{{ item.url }}" class="full-unstyled-link">
{{ item.title | truncate: 50 | escape }}
</a>
</h3>
</div>
<div class="card__badge {{ settings.badge_position }}">
<span class="badge color-background-1">{{ 'templates.search.page' | t }}</span>
</div>
</div>
</div>
</div>
{%- endcase -%}
</li>
{% endif -%}
{%- endfor -%}

 

Cedcommerce
Shopify Expert
718 76 112

Hello @VrVa,

 

To fix this issue you need to follow the below-provided steps:

 

  1. From your Shopify admin, go to Online Store > Themes.
  2. Find the theme you want to edit, and then click Actions > Edit code.
  3. Click the theme.liquid layout file.

 

  1. To exclude the search template, paste the following code in the <head> section:

        {% if the template contains 'search' %}

            <meta name="robots" content="noindex">

        {% endif %}

 

  1.  To exclude a specific page, paste the following code in the <head> section:

        {% if handle contains 'page-handle-you-want-to-exclude' %}

             <meta name="robots" content="noindex">

        {% endif %}

 

Hope this will resolve your issue. Let us know if any more help is needed. 

 

Regards, 

CedCommerce

CedCommerce || Shopify Expert
- Let us know if our reply is helpful for you. Like it.
- Was your question answered? Mark it as an accepted solution.
- For further discussion contact: Email ID- apps@cedcommerce.com
- Whatsapp:- Join Here
VrVa
Excursionist
11 1 5

@Cedcommerce this only hides the pages from search engines, not from my storefront search, if I understand it correctly.

Cedcommerce
Shopify Expert
718 76 112

Hello @VrVa,

 

Thank you for reaching out to us. 

We can control the rendering page as a search result by editing the theme code. You need to follow the below instructions to fix this issue. 

 

  • Go to your online store > themes
  • Select Dawn theme and open "main-search.liquid" file
  • Add this condition (refer to the screenshots)

 

Code:-

 

{% unless item.handle == "Your page handle" or item.handle == "Your page handle" %}

//other code goes here

{% endunless%}

 

 

 

image.png

 

After adding code:-

 

 

image.png

 

Hope it works, let us know if you need any further help with this. 

 

Regards, 

CedCommerce

CedCommerce || Shopify Expert
- Let us know if our reply is helpful for you. Like it.
- Was your question answered? Mark it as an accepted solution.
- For further discussion contact: Email ID- apps@cedcommerce.com
- Whatsapp:- Join Here
VrVa
Excursionist
11 1 5

This is an accepted solution.

@Cedcommerce this was almost it, thanks a lot, you saved me lot of time 🙂

I only made two changes:

1) When I placed the {% unless %} section as you proposed, it did hide the page I wanted but it "broke" the search results product grid - at places, where the hidden result was supposed to be was empty space, instead of for the other results to fill the empty slot. So I have just moved the code a little (see below).

2) Instead of using page handle I used custom metafield, so I don't need to always edit the code when I want to hide some new page and just change the metafield value.

So if anyone reading this need the same thing, just follow steps below:

Step 1: Go to Admin → Settings → Metafields → Pages → Add definition and create metafield named "hide_from_storefront_search" (or any other name you like) and set content type to Number → Integer, minimum value to "0" and maximum value to "1".

Step 2: Add to your code within the file "main-search-liquid" the red parts below. If you have different theme than Dawn 6.0.2, you might need to be little creative and figure out the differences in code.

 

{%- for item in search.results -%}
{% assign lazy_load = false %}
{%- if forloop.index > 2 -%}
{%- assign lazy_load = true -%}
{%- endif -%}
{% unless item.metafields.custom.hide_from_storefront_search == 1 %}
<li class="grid__item">
{%- case item.object_type -%}
{%- when 'product' -%}
{%- capture product_settings -%}{%- if section.settings.product_show_vendor -%}vendor,{%- endif -%}title,price{%- endcapture -%}
{% render 'card-product',
card_product: item,
media_aspect_ratio: section.settings.image_ratio,
show_secondary_image: section.settings.show_secondary_image,
show_vendor: section.settings.show_vendor,
show_rating: section.settings.show_rating,
lazy_load: lazy_load
%}
{%- when 'article' -%}
{% render 'article-card',
article: item,
show_image: true,
show_date: section.settings.article_show_date,
show_author: section.settings.article_show_author,
show_badge: true,
media_aspect_ratio: 1,
lazy_load: lazy_load
%}
{%- when 'page' -%}
<div class="card-wrapper underline-links-hover">
<div class="card card--card card--text ratio color-{{ settings.card_color_scheme }}" style="--ratio-percent: 100%;">
<div class="card__content">
<div class="card__information">
<h3 class="card__heading">
<a href="{{ item.url }}" class="full-unstyled-link">
{{ item.title | truncate: 50 | escape }}
</a>
</h3>
</div>
<div class="card__badge {{ settings.badge_position }}">
<span class="badge color-background-1">{{ 'templates.search.page' | t }}</span>
</div>
</div>
</div>
</div>
{%- endcase -%}
</li>
{% endunless -%}
{%- endfor -%}

Step 3: Now just for every page that you want to hide from storefront search change the value of your new metafield to "1".

Thanks everyone for your help! 🙂

Cedcommerce
Shopify Expert
718 76 112

@VrVa We're glad it helped you! keep growing, anything that causes you to hurdle in your growth there's CedCommerce for you.

All the best 🙂

CedCommerce || Shopify Expert
- Let us know if our reply is helpful for you. Like it.
- Was your question answered? Mark it as an accepted solution.
- For further discussion contact: Email ID- apps@cedcommerce.com
- Whatsapp:- Join Here
hillbrown
Tourist
7 0 1

Hi there!

 

I followed the steps, but for some reason it still shows the pages that I want to be hidden. Could you help?

 

https://ceramica-living-mock-up.myshopify.com/

password is bohglo

rorydean
Shopify Partner
7 0 3

Hey @VrVa thanks for your adjustment and notes....and thanks @Cedcommerce for the original on this, worked for me as well with the Studio theme.  I tried a similar question recently and got nowhere. cheers-

VrVa
Excursionist
11 1 5

I'm glad it helped @rorydean 🙂

Although I recently noticed one tiny BUG within this solution - even though the pages are hidden in the storefront search, the item counters on that page are counting the hidden results as well. 

So for example if you have 4 products and one page with "hoodie" in the name and the page is set to be hidden, after searching the term "hoodie" the item counter will display 5 results even though you can only see 4 of them. So just that you now.

rorydean
Shopify Partner
7 0 3

Interesting find...I have to say I doubt I would have ever found that.  Good to know just the same, but that's not going to matter in my situation.  Thanks-

dori_
Tourist
12 0 4

I have this same issue. I like that this solution hides my pages from storefront search, but it will still write "3 results" despite showing 0 results. Does anybody know how to modify the code to reflect the new amount of results?

abippn
Visitor
3 0 0

Hi, this worked for me until I updated my Studio theme to version 11.0.0 from version 10.0.0. Anyone can help with this issue?