Troubleshooting¶
What goes wrong once Product Feed is running, and what each message means.
If Product Feed will not open at all (a blank page, or a bounce back to the dashboard), that is an install problem rather than a Product Feed one. See troubleshooting an install.
Whatever the symptom, Product Feed wrote down what it did and what it refused to do, in a file your own admin downloads in one click. See what Kyvero extensions log.
A feed did not regenerate¶
The feed list shows when each feed was last written, and calls a feed overdue once its own cycle and a further day have passed without a successful generation. Work through these in order:
- Is your store's cron running? Product Feed registers one hourly job on
OpenCart's own scheduler, listed under Extensions → Cron Jobs. If your
host is not calling OpenCart's
cron.php, nothing regenerates on its own, neither this nor any other extension's scheduled work. This is the first thing to check and the usual cause. If your host will not call it, one line in your own crontab runs the same pass:
10 * * * * cd /path/to/store && php extension/product_feed/product_feed.php --cron
See
running the scheduled pass yourself.
2. Is the store on OpenCart 4.1.0.4? This one has no symptom of its own:
nothing errors, nothing is logged, and the feed's run history stays empty
rather than showing a failure. That release cannot run any scheduled task at
all: its cron.php fails inside OpenCart's own code before an extension is
reached, for every extension on the store, and no extension can repair it.
Product Feed says so on its own screen when it sees that version, and stops
telling you to check your cron beside an overdue feed. The same crontab line
above is the way round it.
3. Is the module on, and the feed's own schedule on? Both switches have to
be. Regenerate on schedule, off, keeps the cycle and stops it running.
4. Is the cycle as fine as you think? A feed is due once a cycle has passed
since a run last started on it, and it only ever runs when your store's cron
does, so an hourly feed on a store whose cron fires twice a day regenerates
twice a day.
5. Read your store's error log. A run that failed is written there
(System → Maintenance → Error Logs), because nobody is watching a
scheduler. The message names what went wrong.
This feed could not be written: …¶
The run failed, and the message names the reason. The rest of the sentence matters more: the previous version of the file is still being served, so the channel is reading last night's feed rather than nothing.
The usual causes:
- The storage directory could not be written. Product Feed writes feeds under your store's storage directory; a host that has made it read-only, or a disk that is full, fails the run. This is the one to ask your host about.
- The taxonomy file is missing. Reinstall Product Feed from the archive you downloaded. A file from the extension's own package has gone missing, which is a broken upload rather than a configuration problem.
- The run read no products (read no products), on a feed whose file had some. The feed's filters match nothing, or every product they match was disabled at the moment the run read them. The previous file stays rather than an empty one delisting your catalogue; check the filters, and run it again once the products are back.
- Every product it read was left out (left out all … product(s)). One mapping is failing on every product, usually a required field mapped from a source your catalogue has nothing in. The run's rejections name the field; Preview shows the same thing on the first 25.
- The database went away mid-run. Nothing to fix; the next run rebuilds the file from the start.
- The store has no rate for the feed's currency (cannot convert prices to …). The feed has Convert prices into this currency ticked, and that currency has been deleted or has a rate of zero under System → Localisation → Currencies. Put the currency back with its rate, or untick the box.
Products are missing from the feed¶
The regenerate message says how many products went in and how many were left out. A product is left out when a required field resolved to nothing.
Press the eye button on the feed's row first. Preview shows the first 25 products as the channel's fields and marks the cell of every required field that resolved empty, which is often the whole answer without any further looking.
For a product further down the catalogue, open the feed's Fields tab and click
each field with a red marker: the pane resolves it against your own products and
shows you the empties. A Fallback
(a literal value, sent where the field is empty) is usually the answer, and for
condition it is the only answer, because OpenCart has no such column.
If a whole group of products is missing rather than a scattering, it is more likely the Filters tab: a brand filter leaves out every product with no manufacturer set, a price range is measured on your catalogue price before any special, and a category or brand ticked Leave out takes its products out whatever else is ticked. Working out why a product is not in the feed goes through it in order.
The channel says my prices are wrong¶
Price and Special price send the catalogue number your product form
holds, with no tax added. If your store displays prices with tax included, map
price from Price including tax and sale_price from Special price
including tax instead; send the price including
tax walks through it.
If the numbers are right but in the wrong currency, the feed's Currency is only the code they are sent with until you tick Convert prices into this currency on the General tab. With it ticked, a price that is off by a steady factor is your store's exchange rate under System → Localisation → Currencies, which is the one the feed uses. See what is in the file.
A sale_price that the channel calls a misleading promotion is usually a special
that has expired: map sale_price from Special price, which resolves to
nothing when no special is running, rather than from Price.
The channel's fetch of my feed URL fails¶
- Has the URL been rotated since you pasted it? Pressing New URL stops the old one serving at once. Copy the current one from the feed's row.
- Has the feed ever generated? A feed with no file yet is a
Not found, like every other refusal. - Is the feed's own Status on? A feed switched off answers its URL with the
same
Not found, and serves its last file again once it is back on. The module's switch on the settings screen does not stop a URL. - Is it the right store's URL? On a multi-store install a feed is served on its own store's address and refused on the others.
Every refusal is the same Not found with no explanation, deliberately: a route
that said which part of the request was wrong would answer questions about what
feeds the store has. So test with the exact URL the row gives you rather than one
you have edited.
A run seems stuck¶
A run that stopped without finishing (a browser tab closed part-way, a request the host cut off) holds its feed for fifteen minutes and is then cleared out of the way. The next scheduled pass, or the next press of Regenerate now, starts a fresh run. There is no cancel button, and that fifteen minutes is what waiting costs.
While a run is live the feed's Last generated column shows that run's progress instead, including a run the scheduler started, and its Regenerate now button is greyed out.
Nothing on the Categories tab¶
- No categories in this store yet, or none matching your search. The tab lists the categories of the feed's own store; a search box with something in it narrows that further.
- Suggest proposed nothing. It only looks at categories nothing is placed on, and it proposes nothing where your category name has no word in common with Google's, or where its best match is too weak to be worth showing you. That is a refusal to guess rather than a failure.
- Google's taxonomy file is missing… as above: reinstall from the archive you downloaded.
A category is marked Retired¶
The Google category it was placed against has been withdrawn since you chose it. Products in that category are sent the nearest placed category above it instead, so the feed is valid, but coarser than you meant. Press Choose and place it again; the row shows the old path so you can see what it used to mean.
Something else¶
Support covers what to send and where. The two things worth including for anything about generation are your store's error log entry and what the feed list says under Last generated.