Schema markup is structured data, written to the schema.org standard, that tells machines what a web page represents: a company, a service, an article, a product, a set of questions and answers, or its place in the site hierarchy. It is usually written as JSON-LD, a short block in the head or body of the HTML document. Visitors don’t see it; Google and AI systems read it. It helps Google with rich results and with understanding entities, and it helps AI search tools such as ChatGPT, Gemini and Perplexity connect a company with its services correctly. Below we cover the most important types, when to use them and what they look like in practice.

In short

  • Schema markup is a machine-readable confirmation of what the page already says. It is not a substitute for content.
  • JSON-LD is the recommended format because it is separate from the HTML structure and easy to maintain.
  • For a service business, the key types are Organization or ProfessionalService, Service, Article, FAQPage and BreadcrumbList.
  • Ecommerce stores need Product; businesses with a physical location need LocalBusiness.
  • Schema must match the visible content. A mismatch goes against Google’s guidelines and makes the data less reliable for AI systems.

What schema markup is

Schema.org is a shared vocabulary that Google, Microsoft, Yahoo and Yandex launched in 2011 so websites could describe their content in a consistent way. The vocabulary defines types (for example Organization, Article, Product) and properties (name, description, url, author). Schema markup is the use of that vocabulary on a specific page.

There are three ways to write it: Microdata (attributes on HTML elements), RDFa (similar, with a different syntax) and JSON-LD (a standalone block in JSON format). Google recommends JSON-LD because it is separate from the page layout, easier to generate programmatically, and doesn’t break when a designer changes the HTML. On WordPress, SEO plugins or the theme generate it; on custom projects we output it directly from the page data.

One important limit: schema markup describes, it doesn’t create. If a page has no FAQ section, it shouldn’t have FAQPage schema. If the company has no reviews, AggregateRating doesn’t belong on the page. Google has clear rules on this and can remove rich results, and language models can’t rely on data that doesn’t match the page.

Why it helps Google

Google uses structured data for two things. The first is rich results: star ratings for reviews, price and stock for products, breadcrumbs instead of a bare URL, expandable questions for FAQs. The second, less visible but more important, is understanding entities. Google builds a knowledge graph in which your company can be a node, connected to services, a location, people and publications. Schema markup states those connections explicitly instead of leaving Google to infer them from the text.

This is part of technical SEO (search engine optimization). Structured data doesn’t improve rankings directly, but it improves understanding, and a page has to be understood before it can rank for the right queries.

Why it helps AI systems

Language models build answers from sources they understand. GEO (generative engine optimization, for generative AI systems) and AEO (answer engine optimization, for answers to specific questions) prepare content for these systems; together they cover what is often called AI search visibility. GEO doesn’t replace SEO. It builds on technical SEO, content quality, trust and structure, and schema markup is part of that structure.

When a system like Perplexity or Google AI Overviews crawls a page, the JSON-LD block tells it: this is an organization called 4tech, run by Aljaž Polh (registered name Spletne storitve, Aljaž Polh s.p.), offering a service called “ecommerce development” in Slovenia; this article was written by Aljaž Polh; this page answers the following five questions. The system doesn’t have to guess who the author is, or whether “4tech” is a company or a product. That makes it more likely the company will be understood and cited correctly. It does not guarantee a ranking or a recommendation.

The most important types and when to use them

Schema.org has several hundred types, but in practice a company needs six to eight. The table below covers the ones we use on most projects.

TypeWhat it describesWhen to use it
OrganizationThe company as an entity: name, legal name, logo, contact, profiles, founderOn every page, usually as a shared entity that the other types refer to
ProfessionalServiceA service business; a subtype of LocalBusiness with the properties of OrganizationWhen the company offers professional services; it can replace or complement Organization
ServiceA single service: name, description, provider, area, typeOn every service page, one schema per service
ArticleAn article or blog post: headline, author, publication and modification dates, publisherOn every post in a blog or knowledge base
FAQPageA list of questions and answers that are visible on the pageWhen the page has an FAQ section; the questions and answers must also be visible to visitors
BreadcrumbListThe path from the home page to the current pageOn all subpages; on desktop, Google may show it in results instead of the full URL
ProductA product: name, description, image, price, currency, stock, reviewsOn product pages in an ecommerce store; WooCommerce generates it automatically, but it needs checking
LocalBusinessA business with a physical location: address, coordinates, opening hours, phoneWhen customers visit the business or when it operates in a specific area

Organization and ProfessionalService

Organization is the base that all other types refer to. On the 4tech website we use ProfessionalService, which inherits the properties of Organization and also says that this is a service business. The key is a stable identifier for the entity (the @id property), so Service, Article and other schemas point to it instead of every page describing the company from scratch.

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "ProfessionalService",
  "@id": "https://4tech-agency.com/#organization",
  "name": "4tech",
  "legalName": "Spletne storitve, Aljaž Polh s.p.",
  "url": "https://4tech-agency.com/",
  "founder": { "@type": "Person", "name": "Aljaž Polh" },
  "areaServed": "SI",
  "knowsAbout": ["WordPress", "WooCommerce", "SEO", "GEO", "AEO"]
}
</script>

Service

Service describes one service and links it to the provider. Every service page gets its own Service schema. The serviceType property should be the name of the service as you use it in the page title and navigation. For AI systems, consistent naming matters more than the amount of data.

{
  "@context": "https://schema.org",
  "@type": "Service",
  "name": "Ecommerce development",
  "serviceType": "Ecommerce development",
  "url": "https://4tech-agency.com/services/ecommerce-development/",
  "provider": { "@id": "https://4tech-agency.com/#organization" },
  "areaServed": "SI",
  "description": "Ecommerce stores on WooCommerce or custom-built, connected to ERP and payment systems."
}

Article

Article says who wrote the content, when, and on whose behalf. Systems use the author property (of type Person) and publisher (a reference to Organization) to assess trust. The datePublished and dateModified dates must match the dates visible on the page.

FAQPage

FAQPage contains a list of Question entities, each with an acceptedAnswer. The questions and answers must be visible on the page, in the same wording. Since 2023 Google has shown FAQ rich results less often, but the schema still helps with understanding the content, and AI systems can pull question-and-answer pairs straight from it.

{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [{
    "@type": "Question",
    "name": "Does schema markup improve rankings?",
    "acceptedAnswer": {
      "@type": "Answer",
      "text": "Not directly. It improves understanding of the page, which is a precondition for ranking correctly."
    }
  }]
}

BreadcrumbList is a list of ListItem elements with a position, name and URL. It tells Google where the page sits in the hierarchy, and Google may show that path in desktop results instead of the URL. It helps AI systems understand that “Ecommerce development” is a subpage of the “Services” section, not a standalone page.

Product and LocalBusiness

Every ecommerce store needs Product. WooCommerce generates it automatically, but often without properties such as brand or gtin if they haven’t been entered, or with the wrong currency in multilingual stores. That’s why we always check it by hand in our ecommerce development work. For businesses with a physical location, a more specific subtype (Store, Restaurant) makes sense; for a service agency, ProfessionalService, which is also a subtype of LocalBusiness, is the closest description.

What this looks like on the 4tech website

On our own site, the central entity is the business owner (a Person, linked to WebSite and WebPage), with Article on every post (author named), FAQPage on pages with question sections and BreadcrumbList on all subpages. All schemas are linked through @id, so a system sees one company, not five unconnected descriptions. We take the same approach, adapted to the type of business, in website development for clients.

The most common mistakes

  • Schema describes what isn’t on the page. Ratings without visible reviews, FAQ without visible questions. Google can penalize this with a manual action.
  • Duplicate entities. The SEO plugin and the theme both generate Organization, with different data.
  • Inconsistent data. The phone number in the schema differs from the one in the footer; the company name appears once with its legal suffix (such as “d.o.o.”, the Slovenian equivalent of LLC) and once without.
  • Missing references. Service without provider, Article without publisher, so the entities aren’t connected.
  • Output never checked. The schema is in place but has never been validated, and a syntax error means Google can’t read it.

Checking is simple: Google’s Rich Results Test and the schema.org validator show errors and warnings. Check after every major change to the site, because plugin and theme updates often change the output. To see what structured data your site has now, it’s part of the free SEO, GEO and AEO check.

Frequently asked questions

Does schema markup improve Google rankings?

Not directly. Google doesn’t use structured data as a ranking factor. It does improve understanding of the page and enables rich results, which indirectly affects visibility and clicks.

Is JSON-LD better than Microdata?

For most sites, yes. JSON-LD is separate from the HTML structure, easier to generate and maintain, and Google recommends it. Microdata is still valid, but it breaks more easily when the layout changes.

Is an SEO plugin on WordPress enough?

For the basics, yes. For a service business, usually not. Plugins generate WebPage, Article and a basic Organization, but rarely Service on service pages or properly linked entities. Those have to be added by hand or in the theme.

What happens if the schema is wrong?

Google can’t read syntactically broken schema, so it has no effect. Schema that doesn’t match the content, for example reviews that aren’t on the page, can lead to a manual action and loss of rich results. That’s why you should check after every change.

Do AI assistants actually read schema data?

AI crawlers receive JSON-LD together with the HTML content. Providers don’t disclose exactly how each model uses it, but structured data is an additional, consistent source of information about who the author is and which company offers a service. Schema only works as confirmation of clear content, not as a substitute for it.

To see how Google and AI assistants understand your site, get a free check. For a complete list of findings by subpage, the technical SEO + GEO audit is available for €199.