SEO audit: Trail Runner 29 product page
1. Scope and what was checked
Checked: the pasted robots.txt, the <head>, and the partial body for https://www.example-bikes.test/products/trail-runner-29?color=red&utm_source=news.
Not checked: the live HTTP status and headers (including X-Robots-Tag), the contents of sitemap.xml, the rendered DOM, Search Console, Core Web Vitals, mobile rendering, and the rest of the site. Because the site type is a shop and the goal is for this product to appear on Google, I judged the page as a transactional product page. The target country and language weren't given.
2. Summary
- Three separate things block or undermine indexing:
Disallow: /products/in robots.txt,noindexin the meta tag, and a canonical that points to a different host and scheme. - Even with those fixed, the visible content is thin and depends on JavaScript. The body has an empty
<div id="app">, a heading and an image, and/assets/app.jsis blocked. - The Product structured data claims 1,280 reviews rated 4.9, but visitors see no reviews. That breaks Google's guidance that markup must match visible content. Remove it or show the reviews.
- The title is keyword-stuffed, the meta description is empty, and the page has hidden keyword text. All of these should go.
3. Findings
| ID | Pri | Area | Finding and evidence | Why it matters | Fix | Type |
|---|---|---|---|---|---|---|
| F1 | P0 | robots.txt | Disallow: /products/ blocks every product URL, including this one. |
Google can't crawl the page, so it can't read the content, and the canonical or structured data can't be processed. A blocked URL can still be listed without a snippet if other pages link to it. | Remove that line from robots.txt. | Google documented |
| F2 | P0 | Indexing directive | <meta name="robots" content="noindex, follow">. |
Google drops pages with noindex from results. It can only see this tag once F1 is fixed. Until then the page is both blocked and marked noindex. |
Remove the tag from the product template, or output index, follow. Check that no template rule or X-Robots-Tag header adds it back (not checked). |
Google documented |
| F3 | P0 | Resources | Disallow: /assets/ blocks /assets/app.js and /assets/img/IMG_4471.jpg. |
Google can't run the script that fills <div id="app">, so it may see an empty page. The image can't be crawled either. |
Remove the /assets/ line, or allow the JS, CSS and image paths with Allow: rules. |
Google documented |
| F4 | P1 | Canonical | href="http://example-bikes.test/products/trail-runner-29" is http, non-www, and has no parameters. The page URL is https and www. The sitemap line uses https://example-bikes.test (non-www). |
Three host or scheme versions disagree, and the canonical may redirect (not checked). Conflicting signals can lead Google to pick a different canonical. | Choose one preferred form, such as https://www.example-bikes.test/.... Generate the canonical in the template as an absolute URL in that form, without ?color= or utm_ parameters. Use the same host in the sitemap line. Redirect the other versions with a single 301 (server config, which you said you can't change, so ask your host). |
Google documented |
| F5 | P1 | Rendering and content | <div id="app"></div> plus a script, then only an <h2> and an image. There is no <h1>, price, description, specs, or availability in the HTML. |
If the content is built client-side, Google depends on rendering. With the script blocked, it sees almost nothing. Thin pages are often crawled but not indexed. | Put the product name (<h1>), description, price, availability, and specs in the server-rendered HTML in the template. Use <h1> for the main title and <h2> for sections. |
Google documented |
| F6 | P1 | Structured data | Product markup claims aggregateRating 4.9 from 1,280 reviews, but no reviews are visible. The markup also has no offers, image, or description. |
Google requires markup to match visible content. Ratings that users can't see risk a manual action for misleading markup. The page is also missing the properties that make a product eligible for merchant-style results. | Remove aggregateRating now. Add it back only if real, collected reviews are displayed on the page. Add offers (price, currency, availability), image, and description that match the visible page. Validate in the Rich Results Test. |
Google documented |
| F7 | P1 | Hidden text | <p style="display:none">cheap mountain bike best mountain bike buy mountain bike online</p>. |
This is hidden keyword text, which Google's spam policies prohibit. It can lead to a manual action. | Delete it. Put useful visible product copy in its place. | Google documented |
| F8 | P1 | Internal links | <div onclick="location.href='/products/trail-runner-27'">. |
Google follows <a href> links, not JavaScript click handlers. The 27-inch page may not be discovered through this link. |
Use <a href="/products/trail-runner-27">Trail Runner 27 mountain bike</a>. Also confirm category pages link to this product (not checked). |
Google documented |
| F9 | P2 | Title | Bikes Bikes Bikes | Buy Cheap Bikes Online | Best Bikes | Example Bikes. It is repetitive, generic, and doesn't mention the product. |
It's keyword stuffing and doesn't match the page's heading, so Google is likely to rewrite it. | Use something like Trail Runner 29 Mountain Bike | Example Bikes. Keep the real product name first. Length near 50-60 characters is a heuristic. |
Stuffing is Google guidance. Length is a heuristic. |
| F10 | P2 | Meta description | content="" is empty. |
Google will write its own snippet, possibly from poor text. This is not a ranking factor. | Write a short, honest, unique summary of the Trail Runner 29, such as frame, wheel size, and who it suits. | Google documented, length is a heuristic |
| F11 | P2 | Images | <img src="/assets/img/IMG_4471.jpg"> has no alt, width, or height, and the file name is a camera name. |
Alt text helps Google understand the image. Missing dimensions can cause layout shift. | Add descriptive alt (for example "Red Trail Runner 29 mountain bike, side view"), set width and height, and use a descriptive file name. |
Google documented |
| F12 | P2 | Parameters | The URL has ?color=red&utm_source=news. |
Tracking and variant parameters create near-duplicate URLs. | Fixing F4 with a clean canonical handles this. Don't link internally with utm_ parameters. |
Google documented |
| F13 | P3 | Review claim | The "4.9 / 1,280" figure came from somewhere. | I can't verify it. If it isn't from genuine customer reviews, it shouldn't be published anywhere. | Only publish ratings backed by real, visible reviews. | Google documented |
4. What is fine
- A sitemap is declared in robots.txt. Its contents are not checked, and its host should match the preferred host (see F4).
- JSON-LD is in a supported format, and
Productis a type Google supports. - There is a single canonical tag and a single title tag.
I can't confirm the HTTP status, HTTPS certificate, or mobile layout from what you pasted.
5. Fix plan
All of this is within your template and robots.txt.
- robots.txt: remove
Disallow: /products/andDisallow: /assets/. Keep any rule that blocks only private areas such as cart or checkout. Make theSitemap:line use the preferred host. - Product template,
<head>: remove thenoindexmeta tag. Set the canonical to the clean, absolute, preferred-host URL. Write a real title and meta description. - Product template,
<body>: render the<h1>, description, price, availability, and specs as server-side HTML. Delete the hidden paragraph. Turn the click-handler div into a real link. Fix the image attributes. - Structured data: remove
aggregateRatinguntil real reviews are visible. Addoffers,image, anddescriptionthat match the page. - Verify: use URL Inspection in Search Console on the clean URL (Live Test) to check crawl access, indexing allowed, canonical, and rendered HTML. Validate with the Rich Results Test, then request indexing. Google doesn't promise how long indexing takes or that every page will be indexed.
6. Open questions
- What does the live URL return (status, redirects,
X-Robots-Tag)? URL Inspection will show this. - Does
example-bikes.testredirect towww(or the reverse), and does http redirect to https? That needs your host or server config. - Does the sitemap list product URLs with clean canonical forms?
- Do real customer reviews exist? If so, can the template display them?
- Is
app.jsthe only source of the product content? If it is, the server-rendered HTML in step 3 matters even more. - Core Web Vitals and mobile rendering are not checked. Run PageSpeed Insights once the page is crawlable.
Test run with a fictional product page and robots.txt pasted into the prompt. The model found the blocked product path, noindex, mismatched canonical, hidden text and unsupported rating markup. It could not check live HTTP status, sitemap contents or Core Web Vitals and said so. Nothing was fetched or changed.
它做什麼
對照 Google Search Central 的公開指引檢視一個頁面或小型網站,回傳一份簡短、附證據、依優先順序排列的修正清單。它先檢查抓取與收錄通路(robots.txt、狀態碼、noindex、canonical、sitemap、渲染、hreflang),再檢查搜尋呈現(標題、描述、標題層級、圖片、結構化資料)、內容品質(是否有用、以人為本、E-E-A-T 相關提問)、內部連結與頁面體驗(Core Web Vitals、HTTPS、行動版)。也能結合 Search Console 資料診斷「未被收錄」「流量下滑」。每項發現都會寫明依據的原文,並標示是 Google 指引還是經驗做法;沒提供的內容一律寫「未檢查」。
輸出
檢查範圍與未檢查項目、摘要、發現表(P0 到 P3,含證據、修正方式、規則或經驗)、已通過項目、依序的修正計畫與待確認問題。
適合什麼場景
想要一份清楚、誠實、不承諾排名的 SEO 檢視的站長、行銷與開發者。它不會自己抓取網站,不預測排名,也不推薦作弊手法。
低風險:純指令檔,沒有腳本,不連網、不寫檔。它只依你貼上的內容工作,不會抓取、登入或修改網站。請把輸出當作檢視意見,而不是排名預測:Google 的排名取決於外界看不到的訊號,指引也會變動,細節請以 Search Central 為準。已用一個虛構的商品頁試用一次:它找出被封鎖的路徑、noindex、canonical 不一致、隱藏文字與沒有依據的評分標記,並說明哪些無法檢查。沒有抓取或修改任何內容。AIBars 原創(MIT)。