Parts Feed Health Audit — carparts247.co.uk
This is the public sample audit. It was produced by running the audit on my own shop,
carparts247.co.uk, and it is the unedited output of the same harness a paying customer gets — same 38 checks, same evidence rules, same format. Nothing has been added to make it look better and nothing has been removed to make it look worse. It contains no account data, no credentials, no supplier data and no licensed catalogue data — every byte behind it came from pages that are public to anyone with a browser.
Scanned: 2026-07-27 18:34:30 UTC · Scanner: partsfeed-scan-harness v0 · Storefront: https://carparts247.co.uk
Every claim in this report carries an evidence label:
| Label | Means |
|---|---|
| MEASURED | I fetched a URL, saved the response to disk, and the quoted snippet is in that saved file. The URL and the snippet are printed with the finding. |
| ESTIMATED | Reasoning from what was measured — most often the consequence of a defect. Consequences are never labelled MEASURED. |
| UNKNOWN | I could not see it. Stated as unknown rather than guessed or quietly skipped. |
A finding that cannot produce its saved artifact is automatically downgraded out of MEASURED before this document is generated. That is enforced in code, not by intention.
Executive summary
| Checks run | 38 |
| Passed | 37 |
| Failed | 1 |
| Could not be tested | 0 |
| Critical / High findings | 0 / 0 |
| Product pages sampled | 10 of 4683 discovered |
| Feed items price-checked against live pages | 10 |
What I would fix, in order:
- [MEDIUM] 4 of 10 sampled products have a missing or very short description — MEASURED (§TX-08)
The scorecard — all 38 checks
Listed in full, including everything that passed. An audit that shows only its failures cannot be told apart from an audit that stopped looking.
Storefront
| Check | What it tests | Result |
|---|---|---|
ST-01 | Storefront resolves over HTTPS | PASS |
ST-02 | robots.txt does not block product URLs | PASS |
ST-03 | No noindex directive on live product pages | PASS |
ST-04 | Product pages declare a canonical URL | PASS |
Structured data
| Check | What it tests | Result |
|---|---|---|
SD-01 | Every product page carries Product structured data | PASS |
SD-02 | All JSON-LD blocks are valid, parseable JSON | PASS |
SD-03 | Product markup includes an offers node | PASS |
SD-04 | Offers carry a usable, non-zero price | PASS |
SD-05 | Offers declare priceCurrency alongside price | PASS |
SD-06 | availability uses a valid schema.org enum value | PASS |
SD-07 | No star rating published without real underlying reviews | PASS |
Identifiers
| Check | What it tests | Result |
|---|---|---|
ID-01 | GTIN present where the supplier publishes one | PASS |
ID-02 | MPN present on every product | PASS |
ID-03 | Brand present on every product | PASS |
ID-04 | Every product has a GTIN or a complete brand+MPN pair | PASS |
ID-06 | No vehicle-manufacturer OE number published in the MPN field | PASS |
Titles & copy
| Check | What it tests | Result |
|---|---|---|
TX-01 | Product titles stay within 150 characters | PASS |
TX-03 | No promotional text inside product titles | PASS |
TX-04 | Titles are not set in block capitals | PASS |
TX-08 | Products carry a substantive description | FAIL — MEDIUM — 4 of 10 sampled products have a missing or very short description |
TX-09 | No duplicate titles across distinct products | PASS |
Policy pages
| Check | What it tests | Result |
|---|---|---|
PP-returns | Returns / refund policy reachable from the homepage | PASS |
PP-contact | Contact information reachable from the homepage | PASS |
PP-delivery | Delivery / shipping policy reachable from the homepage | PASS |
PP-terms | Terms and conditions reachable from the homepage | PASS |
PP-privacy | Privacy policy reachable from the homepage | PASS |
PP-returns-embedded | Returns policy is a page of its own, not buried inside terms | PASS |
PP-delivery-embedded | Delivery policy is a page of its own, not buried inside terms | PASS |
Images
| Check | What it tests | Result |
|---|---|---|
IM-01 | Every product exposes an image in structured data | PASS |
IM-02 | Image URLs are absolute | PASS |
IM-03 | Image URLs are served over HTTPS | PASS |
IM-04 | No single image shared across distinct products | PASS |
IM-05 | Referenced product images actually load | PASS |
IM-06 | Product images meet the 250×250 recommended minimum | PASS |
Feed vs page
| Check | What it tests | Result |
|---|---|---|
FD-02 | Feed price matches the live product page | PASS |
FD-03 | Feed availability matches the live product page | PASS |
FD-04 | Feed items carry a GTIN or brand+MPN pair | PASS |
FD-05 | Every feed item links to a page that loads | PASS |
Findings in full
1. 4 of 10 sampled products have a missing or very short description
Severity: MEDIUM · Evidence grade: MEASURED · Check: TX-08 · Affected: 4 of 10 sampled
What I observed. Shortest sampled description is 60 characters: "HELLA 4dn008768-191 . Operating Mode: EL. Relay function: 11".
Proof.
- Fetched:
https://carparts247.co.uk/hella-4950.html - At: 2026-07-27 18:34:43 UTC
- Saved response:
carparts247.co.uk_hella-4950.html__82c948780a.html
From that saved response:
HELLA 4dn008768-191 . Operating Mode: EL. Relay function: 11
Why it matters (ESTIMATED — this is reasoning, not something I observed). Description text is a matching surface — fitment wording, OE cross-references and vehicle names in the description are how long-tail queries find a part.
What I would do. Write 300+ characters covering what it is, what it fits, and the identifying numbers.
What I could not see
This section exists because the most dishonest thing an audit can do is score an untested check green.
All 38 checks ran. Nothing was skipped.
Structural limits of a public-signals audit — true of every audit I deliver:
- I cannot see your Merchant Center account, so I cannot see your actual disapproval list, your account status, or any warning you have received. I can only see the causes that produce them. UNKNOWN.
- I cannot see a feed you submit to Google directly without also publishing it on your own domain. In your case a public feed was found (
https://carparts247.co.uk/merchant-feed.xml— 1000 items in the document; I parsed the first 500 and 500 of those carried both a link and a price), so parity was genuinely tested. - I sample product pages rather than crawling the whole catalogue. Every count in this report is stated as "N of the M pages I looked at" and must not be read as a catalogue-wide proportion. ESTIMATED if extrapolated.
- I see one moment in time. A price that matched when I fetched it can drift an hour later — which is the argument for monitoring rather than for a bigger one-off audit.
Coverage and method
| Storefront | https://carparts247.co.uk |
| Platform detected | custom/unknown |
| Product URLs discovered | 4683 |
| Product pages fetched and parsed | 10 |
| Of those, carrying Product structured data | 10 |
| Product images probed | 5 |
| Public product feed | https://carparts247.co.uk/merchant-feed.xml — 1000 items in the document; I parsed the first 500 and 500 of those carried both a link and a price |
| Feed items compared against their live page | 10 (10 strong comparisons) |
| Findings downgraded at verification | 0 |
Method. Every page was fetched over the open web by a bot identifying itself as PartsFeedOpsBot/0.1 with a contact address, obeying robots.txt, at roughly one request every 1.5 seconds. No login, no account access, no form submission, no code placed on the site. Each response body was written to disk before any check read it, and each finding names the file it came from.
Why I published this one
Two reasons, and the second is the honest one.
First: you should see the format before you pay for it. This is exactly what arrives — the scorecard, the findings with their proof, and the section listing what I could not see.
Second: running it on my own shop is the only version of this document I can publish without exposing somebody else's problems to sell my services. Every other audit I produce belongs to the shop that paid for it and is never shown to anyone.
For the record, my own shop scored 37 of 38. I am not publishing a disaster to make the product look necessary, and I am not publishing a perfect score to look clever. It is the real number.
If you got here from an email where I said Google disapproved half my catalogue
Both things are true, and the distance between them is the entire product. In June, 128,102 of my 252,516 products were disapproved and my feed disagreed with my own product pages on 44 of 50 sampled items. Those are fixed. This report is what the same shop looks like a few weeks later, with something actually watching it.
So read the 37/38 as evidence of what continuous checking does to a catalogue — not as evidence that I am naturally tidy. I am not. That is why the scanner exists, and it is the honest argument for monitoring over a one-off audit: a clean scorecard is a photograph, and product data does not hold still.
Want this run on your shop? €249, PDF back within 72 hours, no account access needed. → {{STRIPE_AUDIT_LINK}}
Prepared by info@carparts247.co.uk. Not affiliated with, endorsed by, or partnered with Google. "Google", "Google Shopping" and "Merchant Center" are trademarks of Google LLC, used here only to describe what this audit examines.