ShipworkSite inspection
Feed file check

Crawlability

PaginationAre paginated pages set up right?Internal searchIs site search eating crawl budget?URL parametersAre parameters creating duplicates?Log analyserWhat does Googlebot actually crawl?Robots builderNeed a robots.txt file?Soft 404sAre pages “not found” but returning 200?JavaScriptCan crawlers see it without running JS?FreshnessIs my site quietly going stale?Robots.txtDoes robots.txt say what I think?

Indexing

Sitemap lastmodAre my sitemap dates valid?SitemapIs my sitemap actually fetchable?IndexingIs Google allowed to index my pages?CanonicalsIs Google indexing the wrong URL?Index signalsDo sitemap and index signals agree?Sitemap generatorNeed a sitemap.xml for my site?Bulk URL statusWhere does each of these URLs really land?Redirect builderNeed the redirect rules?RedirectsAre my URLs answering directly, over HTTPS?

On-page

Keyword ideasWhat are people searching for?SERP previewHow does my page look in Google?Content qualityAre your pages too thin or too alike?Image weightAre images slowing the page?CannibalizationAre pages competing with each other?On-page checkDoes the page use its target phrase?ImagesAre my images accessible and loading?Meta tag builderWhat should my title and share tags say?DuplicatesDo my pages compete for one query?

Links

Orphan pagesWhich pages can no link reach?Link graphHow deep do your pages sit?Anchor textDo links say what they point at?Outbound linksAre external links still alive?Broken linksAre internal links sending visitors nowhere?

Structured data

Rich resultsIs my markup eligible for a rich result?Structured dataIs my product schema valid?Schema coverageDo my key pages carry structured data?Social previewHow does my page look when shared?Schema vs pageDoes markup match the page price?Schema builderNeed valid JSON-LD?

International

Hreflang sitemapDo page and sitemap hreflang agree?HreflangDo my language versions link back?Hreflang builderNeed the hreflang tags?Page DoctorWhy is this page not doing well?Redirect planMy site has dead links — what redirects do I write?Sitemap diffIs anything missing from my sitemap?Robots simulatorWhat does my robots.txt actually block?Can Googlebot?Can Googlebot fetch this URL?
Every error, explainedGuides
Pricing Learn Error guides Run free audit

+1 free check

Welcome to Shipwork

Sign in free and your next check this month is on us.

Continue with GoogleContinue with email

We email you a 6-digit code. No password.

No card needed. Reports and watches follow you to any device.

Check the fields Google rejects that a public page hides

Your store’s public product list does not expose GTIN, category, condition or identifier_exists. A Merchant Center feed does. Upload or paste it and check every required field. Free, in your browser.

CSV, TSV or Merchant feed XML. Or paste rows below.

Read in your browser. Only the text is validated; nothing is stored.

What this checks

Each row against Google’s product data requirements: a title under 150 characters with no promotional text or all-caps, a description, a price above zero, availability, an image link, a brand, a link, and an identifier (GTIN or MPN, or identifier_exists=no), plus a google_product_category and a valid condition. These are the fields most disapprovals come from and the ones a public catalogue scan cannot see.

What the Merchant Center feed checker reads

The page accepts a feed file as CSV, TSV or RSS/Atom XML. It detects the format, matches the header names case-insensitively against the field names Google uses, then reads each row. For every row it checks that a title, description, price, availability, image link, brand and link are present, and that the title is under 150 characters with no promotional wording and no all-capitals text.

It also looks for an identifier: a row needs a GTIN, an MPN, or an explicit identifier_exists=no. A missing google_product_category is a warning, and an unrecognised condition value is flagged. The parse result reports the format it used, how many rows were read, and a count of errors and warnings across the affected rows. Warnings do not block a feed by themselves, but they point to fields Google may dislike, so they are worth clearing before an upload.

How to read the feed results

An error is a field that Google's product data rules expect and that is absent or clearly wrong, such as a missing price or a title carrying a sale claim. A warning is weaker: a description under 50 characters, a missing identifier where the product may genuinely have none, no category, or an unusual condition. Only the first 200 affected rows are listed, so the counts can exceed the rows shown.

A clean result means the checked fields were present and passed these rules for the rows in the file. It does not prove Google will approve the feed. The check does not confirm that images load, that links resolve, that categories map to valid Google categories, or that a GTIN is a real, registered number, and it cannot see how many products the account has already disapproved.

Common feed faults and why they matter

Most disapprovals trace back to a small set of fields: a promotional claim in the title, a product with no price or a zero price, a missing image link, or an identifier that is absent without the flag that says the product has none. A title in capitals or a description of a few words also weakens the listing, and one wrong export rule can affect thousands of rows at once.

The fields a public storefront hides are exactly the ones a feed file exposes. A product page may show a price, but only the feed carries GTIN, google_product_category, condition and identifier_exists. That is why a file check finds problems a live page scan cannot see, and why the two read different sources and are better run together than alone. Neither one replaces the other.

Fix the flagged rows

Work through the errors first. Replace promotional title text with the product name and one distinguishing attribute. Set a real price above zero, point image_link at a reachable asset, and add a brand. Where a product truly has no barcode, add identifier_exists=no and an MPN if one exists. If a row is wrong every time you export it, the fault is upstream in the catalogue.

For the warnings, write a description that describes the product rather than repeating the title, add the most specific google_product_category you can, and use one of new, used or refurbished for the condition. Fix the source catalogue or export so the next sync does not reintroduce the same rows. On Shopify and WooCommerce the values come from product data, so correct them there.

When to use related checks

Use feed check for the live storefront side and feed finder when you first need to locate a public product list. The feed versus page guide explains why a file and a page can disagree, and a file can carry an identifier or category that the live page omits. If a link or an image fails on the page itself, a reachability check answers that separately.

For the individual faults, see promotional text in a title, a title that is too long and a missing brand. Use price check and image check for the page-side equivalents, where each fix explains the field and how to correct it in the source data. The decoder also points an identifier question here when the value is a feed-only field.

Questions

What does this check that the feed check does not?
The public product list on a store hides GTIN, google_product_category, condition and identifier_exists. A feed file has them, so this is the only way to validate the fields that most disapprovals come from.
Is my feed uploaded anywhere?
The file is read in your browser and only the text is sent for validation. It is not stored and not shared. For a feed with sensitive data, paste only a few rows.
Which formats work?
Google Merchant Center CSV and TSV exports, and RSS 2.0 or Atom XML feeds. The header row names are matched case-insensitively.
What are the limits?
Titles under 150 characters with no promotional text or all-caps, a description, a price above zero, availability, an image link, a brand, and an identifier (GTIN or MPN, or identifier_exists=no). These map to Google’s published product data requirements.
How do I check a Merchant Center feed file?
Upload the CSV, TSV or XML file, or paste rows, and the checker reads each row against the field rules. It reports errors such as a missing price or a promotional title, and warnings such as a short description or no category. The file is read in your browser and only its text is validated, so it is safe to run on a real export.
Is my feed file uploaded anywhere?
The file is opened in your browser and only the text is sent for validation, then the result comes back. Nothing is stored or shared. For a feed with sensitive data, paste a few representative rows rather than the whole file, since checking only the rows you are unsure about is valid.
Which feed formats work?
Google Merchant Center CSV and TSV exports, and RSS 2.0 or Atom XML feeds. Header names are matched case-insensitively against common aliases, so a file exported from a store platform is usually read even when the column order differs. A header row is required, and rows are read from top to bottom.
Can this check that a GTIN is valid?
No. It checks that a row carries a GTIN or an MPN, or that identifier_exists is set to no. It does not verify a barcode check digit or whether a number is registered. Use it to find missing identifiers, not to validate a barcode, and treat the result as a first filter.
Does this replace Merchant Center diagnostics?
No. The check reads the file's fields against published field rules. Merchant Center itself decides approval and shows account-level diagnostics. This is a fast pre-check you can run on an export before you upload it, not the final word on whether a product will be approved.