On 8 September 2026 we read 21 public YML feeds from Ukrainian online stores — 89,718 products — and counted one thing in them: how many products have a description that matches, word for word, the description of another product in the same feed.
The answer: 19,674 products, 22% of everything we read. Such matches exist in 17 feeds out of 21. We have already used these same feeds twice: on 5 September we looked at what breaks against a marketplace's requirements, and on 8 September at whether they carry Ukrainian language fields. This time it is descriptions only.
What exactly we counted
The method is simple, and it is worth understanding, because it determines how the number should be read.
Within a single feed, every product description is normalised: HTML tags and the CDATA wrapper are stripped, runs of whitespace are collapsed into one space, and case is lowered. Whatever remains is hashed. A product joins a "duplicate group" if its normalised description matches byte for byte the description of another product in the same feed. The comparison happens inside a feed; we did not compare one store against another.
This is not the same thing as duplicate titles, which we counted on 5 September (903 products across 11 feeds). There the title matches, and the marketplace sees it on its own: Rozetka's help centre states the requirement directly, and the listing is rejected. Here the titles differ while the text underneath them is identical — and no feed validator will complain about that.
The numbers
| Metric | Value |
|---|---|
| Products with a copied description | 19,674 (22%) |
| Feeds where such groups exist | 17 of 21 |
| Groups of identical descriptions | 6,230 |
| Products per group, on average | 3.2 |
| Largest single group | 137 products |
| Products with no description at all | 5,779 (6%) |
| Products with a description shorter than 200 characters | 9,267 |
| Feeds with neither duplicates nor empty descriptions | 2 of 21 |
The share of duplicates per feed is spread wide: median 7.4%, maximum 50.3%. In a typical feed from the sample, a copy shows up in roughly every fourteenth product; in the worst one, in half the catalogue.
The extremes deserve to be named separately, because averages hide them:
- A feed of 19,761 products in which 9,931 items sit in duplicate groups. Half the catalogue.
- A Prom feed of 5,088 products: 3,843 of them have no description at all, and another 1,003 are copies. Only 242 products out of five thousand own their text.
- The largest single group: 137 listings with word-for-word identical text.
Two feeds out of twenty-one have neither duplicates nor empty descriptions.
How to see this in your own catalogue
The method is reproducible and needs no services at all:
- Export the feed and take the description field from every product.
- Normalise the text: strip HTML tags, unwrap CDATA, collapse whitespace, lower the case. Without this, two identical descriptions that differ by a single
<br>will be counted as different. - Hash every normalised description and group the products by hash.
- Groups holding more than one product are your duplicates. Count empty descriptions separately: different problem, different fix.
That is a dozen lines in any language, or a spreadsheet formula if the catalogue is small. The tool matters less than the outcome: instead of a feeling that "we probably have a lot of the same text", you get a number.
Look at the distribution of groups as well. One group of 137 products and 137 groups of two are different problems. The first means a whole category with a placeholder description; the second means variants of one product where the difference never made it into the text.
Where identical descriptions come from
There are only a few causes, and none of them is carelessness.
The supplier's description. The price list arrives with text, and the import module puts it into the product card. The supplier gave one description for a series of twenty items — twenty identical cards appear in the catalogue.
Variants of one product. The same case in eight colours, the same T-shirt in five sizes. The difference lives in the attributes, and the text was copied.
A category description instead of a product description. The most common cause of large groups: general text about a category or a brand was dropped into the description field. Formally, the field is filled.
A template whose substitution did not fire. The description was assembled from a template, the variables were never substituted, and every product kept the same skeleton.
What this means for search
Precision matters here, because the topic attracts a lot of exaggeration.
An identical description across 137 products means exactly one thing: the search engine sees 137 pages with the same text. From there the ordinary mechanism applies — among pages with identical content, the engine picks one as the main version and shows that one in results, treating the rest as its variants. Which one it picks is its decision, not yours.
We did not check whether this happened to the products of the measured stores, and we measured neither their indexation nor their positions. The measurement shows the state of the feeds, and nothing beyond it. We are not going to promise that something will grow after descriptions are made unique: results depend on dozens of factors — assortment, prices, delivery terms, links, buyer behaviour, competition inside the category.
The honest boundary is this: a unique description removes a technical loss — the fact that the page adds nothing new to what is already indexed. It does not create demand and does not lift positions on its own.
How to fix it across thousands of products
By hand it does not happen. The 19,674 products in our sample are years of a copywriter's work, and in one single catalogue with half of it duplicated, that is 9,931 texts.
The task is solved by a pipeline: a feed in, a feed out. We covered the pipeline itself separately — how to rewrite a catalogue into unique descriptions. The order of work once you have the numbers:
- Empty descriptions first. 5,779 products with no text are not "non-unique", they are "nothing at all".
- Then the largest groups. One group of 137 listings returns more per unit of effort than a hundred pairs.
- A preview on a single product before launching the whole catalogue: read the text with your own eyes while thousands of items are still untouched.
- Import one product back into the marketplace, check the card — and only then the entire catalogue.
In Textory, our own product, the description is built from the product's own attributes rather than invented. That is precisely why variants of one product get different text instead of reshuffled paragraphs. If the description also needs to sit in a shape that is convenient to quote in AI search, that is a separate mode and separate logic — see the article on GEO optimisation of descriptions.
When the task is wider than the text itself, AI product description generation as an agency service means we take on the feed parsing, the field mapping, and returning the file back into the platform.
What this measurement does not show
There are four limitations, and every one of them narrows the number.
We did not compare across stores. An identical description from a shared supplier sitting in two different feeds is invisible here. And that is the most widespread kind of match.
Similar but not identical descriptions are not counted. Reorder the paragraphs, change one word, add a full stop — under our method these are already different texts. The real share of non-unique text is higher than 22%.
We did not check indexation. We do not know what happened to these pages in search, and we draw no conclusions about it.
The sample is small and not random. 21 feeds, found by probing the typical paths of the OpenCart export module. This is the state of these particular public feeds on 8 September 2026, not a cross-section of Ukrainian e-commerce.
Summary
Across 21 measured feeds, 22% of products carry a description identical to that of a neighbour in the same catalogue, and another 6% have no description at all. Checking the same thing in your own catalogue means normalising the descriptions, hashing them and grouping: half an hour of work and one number instead of guesswork.
To see what this looks like on your feed, go to textory.com.ua — pricing there follows the volume of text, and current terms live on the product's own site. The rest of our products are in the own products section. Reviewing a task is free, we reply within two hours, and we work under a contract.




