=== FeedRobin Product Feed for WooCommerce ===
Contributors: feedrobin
Tags: woocommerce, product feed, google shopping, merchant center, facebook catalog
Requires at least: 6.5
Tested up to: 7.1
Requires PHP: 7.4
Stable tag: 1.0.4
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Free Google Shopping feed for WooCommerce. One link, two minutes, no settings. Always shows your current prices and stock.

== Description ==

**To show your products, Google Merchant Center asks for one thing your shop
does not have yet: a product feed — a file listing what you sell, with prices,
photos and stock.**

WooCommerce does not include that file out of the box. This plugin adds it.
Install it, copy a link, paste the link into Merchant Center — that is the
whole job. No templates to pick, no fields to map, no update schedule to set.

Change a price in your shop and Google sees the new price the next time it
looks, because the feed is built at the moment Google asks for it, not on a
timer.

* **Free.** No account, no sign-up, no limit on how many products you have.
* **Never out of date.** Built fresh on every fetch. There is no file to re-upload and no schedule to miss.
* **Does nothing to your shop.** Nothing is written to your products, nothing is added to your pages, and there is no telemetry — nothing leaves your site.

[See the exact feed it produces](https://plugins.svn.wordpress.org/feedrobin-connector/trunk/tests/sample-feed.xml) — captured from a real WooCommerce store, before you install anything. Or [check the feed you already have, free](https://www.feedrobin.com/audit).

= Set it up once. Then forget it exists. =

1. Activate the plugin.
2. Go to **WooCommerce → FeedRobin** and copy the link.
3. In Merchant Center: **Settings → Data sources → Add product source → Add products from a file**, and paste the link where it says *Enter a link to your file*.

Google reads the link on its own schedule from then on. You never come back
here unless you want to.

= Why your feed will not go stale =

A feed made on a timer is only right at the moment it runs. Change a price at
10:00 and Google reads the old one until the next run; if Google also opens
your product page in between, it sees two prices for one product — the
mismatch that gets merchants suspended.

This feed has no timer. Google asks, WooCommerce answers with what is true
right now. The gap does not exist.

= The reasons Google rejects products — already handled =

Most rejected products are rejected over small things. These are done for you:

* **"Missing GTIN."** WooCommerce has a barcode field; this plugin sends it. When a product genuinely has no barcode, the feed says so plainly, which Google accepts — guessing is what gets products rejected. *(Fact: `g:gtin` from WooCommerce's own GTIN field; `g:identifier_exists` set to false when it is empty.)*
* **"Price mismatch."** Prices go out with tax included, the way your shop shows them, and a sale price only while the sale is actually running — not while it is merely scheduled. *(Fact: `g:price` including tax; `g:sale_price` only inside the sale's date range.)*
* **"Your red Small and blue Large look like two different products."** They are sent as variations of one product, so Google shows the right one for the right search. *(Fact: one item per variation, linked to the parent by `g:item_group_id`.)*
* **"Shoppers filtering by colour cannot find you."** Colour and size go out as their own fields, in the words your shop displays, not internal codes. *(Fact: `g:color` and `g:size` from product attributes, term names rather than slugs.)*
* **"Brand missing."** Read from wherever your shop already keeps it: WooCommerce's brand taxonomy, Perfect Brands, YITH, or a brand attribute.
* Also sent: stock status, your full category path, every photo in the gallery, and shipping weight.

= What it will never do to your shop =

* **It will never quietly change your Google Ads bidding.** Your five custom labels stay empty — they belong to you and your campaigns.
* **It will never claim your SKU is a manufacturer's part number.** Your SKU identifies the product in your shop, not at the factory, and saying otherwise is a common reason catalogues get flagged.
* **It will never write to your products.** The plugin stores two small settings — the code inside your link, and a note that you have seen its welcome message — and deletes both if you uninstall.

= Google first. Then the other channels. =

This feed is written in Google's format, which is what Merchant Center reads.
Meta accepts that format as a file type too. The other places you might want
to sell — Microsoft, and the price comparison sites — each want your products
described their own way, in their own file. One file cannot be all of them.

That, and the checking, is what FeedRobin does.

= Is your feed good enough? Check it free. =

The same checks that keep a FeedRobin store approved are free to run on this
feed, without an account: [feedrobin.com/audit](https://www.feedrobin.com/audit).
Paste the link, wait a minute, and read what Google would object to. It opens
your product pages and photos, not just the file — the price on the page is
compared with the price in the feed, the photos are measured, the barcodes
counted. There is a button for it on the settings screen, with your link
already filled in.

If the report is boring, you did not need us — and you still have the feed.

= When you want more than Google =

The free feed is complete, and it stays free. FeedRobin is our paid service for
the things one file cannot do:

* **Know why Google said no — before you spend on ads.** The check above, run on every product, every time your catalogue changes, with a plain list of what to fix first.
* **Sell on Facebook, Instagram, Bing, idealo, Heureka, Compari and ChatGPT from this same catalogue.** Each wants its own file. FeedRobin writes each one.
* **Fix a channel's complaints without editing 2,000 products.** Rules and title templates correct data on its way to a channel. Your shop stays exactly as it is.
* **Keep every channel as fresh as this feed.** Hourly re-reads of your shop on the larger plans, and every feed rebuilt when it is fetched.

Plans from €9 a month, every channel included on every plan. 14 days free —
the card goes on at the start and nothing is charged until the trial ends.
There is a **Connect to
FeedRobin** button on the settings screen when you want it, and this plugin
works exactly the same whether you ever press it or not.

**Running stores for clients?** One FeedRobin account holds all their
catalogues — the Agency plan pools 150,000 products across every store you
manage, with five logins for your team and reports with your name on them.

== External services ==

The plugin makes no outbound requests of any kind. It does not send your
catalogue, your settings or any usage data anywhere.

Two buttons on its settings screen, and two links in its one-time welcome
notice, are ordinary links to feedrobin.com: **Check this feed** opens the free
feed check with your feed link filled in, and **Connect to FeedRobin** opens
the service with the same link filled in. Nothing is transmitted unless you
follow a link, and the check needs no account. FeedRobin is a separate paid
subscription with its own [terms](https://www.feedrobin.com/terms) and
[privacy policy](https://www.feedrobin.com/privacy); using this plugin does not
require it, and the plugin does not stop, change or nag if you never subscribe.

== Installation ==

= In WordPress =

1. Go to **Plugins → Add New** and search for **FeedRobin**.
2. Install and activate. WooCommerce must be active.
3. Go to **WooCommerce → FeedRobin** and copy the feed link — or press **Check this feed** first.

= In Google Merchant Center =

1. Go to **Settings → Data sources** and press **Add product source**.
2. Choose **Add products from a file**.
3. Under **Enter a link to your file**, paste the feed link.
4. Leave the schedule as it is — Google fetches the link daily by default, and the feed is built fresh each time — then press **Continue**.

== Frequently Asked Questions ==

= How do I get my WooCommerce products on Google Shopping? =

Activate this plugin, copy the link from **WooCommerce → FeedRobin**, and in
Merchant Center go to **Settings → Data sources → Add product source → Add
products from a file** and paste it there. Google then reads your products on
its own and shows you, product by product, anything it still wants changed.

= Why is my Merchant Center feed empty? =

Almost always a caching plugin. Page caches store the first copy of a page
they see and serve it to everyone after — and a feed that is streamed out in
pieces can be cached as just its last piece, a well-formed file with no
products in it. It does not look broken; it looks empty.

This feed tells caches not to keep it, using the signal WP Super Cache, W3
Total Cache, LiteSpeed Cache and WP Rocket all respect, and closes any buffer
they have already opened. Verified on a live LiteSpeed host. If you use a
different cache and see an empty feed, tell us in the support forum with its
name.

= Does WooCommerce have a Google Shopping feed built in? =

Not out of the box. WooCommerce runs your shop; the file Merchant Center asks
for is added by a plugin, and this is one — the smallest one we could make.

= How often does the feed update? =

Every time. There is no schedule to set and none to miss: the feed is built at
the moment Google fetches it, from whatever your shop says right then. Google
decides how often it fetches — daily by default, adjustable in Merchant Center.

= Will this work for Facebook and Instagram? =

Meta accepts Google's feed format as a file type, so the link can be added in
Commerce Manager. A handful of values differ between the two specifications —
the stock status is the notable one — so if Meta shows odd availability for
your products, that is why. FeedRobin writes Meta its own file, in Meta's own
words.

= Do I have to pay for FeedRobin to use this? =

No, and you never will. The feed link works, keeps working, and is not limited,
time-restricted or nagged about. FeedRobin is a separate subscription for the
things one file cannot do: checking the catalogue and writing the other
channels their own files.

= Is my feed link private? =

Not by browsing your shop. The link contains a long random code, and the page
asks search engines not to list it. Everything in it is already visible on your
storefront anyway. If you ever share the link by mistake, create a new one from
the settings screen — the old address stops working the moment you do.

= Will it slow my shop down? =

No. It runs isolated from your theme, your store pages and your checkout: the
feed is only built when a channel asks for it, in batches of 200 products, and
a shopper browsing your shop never triggers it.

= My link says "not found". =

It should not, since 1.0.4: the feed answers to its address directly, whether
or not WordPress's list of pretty addresses knows about it. If you still see
"not found", your server is not sending unknown addresses to WordPress at all —
the usual cause is a missing `.htaccess` on Apache. Saving **Settings →
Permalinks** once rewrites it; or use the plain-permalink form of the link,
which the settings screen shows when pretty permalinks are off.

= I sell sizes and colours. What does Google see? =

Each variation, not the parent product — those are what a shopper actually
buys, and what carries the price and the stock. Every one is tagged with the
parent's id so Google knows they belong together, and each title says which
variation it is.

= Does it work with my theme? =

Yes. The feed has nothing to do with how your shop looks — it reads your
products straight from WooCommerce.

== Screenshots ==

1. The whole plugin: your feed link, a free check of it, and a button that hands it to FeedRobin. Nothing else to configure.
2. Where the link goes: Merchant Center's "Add product source", with a feed link pasted in. Google reads it on its own from then on.
3. The free check, run on this plugin's feed from a real WooCommerce shop: the score, and what Google would object to, worst first — before Google says it.

== Changelog ==

= 1.0.4 =
* The feed link works without a permalink save. It used to depend on WordPress's stored rewrite rules, which can be missing ours after a permalink change or a restore; now the address itself is enough.

= 1.0.3 =
* The settings screen says what the paid service starts at, so "one flat price" is a number rather than a guess.

= 1.0.2 =
* The settings screen mentions the Agency plan for people who run stores for clients.
* Listing text describes the missing feed without blaming WooCommerce for it.

= 1.0.1 =
* A shop with no Site Title set now names its feed after its domain instead of leaving the feed's title empty.
* The settings screen leads with the free feed check, with your link already filled in, and says plainly what the paid service adds.
* A one-time welcome notice after activation points to the link and the check. It goes away when dismissed or once the settings screen is opened, and does not return.
* Display name is now "FeedRobin Product Feed for WooCommerce". The plugin slug and your feed link are unchanged.

= 1.0.0 =
* First release.

== Upgrade Notice ==

= 1.0.4 =
Removes the one way the feed link could answer "not found" on a working site. Your feed link does not change.

= 1.0.3 =
Text only: the settings screen now names the starting price of the paid service. Your feed link does not change.

= 1.0.2 =
Text only: the settings screen mentions the Agency plan, and the listing describes the missing feed without blaming WooCommerce. Your feed link does not change.

= 1.0.1 =
Shops with no Site Title now get a feed named after their domain. The settings screen leads with the free feed check. Your feed link does not change.
