Technical SEO

The product page as Google sees it: what we found in 30 stores

On 8 August 2026 we opened the product pages of thirty live online stores and looked at them not as a shopper but as a crawler. Product markup was present in ten of them, specifications in four. A breakdown of what follows from that.

September 2, 2026
9 min read

On 8 August 2026 we opened the product pages of thirty live online stores. Stationery, optics, household chemicals, textiles, footwear, jewellery, power tools. We do not name the stores; we do name the niches.

We were not looking with a shopper's eyes. A shopper sees a photo, a price and a button. What interested us was the other reading of the same page: what a search crawler and a marketplace parser get out of it. In other words, structured data — product markup, price and availability markup, machine-readable specifications.

Three numbers from that measurement:

What we looked for Found
product markup Product 10 of 30
price markup Offer 10 of 30
machine-readable specifications 4 of 30

For a machine, two thirds of those pages are plain text. Good text, with photographs and a manufacturer's description. But with no hint at all about which part is the product name, which is the price and which is the availability.

Why this is not cosmetic

Google reads a product page the way it reads any other: it tries to guess. Sometimes the guess is right. JSON-LD markup removes the guessing — it states outright that 1,890 ₴ is a price in hryvnia, not an article number, not a weight and not a model code.

The consequence shows up in the results page. Without an Offer block there is no price and no availability label under your result's heading. The page still ranks, but in a list of ten it looks like a paragraph of text next to results where the price is visible at a glance. That is a question of screen area and of what the eye catches, not of position.

The second consequence, often the weightier one for Ukrainian e-commerce, is the feed. Rozetka, Prom and Google Merchant Center all want machine fields: name, price, currency, availability, specifications. When the page carries no markup, the feed is assembled separately — a database export, or a script that has to be patched every time something changes in the catalogue. A store with a marked-up page hands over the same fields almost for free. How much work the field mapping alone takes is spelled out in our breakdown of the Rozetka integration.

Broken down by niche

The sample is small, and every individual figure in it should be read as an observation rather than as market statistics. The spread is still visible.

Niche Pages opened Product Offer
optics 4 2 2
footwear 5 2 2
textiles 5 2 2
household chemicals 6 2 2
jewellery 2 1 1
stationery 5 1 1
power tools 3

Six niches account for exactly the ten we counted in total. So among the three power-tool pages there was no product markup at all. And that is the niche with the largest catalogues in the whole sample: the median is 19,962 URLs in the sitemap, the largest catalogue 32,623. Twenty thousand pages, every one of them a wall of text as far as search is concerned.

One more observation from the same table: within every niche the Product and Offer counts matched exactly. Markup appears to be either fully in place or entirely absent. That is rather good news — the problem is not a small oversight during implementation, it is that nobody got round to the task.

The deepest hole is the specifications

Four of thirty. Both niches where they turned up are textiles (2 of 5) and footwear (2 of 5). In the remaining stores the specifications are on the page, they simply sit in a form only a human can use: a table saved as an image, a paragraph inside the description, a PDF datasheet.

For a machine that is zero. Size, material, wattage, compatibility — precisely the things a shopper filters by and a marketplace uses to file the product into a category.

Syntactically, specifications live in the additionalProperty field inside Product:

"additionalProperty": [
  { "@type": "PropertyValue", "name": "Material", "value": "100% cotton" },
  { "@type": "PropertyValue", "name": "Size", "value": "200×220 cm" }
]

There is a precondition here that cannot be skipped: to hand specifications to a machine, they have to exist in the database as separate fields, not as a chunk of HTML inside the description. Stores where specifications were typed in as text for years go through normalisation first, and that is longer work than the markup itself. What a healthy page looks like is described in our product page quality scoring.

What follows the specifications

During the same sweep we also looked at features that cannot be built without structured specifications. Filtering by specification worked on 9 sites of 30, product comparison on 9 of 30 as well. The numbers are suspiciously close, and the reason is the same one: a filter cannot be built over a field that does not exist in the database, and a comparison without a shared set of fields turns into two columns of solid prose.

Rating markup stands apart: we found it on 3 sites of 30. This is the item where haste does not pay. A marked-up rating with no real reviews on the page is exactly the kind of discrepancy that earns a manual action. Reviews first, markup second, never the other way round.

Now with a shopper's eyes

The same sweep, the same thirty pages, but this time we looked at the buttons.

What we looked for Found
one-click purchase 10 of 30
instalment payment 7 of 30
free delivery above a threshold 3 of 30

One-click purchase — a third of the sample. We will not claim it lifts anything: we did not measure that, and somebody else's percentages are worth nothing here. We will describe the mechanism instead. A two-field form in place of full checkout removes one specific barrier — having to invent a password and fill in ten lines for a two-hundred-hryvnia item. For expensive equipment with a long decision it barely matters; for cheap repeat purchases it does. How it works technically is covered in one-click purchase.

Instalment payment — seven of thirty, and the most expensive item on the list. It needs a bank agreement, a separate integration and ongoing support. Adding it for the sake of having it makes no sense; it is justified where the average order value genuinely makes people do arithmetic.

Free delivery above a threshold — three of thirty, and this is where the gap between implementation cost and adoption is widest. It is a rule in the cart plus a line on the product page, roughly a day of work. It guarantees nothing, but it gives the shopper a reason to add one more item instead of leaving. The mechanics and the limits are in free delivery above a threshold.

Checking your own page takes five minutes

Open any product page of your own store and take three steps.

Start with Google's rich results test. You paste the URL and it shows which markup types it can see and which of their fields are empty. If the answer is empty, press Ctrl+U and search the page source for application/ld+json — that confirms there is no markup at all.

Next you have to assemble a correct block. We have a Schema.org builder for that: fill in the fields, get ready JSON-LD without typing quotes and commas by hand. A general walkthrough of the formats and types sits in the article on JSON-LD structured data, and the page as a whole — photos, description, price and availability included — is checked by our product page audit.

And the rule to keep in mind throughout: you may only mark up what is genuinely on the page. The price in the markup matches the price a human sees. Availability matches real stock. Ratings match real reviews that are visible on the page. Google treats a discrepancy as an attempt to deceive, and the penalty here is a manual action, after which rich results disappear for a long while. We drew the same line in our technical checklist for online stores, which also carries the basic Product block for a page.

The order of work barely depends on the platform. Product with a name, photo and SKU comes first — the cheapest step, and it closes half of what a parser complains about. Then Offer with price, currency and availability, because that is the block responsible for what appears in search results and what the feed takes. Then additionalProperty, but only once the specifications have become database fields rather than a paragraph of description. Breadcrumbs and ratings come last, each with its own precondition.

What this will not give you

Markup does not lift positions. Google says so plainly, and we will repeat it in our own words: none of the ten stores where Product and Offer are in place gained any ranking advantage from them.

Two other things change. The first is how your result looks once it is already shown: price, availability, breadcrumbs instead of a bare URL. That is not a guarantee either — Google decides on rich results itself and can change its mind.

The second, usually more important for a store, is that a marked-up page feeds a product feed. Data that already sits in a machine format does not have to be scraped out of HTML every time you open a new sales channel.

Twenty stores in our slice are still paying for this with manual work. And judging by the fact that markup is either fully present or entirely missing, most of them do not even know the bill exists.

Tags

SEOE-commerce

🤔Did you like the article?

Your opinion helps us create better content

Share with friends

Found something useful? 🚀

Help others learn about it - share the article on social networks

https://lionex.com.ua/blog/kartka-tovaru-ochyma-google-30-magazyniv

💚 Thank you for helping us grow

Vladyslav Chystiakov

Пише про те, що робить руками: інтернет-магазини на OpenCart, застосунки на Next.js, інтеграції та швидкість сайтів. У статтях — заміри й перевірки, які читач може повторити на своєму проєкті, а не загальні поради. Комерційна розробка з 2015 року.

Frequently asked questions

Answers to common questions on the topic

No. Markup is not a ranking factor and it does not force Google to show a rich result — Google decides how your result looks and can change its mind. Two other things do change: how the result looks once it is already shown (price, availability, breadcrumbs instead of a bare URL), and how easily a marketplace feed can be built from the page.

With the Product block — name, photo, SKU. It is the cheapest step and it closes half of what a parser complains about. Offer comes second, with price, currency and availability, because that block is responsible for what appears in search results and what the feed takes. Specifications via additionalProperty come third, and only once they exist as separate database fields.

Because in most catalogues they do not exist as data. They sit in a table saved as an image, in a paragraph inside the description, or in a PDF datasheet — readable by a human, not by a machine. Marking them up requires normalising the catalogue first, turning text into fields. That is longer work than the markup itself, which is exactly why it gets postponed.

Yes, and that is where it pays off fastest. Rozetka, Prom and Google Merchant Center expect machine fields. With no markup on the page, the feed is assembled by a separate export or a script that has to be patched after every catalogue change. A marked-up page hands over the same fields without that manual work.

Get the best articles by email

Subscribe to our newsletter and receive useful tips, insights and news about web development, marketing and business.

We respect your privacy. You can unsubscribe at any time.