Back to blog

Structured data and schema markup: a practical guide

Structured data and schema markup powering rich results in Google

An accounting office in Varna had a serious invisibility problem. The site was indexed, the copy was fine, the rankings were fine. But the Google result looked like every other: a blue link and two lines of text. The competitor two positions lower showed star ratings, opening hours and three expandable questions. He was collecting the clicks.

The difference was not in the content. It was that one site told Google what it contained and the other expected to be guessed.

What structured data actually is

Structured data is an extra layer of information in the page code that describes the content using a vocabulary machines understand. That vocabulary is called schema.org and it is shared by Google, Bing, Yandex and a growing number of AI systems.

A human reads "open until 18:00" and understands. A machine sees a string of characters. Schema markup turns that string into a "closes: 18:00" field on a LocalBusiness type, which can then be shown in results, read out by an assistant or used on a map.

What structured data does not do

It is not a ranking factor on its own. A page with schema markup does not automatically climb. The effect is on presentation: rich results, higher click-through rate, better understanding of the content. Across our client projects, correctly implemented markup lifts CTR by fifteen to forty per cent with no change in position.

Why the topic got more important this year

Generative answers in search engines and assistants feed on clear, machine-readable facts. The phrase schema markup gets around 50 searches a month in Bulgaria, but the interest comes mostly from people who have already noticed their site missing from the new answer formats. There is more on this in our article on the difference between SEO and GEO.

Which types deliver real effect

The schema.org vocabulary has hundreds of types. About ten matter for a Bulgarian business.

TypeUsed forVisible effect in results
Organizationcompany data, logo, profilesbrand panel and knowledge
LocalBusinessaddress, hours, phonelocal results and maps
Productprice, availability, conditionprice and stock in the result
AggregateRatingcustomer ratingsstars
FAQPagequestions and answersexpandable questions
BreadcrumbListpath to the pagebreadcrumb instead of a URL
Articleblog publicationsdate, author, image
Serviceservice descriptionbetter understanding
Eventdated events with a venueevent card
JobPostingjob listingsinclusion in Google Jobs

If you are starting out, the order is: Organization and LocalBusiness site-wide, BreadcrumbList on every internal page, Product for a shop, FAQPage where real questions exist, Article on the blog.

How to implement it

There are three syntaxes: JSON-LD, Microdata and RDFa. Use JSON-LD. Google recommends it officially, it lives separately from the visual code and it does not break when the design changes.

Where it goes

A script of type application/ld+json in the head or at the end of the body. You can have several blocks on one page, for example Organization plus Product plus BreadcrumbList.

On WordPress

Most SEO plugins generate the basic markup automatically. The problem is that they often generate it twice, when the theme also adds its own. Duplicate markup confuses machines. Check what actually renders and disable one source. There are practical notes on the platform in our piece on building a WordPress site.

On an online store

Product markup has to come from the database, not be written by hand. Price, currency, availability and condition change every day. Static markup with a price from three months ago is worse than none. On a WooCommerce store this is solved with a properly configured plugin plus a check of the output.

On a static or custom site

Write JSON-LD into the template and populate values from the same source that fills the visible text. One rule: if a value is not visible on the page, do not put it in the markup.

Rich search results generated from JSON-LD markup

The rules Google enforces

Markup is a promise. A broken promise leads to a manual action and months without rich results.

Content in the markup must match what is visible on the page. Do not add FAQ markup for questions the user never sees.

Ratings must come from real customers and be displayed on the site. Self-awarded five stars is a violation and it gets caught.

The price in Product must match the price on the page, including during a sale. A mismatch means losing rich results and creates problems in Merchant Center.

Do not mark up content hidden behind a tab or accordion the user cannot open.

Mark one type once per page. Duplicate blocks with different values make Google ignore both.

How to test

Three tools, in this order.

Google's Rich Results Test shows whether a page qualifies for a specific rich result. This is the main check before publishing.

The Schema Markup Validator checks the syntax itself against the schema.org vocabulary, including types Google does not render visually.

The enhancements report in Google Search Console shows errors across the whole site after indexing. This is where you catch problems that appear on only part of the pages, for example products without a price.

Test at least three different page types: home, category and product or article. Errors are almost never everywhere.

Common mistakes from Bulgarian practice

Markup copied from a foreign site with the foreign data still inside. We have seen an address in Poland in the markup of a Sofia company.

An FAQPage with ten keyword-stuffed questions and no real answers. Google stopped showing expandable questions for many such sites precisely because of this.

AggregateRating without a single visible review on the page.

Missing BreadcrumbList. This is the easiest win: the path replaces an ugly URL in the result and lifts clicks with no risk.

Markup only on the home page. That page brings the least, because the money is on product and service pages.

Prices in the old currency. Since 2026 amounts are stated in euro, and markup with an outdated currency creates a mismatch with the prices on the page.

What to realistically expect

For a local business: opening hours and phone shown directly in the result, more calls with no change in position. The effect appears two to four weeks after indexing.

For an online store: price and availability in the result, and fewer clicks from people for whom the item is too expensive or out of stock. That sounds like a loss but it raises conversion on the rest.

For a services site: expandable questions under the result and better inclusion in generative answers.

For a blog: date and author, which matters on topics where freshness counts.

Frequently asked questions

Does structured data affect Google rankings

Not directly. Schema markup is not a ranking factor. It does affect click-through rate, and a higher CTR under otherwise equal conditions usually improves position over time. Markup also helps machines understand the topic of the page, which matters for generative answers.

How long does implementation take

For a small site with company data, breadcrumbs and FAQ: two to four hours of work plus testing. For an online store with dynamic product data: one to three days, depending on the platform and how clean the data is. The longest part is almost always cleaning the data, not writing the code.

Do I need a plugin or can I write it myself

If the site runs on WordPress and you already have an SEO plugin, start with it and add only the missing types by hand. On a custom system, JSON-LD in the template is more reliable because you control every value. Either way, testing is mandatory.

What happens if I add markup that does not match the page

Best case, Google simply ignores it. Worse case, you lose rich results across the whole site after a manual action, and recovery takes months and a reconsideration request. It is not worth it.

Does schema markup help with AI answers

Yes, indirectly. Systems that generate answers prefer sources with a clear, unambiguous structure. Markup does not guarantee a citation, but it removes ambiguity about what the page claims, who claims it and when it was updated.

Next step

Structured data is one of the few things in SEO with a fast and predictable effect. It requires no new copy, no new links and no ad budget. It requires half a day of work and discipline in testing.

If you want us to review what exists and what is missing on your site, write to us through the contact page. We audit the markup and send an individual quote within 24 hours. See also our full SEO and GEO service.

Ready to get started?

Contact us for a free consultation and a quote within 24 hours.