Why Google skips the beans page, and the fixes
Ten fixes, most important first
Verdict: the page tells Google to leave it out of search results. The line <meta name="robots" content="noindex, nofollow"> does that on its own, whatever else is on the page.
I checked the page source you pasted against your three searches: "fresh roasted coffee beans", "buy coffee beans online" and "coffee beans Harbour Street". Here is what to fix, most important first.
Fixes, most important first
1. Delete the line that hides the page from Google
Impact: High · Time: 2 minutes
- What we found: the head of the page contains
<meta name="robots" content="noindex, nofollow">. - Why it matters: "noindex" tells Google not to show this page in results at all, and "nofollow" tells it not to follow the page's links to your other pages, so nothing else on this list can help until the line is gone.
- Fix: delete that whole line on the live site. Don't replace it with anything: with no robots line, Google treats the page as fine to list. If you edit the site through a site builder rather than the code, look for a setting called something like "hide from search engines" or "discourage search engines" and switch it off for the live site. Keep it switched on for any test copy of the site, so the test copy stays out of Google.
2. Point the canonical link at your live page, not the test site
Impact: High · Time: 5 minutes
-
What we found:
<link rel="canonical" href="https://staging.northwind.example.com/shop">names your staging address (a test copy of the site) as the real version of this page. -
Why it matters: a canonical link tells Google which address is the main copy of a page, so this one points Google at the test site instead of the page your customers use.
-
Fix: change the address to this page's own live address, exactly as it shows in your browser bar. If that is
https://northwind.example.com/shop, the line becomes:<link rel="canonical" href="https://northwind.example.com/shop">This line and the noindex line both look like leftovers from the test site, so check the source of your other pages for
noindexandstaging.as well.
3. Give the page a title that says what it sells
Impact: High · Time: 5 minutes
-
What we found: the title is
<title>Shop | Home</title>, which doesn't mention coffee, beans or Northwind Coffee. -
Why it matters: the title is usually the blue headline of your result in Google and one of the strongest clues to what the page is about, and "Shop | Home" matches none of your searches.
-
Fix: replace it with:
<title>Buy Fresh Roasted Coffee Beans Online | Northwind Coffee</title>That's 56 characters, short enough to show in full in most results, and it contains both "fresh roasted coffee beans" and "coffee beans online". If local customers matter more to you than online orders, use
Fresh Roasted Coffee Beans in [your town] | Northwind Coffeeinstead, keeping the whole title to about 60 characters.
4. Add one main heading (H1) that says "coffee beans"
Impact: High · Time: 10 minutes
-
What we found: there is no H1 (the page's main headline in the code); the first heading is
<h3>Our beans</h3>and the coffees are<h4>headings with nothing above them. -
Why it matters: Google and screen readers use the main heading to understand what a page is about, and "Our beans" on a third level heading never says coffee.
-
Fix: change
<h3>Our beans</h3>to:<h1>Fresh roasted coffee beans</h1>Then change each coffee's
<h4>to<h2>, for example<h2>House Filter</h2>. Your theme may size the new headings differently; if they look wrong, adjust them in/assets/theme.css.
5. Add words about the coffee
Impact: High · Time: about an hour
-
What we found: the whole page has about 60 visible words, mostly menu labels, prices and "Add to cart", and the word "coffee" appears once, in
© 2026 Northwind Coffee. -
Why it matters: Google matches pages to searches mostly through the words on them, so a page that never describes its coffee in a sentence has very little to match "fresh roasted coffee beans" or "buy coffee beans online".
-
Fix: put a short intro under the new H1. This one uses only what your page already says:
<p>Northwind Coffee roasts its coffee beans fresh every Tuesday. Buy them online in 250g bags with delivery for $5, free on orders over $40. Or visit our cafes on Harbour Street and at the Old Mill.</p>Then add two or three sentences under each coffee. Fill in the brackets with what you'd tell a customer at the counter, and write only what's true:
<h2>House Filter</h2> <p>[What it tastes like]. [Light, medium or dark roast], from [where the beans come from]. Good for [filter, plunger or espresso]. [Sold as whole beans or ground.]</p>For the Single Origin of the Month, one line explaining the monthly pick and naming this month's coffee works well.
6. Put the beans page in the main menu
Impact: Medium · Time: 5 minutes
-
What we found: the menu has Home, Our cafes, Videos and Contact, but no link to the shop (
/shop, going by the canonical line). -
Why it matters: Google finds pages and judges how important they are largely by the links pointing to them, and a menu link usually appears on every page of the site.
-
Fix: add this inside
<nav>, after the Home link:<a href="/shop">Coffee beans</a>Use the page's real path if it isn't
/shop. I can only see this page's menu, so if your home page already links to the shop in another way, this still helps but matters a little less.
7. Add a meta description
Impact: Medium · Time: 5 minutes
-
What we found: there is no
<meta name="description">line in the head. -
Why it matters: the description is often the two lines of text under your title in Google, and without one Google picks text from the page, which here could be "Add to cart" or "Click here for more info".
-
Fix: paste this under the title line:
<meta name="description" content="Fresh coffee beans roasted every Tuesday. Buy online from $15 a 250g bag, free delivery over $40, or visit our cafes on Harbour Street and at the Old Mill.">It's 155 characters and uses only facts from your page. Google sometimes rewrites descriptions, but it often uses a good one. Update it if your prices or delivery charge change.
8. Write out your cafe addresses, hours and phone number
Impact: Medium · Time: 20 minutes
-
What we found: the only location text is
Visit us! Harbour Street and the Old Mill., with no street numbers, town, opening hours or phone number. -
Why it matters: for searches like "coffee beans Harbour Street", Google looks for a full address it can match to your Google Business Profile (your listing on Google Maps), and a street name alone gives it little to go on.
-
Fix: replace that footer line with your details, written exactly as they appear on your Google Business Profile:
<p>Visit our cafes:<br> Harbour Street: [number] Harbour Street, [town] [postcode]. Open [days and hours]. Phone [number].<br> The Old Mill: [street address], [town] [postcode]. Open [days and hours]. Phone [number].<br> <a href="/cafes">More about our cafes</a></p>If the footer is shared across your site, this one change helps every page. If either cafe doesn't have a Google Business Profile yet, setting one up is free and is the main way to appear on Google Maps.
9. Describe your photos with alt text
Impact: Low · Time: 15 minutes
-
What we found: none of the six images has alt text (a short written description of an image, kept in the code), for example
<img src="/images/IMG_2077.jpg">for the House Filter, and the logo link<a href="/"><img src="/images/logo-final-v3.png" width="180"></a>has no words at all. -
Why it matters: Google relies mostly on alt text to know what a photo shows, so without it your product photos are unlikely to appear in Google Images, and people using screen readers hear nothing for them.
-
Fix: add an
altto each image:<img src="/images/logo-final-v3.png" width="180" alt="Northwind Coffee home"> <img src="/images/IMG_2041.jpg" alt="[what the photo shows, in a few words]"> <img src="/images/IMG_2077.jpg" alt="House Filter coffee beans"> <img src="/images/IMG_2081.jpg" alt="Single Origin of the Month coffee beans"> <img src="/images/IMG_2090.jpg" alt="Espresso Blend coffee beans"> <img src="/images/IMG_2093.jpg" alt="Decaf coffee beans">While you're there, renaming the files (for example
IMG_2077.jpgtohouse-filter-coffee-beans.jpg) helps a little more. Update eachsrcto match.
10. Add product details Google can read directly (structured data)
Impact: Low · Time: 30 minutes
-
What we found: there is no
<script type="application/ld+json">block on the page. -
Why it matters: structured data is a hidden block of code that lists your products and prices in a format Google reads directly; it's optional, but it makes it possible for your results to show prices.
-
Fix: paste this just before
</head>. Replace[currency]with your three letter currency code (for example USD, AUD or NZD), andnorthwind.example.comwith your live address if it's different:<script type="application/ld+json"> { "@context": "https://schema.org", "@graph": [ { "@type": "Product", "name": "House Filter", "description": "250g bag of coffee beans, roasted every Tuesday.", "image": "https://northwind.example.com/images/IMG_2077.jpg", "brand": { "@type": "Brand", "name": "Northwind Coffee" }, "offers": { "@type": "Offer", "price": "16.00", "priceCurrency": "[currency]" } }, { "@type": "Product", "name": "Single Origin of the Month", "description": "250g bag of coffee beans, roasted every Tuesday.", "image": "https://northwind.example.com/images/IMG_2081.jpg", "brand": { "@type": "Brand", "name": "Northwind Coffee" }, "offers": { "@type": "Offer", "price": "19.00", "priceCurrency": "[currency]" } }, { "@type": "Product", "name": "Espresso Blend", "description": "250g bag of coffee beans, roasted every Tuesday.", "image": "https://northwind.example.com/images/IMG_2090.jpg", "brand": { "@type": "Brand", "name": "Northwind Coffee" }, "offers": { "@type": "Offer", "price": "15.00", "priceCurrency": "[currency]" } }, { "@type": "Product", "name": "Decaf", "description": "250g bag of coffee beans, roasted every Tuesday.", "image": "https://northwind.example.com/images/IMG_2093.jpg", "brand": { "@type": "Brand", "name": "Northwind Coffee" }, "offers": { "@type": "Offer", "price": "17.00", "priceCurrency": "[currency]" } } ] } </script>If you renamed the photos in fix 9, use the new names here. Then paste your page address into Google's free Rich Results Test (search.google.com/test/rich-results) to check Google reads it correctly. Keep the prices here in step with the page when they change.
Also failed, smaller: the delivery link just says "here" (Click <a href="/delivery">here</a> for more info.), so change it to See our <a href="/delivery">delivery details</a>.; and the page doesn't say what language it's in, so change <html> to <html lang="en">.
What I could not check
The page source can't show these. Google Search Console is free: you prove you own the site once, then:
- Whether Google has the page at all, and what it last saw. Paste the live page address into the URL Inspection box at the top of Search Console. Once fixes 1 and 2 are live, click "Request indexing". Google still has to visit and process the page again, which can take from a few days to a few weeks.
- Your robots.txt file, a separate file that can block pages across the whole site. Open
https://[your live address]/robots.txtin a browser and look forDisallow: /orDisallow: /shop. The robots.txt report in Search Console (under Settings) shows the version Google fetched. - How fast the page loads for real visitors. File names like
IMG_2077.jpgoften mean photos straight off a phone or camera, which can be several megabytes each and slow on mobile data. The Core Web Vitals report in Search Console shows real visitor speed once the site has enough traffic; until then, PageSpeed Insights (pagespeed.web.dev) tests the page for free. - Who links to the page. The Links report in Search Console shows which other sites, and which of your own pages, link to it.
- Whether your staging site is in Google. Search Google for
site:staging.northwind.example.com. If anything shows up, put the staging site behind a password so it can't compete with your live site. - How it looks on a phone. The viewport line is right, but the styles live in
theme.css, which wasn't in what you pasted. Open the page on your phone and check that the text is easy to read and the Add to cart buttons are easy to tap.
Go deeper: for tracking where you rank over time and checking your whole site at once, OpenSEO (github.com/every-app/open-seo) is an open-source tool you can host yourself or rent. It's a separate tool, not part of this check.

