Invalid UTF-8 encoding
What causes the "Invalid UTF-8 encoding" error in Merchant Center and how to fix it.
This error means your feed file isn't valid UTF-8 (or another accepted encoding), often because a spreadsheet export silently corrupted special characters like curly quotes, accented letters or emoji. Fix it by re-exporting the feed file explicitly as UTF-8 and checking for corrupted characters.
What triggers it
"Invalid UTF-8 encoding" means the feed file's bytes don't decode cleanly as UTF-8, even though it may be labelled or assumed to be. The classic cause is a spreadsheet export (Excel and similar tools default to Windows-1252 or Latin-1 in some configurations) that looks fine to open but breaks the moment Google's strict parser hits a curly quote, a £ sign, an accented letter or an emoji.
This sits alongside the wider set of file-level problems in feed processing errors: encoding errors are one of the "five failure families" that stop a whole file being read, not just one product.
Because /tools serves a generated feed built directly from your catalogue data rather than a hand-exported spreadsheet, every value is encoded correctly by construction, which is the structural fix for this error rather than a one-off patch.
Step by step
- Open the actual served file, not your source export. Fetch or download the exact file Google is reading and inspect it directly; the corruption happens between your source data and the served file, so check the end of that chain.
- Re-export or re-save explicitly as UTF-8. Google accepts UTF-8, UTF-16, ASCII or Latin-1, but UTF-8 is the safe default. Most encoding errors come from a Windows-1252 export (common from spreadsheet tools) served as if it were UTF-8.
- Scan for corrupted special characters. Curly quotes, apostrophes, accented letters (é, ü) and emoji are the usual casualties; a find-and-replace fix on individual characters won't survive the next export, fix the export step itself.
- Re-submit and confirm the flag clears. Once the file is genuinely UTF-8 and Google re-fetches it, the error should clear within the normal crawl window.