Skip to content

Entity Hygiene: Teaching AI Which Store Is Yours

Sotiris Spyrou

Share this article

LinkedInXEmail
Entity Hygiene: Teaching AI Which Store Is Yours

"Is Pell & Row Official a genuine stockist of Pell and Row candles?"

The assistant thought about it for a second and said yes, probably, noting that the shop name suggests an official relationship and that its listings match the brand's product range.

Rowan read that out loud to his business partner twice. There is no Pell & Row Official. There are 2 shops, both theirs, neither with the word Official in the name, and a third thing on a marketplace that had been selling their rosemary candle for 7 dollars since August.

The assistant hadn't lied. It had no way to know. Nobody had ever told it.

That's the gap this article is about, and it's the half of brand protection that has nothing to do with takedowns.

A name is not an entity

When a machine reads "Pell and Row" on a page, it gets a string. Strings are cheap and ambiguous. There could be 40 of them.

An entity is different. It's a record: this organisation, with this website, these social profiles, these products, these official sellers. Once a system has the record, every mention of the string can be attached to it, and questions like "is this shop one of theirs" become lookups instead of guesses.

Your job is to publish the record in a form machines read, and then to be relentlessly consistent about it. That's the whole discipline. It isn't clever and it isn't fast, and it compounds in a way that takedowns don't. If I could only do one of the two halves, I'd do this one, because a removed listing stays removed for about 9 days and a published record keeps working.

Three jobs, in this order

Say who the organisation is. One canonical Organization block on your site, with a stable @id, the name exactly as you use it everywhere, the URL, the logo, and sameAs pointing at every other place you exist.

{
  "@context": "https://schema.org",
  "@type": "Organization",
  "@id": "https://pellandrow.com/#organization",
  "name": "Pell and Row",
  "url": "https://pellandrow.com",
  "logo": { "@type": "ImageObject", "url": "https://pellandrow.com/logo.png" },
  "sameAs": [
    "https://www.wikidata.org/wiki/Q000000000",
    "https://www.linkedin.com/company/pellandrow",
    "https://www.etsy.com/shop/PellAndRow",
    "https://find-and-update.company-information.service.gov.uk/company/00000000"
  ]
}

The line people miss is the last one in that sameAs array. Put your own marketplace shop URLs in it. That's the declaration that the Etsy shop is yours. Without it, your shop and a copycat's shop are two strings with similar names, and the only difference a machine can see is the price.

Say what the products are. Product on every product page, with brand pointing back at the organisation's @id, a sku, a gtin13 if you have barcodes, and an offers block naming the seller, price, currency and availability.

{
  "@type": "Product",
  "name": "Pell and Row Rosemary Candle 220g",
  "sku": "PR-ROS-220",
  "brand": { "@id": "https://pellandrow.com/#organization" },
  "offers": {
    "@type": "Offer",
    "price": "28.00",
    "priceCurrency": "GBP",
    "availability": "https://schema.org/InStock",
    "seller": { "@id": "https://pellandrow.com/#organization" },
    "url": "https://pellandrow.com/rosemary-candle"
  }
}

seller is doing real work there. It's the machine-readable version of "this price, from us".

Say who the official sellers are. A page on your own domain, at a stable URL, listing every official store and authorised stockist by name with links. This is the artefact that answers Rowan's question, and it's free.

Mark it up as an ItemList of Organization nodes so it's parseable, and link to it from the footer of every page so it's discoverable. Then keep it current, which is the part that fails.

The consistency problem is bigger than the schema problem

You can get all three blocks right and still lose, because of the thing nobody audits.

If your site says "Pell and Row Rosemary Candle 220g", your Etsy listing says "Rosemary Candle by Pell & Row, 220g", your Instagram says "the rosemary one", and your invoice says "PR Rosemary Lg", you have given the machine 4 products from 1 maker and 1 product from each of several makers. A copycat using one exact string consistently across 20 listings looks more coherent than you do.

Pick the string. Write it down. Use it everywhere, character for character, including the ampersand decision, which you have probably never made deliberately.

Same for the organisation name. "Pell and Row" or "Pell & Row", not both. Whichever you pick goes in the schema name, the marketplace shop names, the LinkedIn page, the Companies House filing where you can, and the copyright line in your footer.

This is unglamorous admin and it's the difference between an entity and a cloud of near-misses.

The identifiers worth having

sameAs is only as good as what's in it. Three items earn their place.

A Wikidata item for the brand. Wikidata is a structured, openly licensed database that a great many systems read, and an item gives your brand a stable identifier that isn't your own domain. Notability rules apply, so a 6-month-old shop won't qualify, and a business with press coverage and a catalogue usually will.

Your official company registration. Companies House in the UK, or the equivalent register. It's the hardest signal in the set to fake and the one most likely to be checked.

Your marketplace shops. As above. The claim nobody makes.

What doesn't earn its place: a long tail of directory profiles with inconsistent details. 6 accurate sameAs links beat 40 with 3 different spellings of your name, because the inconsistent ones actively damage the record you're trying to build.

Two things worth knowing about, with honest caveats

llms.txt. A proposed convention, a file at your domain root describing your site's key content for language models. It was put forward in late 2024 and it is not an adopted standard; no major AI provider has committed to reading it. It costs almost nothing to publish and I wouldn't let anyone sell you an AEO programme built on it.

IndexNow. A protocol for telling search engines a URL has changed, supported by Bing and several other engines. Google has not adopted it. Useful for getting a changed stockists page recrawled quickly on the engines that do support it, and not a universal freshness button.

The reason to name both, with the caveats attached, is that this corner of the industry is full of people selling emerging conventions as requirements. Structured data on your own pages is the part with 15 years of evidence behind it. Start there, finish there, and treat the rest as cheap experiments.

Measuring it, which means asking

There's no console for this, so you ask.

Write 10 questions a buyer would type. Where can I buy Pell and Row candles. Is Pell & Row Official a real stockist. How much does a Pell and Row rosemary candle cost. What's the difference between the real ones and the cheap ones.

Put each one to the assistants your customers actually use, and save the full answer as text with the date. Not a summary, the whole answer, because the sources it cites are the finding.

Then read for 3 things: does it name your store first, does it name any seller that isn't yours, and does it cite your own pages as the reason. Re-run it monthly. The movement is the metric, and it moves slowly, which is why a baseline taken today is worth more than a better method in 6 months.

When an unauthorised seller shows up in those answers, that's a finding for the other half of the work. How copycat listings leak into AI answers covers the mechanism and the removal side; the entity record is what stops the gap being filled by the next copy.

The order to do it in

If you have one afternoon: the stockists page, and your own marketplace shop URLs added to the Organization sameAs array. Those two.

If you have a week: add Product and Offer markup with the seller named, and fix the product-name string across every surface you control.

If you have a quarter: Wikidata, the 10-question baseline, and a monthly re-ask.

And a sequencing warning, because it's the mistake I see most. Doing the entity work while copies are live produces a confused record rather than a clean one, since the machine keeps finding contradictory evidence about who sells your product. Run both halves together. Find and remove the listings on a schedule, and build the record in parallel.

The finding part is mechanical and worth automating once the manual version gets tedious. Brand Protection Tools, which Verity AI runs, does the scheduled search, the scoring, the evidence capture and the notice preparation, and leaves confirming and filing with the brand owner. Its allowlist of your own stores and authorised sellers is the same list that belongs on your stockists page, so write it once and use it twice. It searches Etsy and Alibaba.com today, with the rest of its coverage list still to come.

Rowan's stockists page went up on a Thursday. 7 weeks later, asked the same question, the assistant said that Pell and Row list 2 official stores and 5 stockists and that Pell & Row Official isn't among them.

It got that from him. He was the only one who'd written it down.

For the board-level version of why this is a control rather than a marketing task, read counterfeits as a governance issue. The wider argument is in When the AI shopping assistant recommends the fake.

Share this article

LinkedInXEmail
Sotiris Spyrou - Author

Sotiris Spyrou

Sotiris Spyrou is the founder of VerityAI, a Responsible AI advisory for boards and AI-deploying businesses. With 27 years across agencies and global in-house roles, including Global Head of SEO at Robert Half and Group Head of Search at Gamesys, he advises leaders on AI governance and risk, and on answer-engine visibility engineered without the dark patterns the rest of the industry is getting penalised for. He is the author of TRANSFORM, AI Moats, and Ethical AI.

Founder at VerityAI

Areas of Expertise:

AI Governance & RiskResponsible AI StrategyAnswer Engine OptimisationBoard-Level AI Advisory