LinkToLooks · Guides · Creator Desk
Creator Desk
What a feed product title does to your page
Product titles are untrusted documents, not strings. Here is what is actually in them, who it comes from, and which defect no validator will catch.
Part of: For creators
Roughly one home-care listing title in twenty arrives carrying something that will misbehave when you paste it onto a page. In 20,714 US rows pulled on 12 September 2026: 202 titles carry raw HTML entities, 751 carry pipe characters, 152 carry unescaped double quotes, 5985 repeat a phrase inside themselves, 121 are entirely upper case. Most of each defect traces to one or two retailers, which is the useful part — this is not a general property of feeds, it is a property of specific exports.
Why a title is not text you can trust
A product title looks like a string and behaves like a small untrusted document. It was written for the retailer’s own site, exported through at least one encoding step, and delivered to you without any promise about what is in it. Paste it into an alt attribute, a page title, or a block of JSON-LD and its contents become your markup.
None of the defects below are common enough to be dramatic. All of them are common enough that a page listing thirty products will hit one or two.

Every defect we found, and who it came from
| Defect | Rows | Share of the lane | Where it comes from | What it does on your page |
|---|---|---|---|---|
Raw HTML entities (,) | 202 | 0.98% | UnbeatableSale.com 166, Global Equipment Company 28, Zoro 2 | Prints as literal , if you escape it again |
| Pipe characters in the title | 751 | 3.63% | MSC Industrial Supply Co. 646, Buture 26, P.C. Richard & Son 23 | Breaks a title tag that also uses a pipe as a separator |
| Stray double quotes (inch marks) | 152 | 0.73% | Wayfair North America 56, Zoro 53, Global Equipment Company 12 | Breaks unescaped HTML attributes and JSON-LD |
| A phrase repeated inside one title | 5985 | 28.89% | Wayfair North America 2617, Woot! 795, Zoro 706 | Reads as keyword stuffing that you did not write |
| ALL CAPS titles | 121 | 0.58% | Zoro 66, Woot! 51, Scrip Companies - Massage, Chiropractor, and Medical Supply 2 | Shouts in the middle of your copy |
| Mojibake (mis-decoded UTF-8) | 4 | 0.02% | Belk 2, Wayfair North America 1, Academy 1 | Prints as ° or similar where a symbol should be |
| Unicode replacement character | 2 | 0.01% | TikTok Shop US - Marketplaces 2 | A black diamond in place of a registered-trademark sign |
Prices checked 12 September 2026 The concentration is the finding. UnbeatableSale.com 166 alone accounts for most of the entity problem; one industrial supplier for almost all of the pipes. If you link a handful of retailers regularly, you can know in advance which of these you will meet.
The one that is not a rendering bug
5985 rows (28.9%) repeat a phrase inside a single title. These read like “Single Picture Frame Picture Frame” and “Plastic Trash Can Trash Can Household Kitchen Trash Can”. Nothing renders wrongly; the string is valid and the characters are fine.
The problem is what it does to your page. Reproduce twenty of those verbatim in a product roundup and you have published a page that repeats its target phrase dozens of times in the H3s — a pattern search engines have penalised for two decades, produced entirely by data you copied faithfully. This is the defect we would fix first, and it is the only one on the list that a validator will never flag.
Our own answer is to show the retailer’s title verbatim, because editing it would misrepresent the listing, and to write our own heading above it. That keeps the record honest and keeps the repetition out of the page structure.
A defect that was our own terminal, not the feed
Only 2 titles in 20,714 carry the Unicode replacement character, and 4 carry mis-decoded UTF-8 byte pairs. Both numbers are small, and both are worth stating precisely, because a previous run of ours nearly reported a data-quality crisis that was a console setting.
Printing feed titles to a Windows terminal using the legacy code page turns perfectly good characters into question marks and boxes. If you inspect a feed that way, every accented brand name looks broken. The test that distinguishes them is to check the bytes rather than the screen: read the string’s code points in your own code, not in a console window. On this pull the real rate is 0.03%, which is a rounding error, and the apparent rate in a terminal is far higher.
What to do before a feed title reaches a page
- Unescape once, then escape once. Titles arrive part-escaped; escaping without unescaping first is what turns a comma into a visible
,. - Escape quotes before they touch an attribute or JSON-LD. An inch mark in an
altattribute ends the attribute. - Write your own headings. Use the retailer title as the caption or the link text, not as the H3.
- Sentence-case an all-caps title in display only, and keep the original where a reader can see what the retailer said.
- Check your terminal before you believe an encoding bug.
Method and scope
The seed list ships with the page. A method you cannot repeat is not a method, so here are the sixteen home-care keyword seeds behind every figure on this page: vacuum cleaner, cordless vacuum, steam mop, mop, broom, air purifier, carpet cleaner, laundry detergent, dish soap, all purpose cleaner, drying rack, dish rack, laundry basket, trash can, microfiber cloth, vacuum filter. Scope: root shoppingProducts; arguments keywords and advertiserCountries: ["US"]; home-care seeds read at limit: 1000 over offsets 0 and 1000, so up to 2,000 rows per seed, and the name seeds at offset 0 only; rows deduplicated on advertiser + title + destination URL; the US view is a post-filter on each row’s own targetCountry; the network’s own demo advertiser is removed everywhere. Asking price is salePrice where a row carries one and price otherwise, because price is the list price and not what a shopper pays. Peer-to-peer asks of $500 and over, and repeated-digit asks, are dropped as seller placeholders. No totalCount is quoted anywhere: on a keyword pull the API OR-matches the words, so its count is not coherent. The pull script is in our repository as pull_md_0912.py and the analysis helpers as an_md_0912.py.
What this cannot show. Defect rates are per retailer and this lane draws heavily on a handful of large accounts, so the lane-wide percentages would move with a different seed list. The repeated-phrase detector is a simple regular expression and will both miss cases and flag legitimate repetition; we read a sample of its matches one at a time and most were real, but the full set has not been labelled row by row. And we have not tested whether any of these defects actually cost a page traffic — that is an assumption we are flagging as an assumption.
Last verified 12 September 2026 against a live pull of 20,714 US home-care listing titles
More feed mechanics
How this page was made. Drafted with AI (Claude); not yet independently re-checked. How we work