FeedMOT ← Back to the audit

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:

LabelMeans
MEASUREDI 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.
ESTIMATEDReasoning from what was measured — most often the consequence of a defect. Consequences are never labelled MEASURED.
UNKNOWNI 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 run38
Passed37
Failed1
Could not be tested0
Critical / High findings0 / 0
Product pages sampled10 of 4683 discovered
Feed items price-checked against live pages10

What I would fix, in order:

  1. [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

CheckWhat it testsResult
ST-01Storefront resolves over HTTPSPASS
ST-02robots.txt does not block product URLsPASS
ST-03No noindex directive on live product pagesPASS
ST-04Product pages declare a canonical URLPASS

Structured data

CheckWhat it testsResult
SD-01Every product page carries Product structured dataPASS
SD-02All JSON-LD blocks are valid, parseable JSONPASS
SD-03Product markup includes an offers nodePASS
SD-04Offers carry a usable, non-zero pricePASS
SD-05Offers declare priceCurrency alongside pricePASS
SD-06availability uses a valid schema.org enum valuePASS
SD-07No star rating published without real underlying reviewsPASS

Identifiers

CheckWhat it testsResult
ID-01GTIN present where the supplier publishes onePASS
ID-02MPN present on every productPASS
ID-03Brand present on every productPASS
ID-04Every product has a GTIN or a complete brand+MPN pairPASS
ID-06No vehicle-manufacturer OE number published in the MPN fieldPASS

Titles & copy

CheckWhat it testsResult
TX-01Product titles stay within 150 charactersPASS
TX-03No promotional text inside product titlesPASS
TX-04Titles are not set in block capitalsPASS
TX-08Products carry a substantive descriptionFAIL — MEDIUM — 4 of 10 sampled products have a missing or very short description
TX-09No duplicate titles across distinct productsPASS

Policy pages

CheckWhat it testsResult
PP-returnsReturns / refund policy reachable from the homepagePASS
PP-contactContact information reachable from the homepagePASS
PP-deliveryDelivery / shipping policy reachable from the homepagePASS
PP-termsTerms and conditions reachable from the homepagePASS
PP-privacyPrivacy policy reachable from the homepagePASS
PP-returns-embeddedReturns policy is a page of its own, not buried inside termsPASS
PP-delivery-embeddedDelivery policy is a page of its own, not buried inside termsPASS

Images

CheckWhat it testsResult
IM-01Every product exposes an image in structured dataPASS
IM-02Image URLs are absolutePASS
IM-03Image URLs are served over HTTPSPASS
IM-04No single image shared across distinct productsPASS
IM-05Referenced product images actually loadPASS
IM-06Product images meet the 250×250 recommended minimumPASS

Feed vs page

CheckWhat it testsResult
FD-02Feed price matches the live product pagePASS
FD-03Feed availability matches the live product pagePASS
FD-04Feed items carry a GTIN or brand+MPN pairPASS
FD-05Every feed item links to a page that loadsPASS

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.

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:

Coverage and method

Storefronthttps://carparts247.co.uk
Platform detectedcustom/unknown
Product URLs discovered4683
Product pages fetched and parsed10
Of those, carrying Product structured data10
Product images probed5
Public product feedhttps://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 page10 (10 strong comparisons)
Findings downgraded at verification0

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.