BlogFindings
Service schema markup: 20 of 616 home pages declared it, and 46 of 89 nodes carried no property the type defines
Lantad asked all 1,419 hostnames in this repository's two committed corpus seed files for robots.txt on 7 October 2026, then read every permitted home page as LantadBot with no JavaScript executed. 1,078 answered HTTP 200 with HTML and 616 of those carried at least one JSON-LD block that parsed. 20 of the 616 declared a Service node, 89 nodes between them, and 46 of the 89 carried none of the 22 properties schema.org defines on the Service type itself.
On 7 October 2026 Lantad requested https://host/robots.txt once for each of the 1,419 hostnames in this repository's two committed corpus seed files, as LantadBot, redirects followed, from one network location, then requested the home page of every host whose own file left the root open, with no JavaScript executed and no stylesheet fetched. 1,078 answered HTTP 200 with an HTML content type. 622 of those carried at least one script element typed application/ld+json, 1,173 blocks between them, and 616 pages held at least one block that parsed as JSON. 20 of the 616 declared a Service node. That is the first number, and it is small enough that the more useful question is what the 89 nodes on those 20 sites actually say, which is where this run spent its effort and where 141 of 382 home pages carrying no structured data at all is the backdrop to read it against.
In short
- Service schema markup appeared on 20 of the 616 home pages Lantad found carrying parseable JSON-LD on 7 October 2026, which puts the type thirtieth of the 147 distinct schema.org types declared across those pages, behind Organization on 411 sites and LocalBusiness on 60.
- 46 of the 89 Service nodes Lantad read on 7 October 2026 carried none of the 22 properties schema.org defines on Service itself, declaring only some combination of name, url and description, which are inherited from Thing and distinguish a service from nothing.
- 32 of the 89 service names Lantad read on 7 October 2026 appeared nowhere in the text the crawler was served, across 10 of the 20 sites, against the instruction in Google's structured data general guidelines, last updated 10 July 2026, not to mark up content that is not visible to readers of the page.
- Service is absent from the 25 features listed in Google's gallery of supported structured data on 15 June 2026, and Google's introduction to structured data, last updated 10 December 2025, says of attributes it does not require that they may be useful for other search engines, services, tools, and platforms.
- 53 of the 89 Service nodes sat inside an Offer as the value of itemOffered rather than standing as an entity of their own, and all 36 nodes that declared a provider resolved it to an organization typed node on the same page, 35 of them by an @id reference.
| Stage | Count | What happened |
|---|---|---|
| Hostnames asked | 1,419 | 392 in ten platform strata, 1,027 in eight industry strata |
| Refused by their own robots.txt | 12 | The file closed the root to LantadBot, so no page was requested |
| Never returned a status | 34 | 22 failed in the client, 11 hit the timeout, one terminated |
| Answered HTTP 403 | 216 | Refused this crawler the page |
| Answered HTTP 503 | 53 | Served nothing to this client |
| Answered another status | 26 | 8 of 202, 7 of 429, 5 of 404, 2 of 406, and one each of 401, 451, 498 and 500 |
| Answered HTTP 200 with HTML | 1,078 | Every 200 in this run carried an HTML content type |
| Carried a JSON-LD block | 622 | 1,173 blocks in total, of which 14 failed to parse |
| Held a block that parsed | 616 | The denominator for every rate below |
| Declared a Service node | 20 | 89 nodes between them |
What does service schema markup actually declare?
Schema.org's Service type, on a page whose footer dates the vocabulary release to version 30.1 of 16 September 2026, defines it in one sentence: a service provided by an organization, e.g. delivery service, print services, etc. Underneath that definition sit 22 properties the vocabulary attaches to Service itself, among them provider, areaServed, serviceType, offers, hasOfferCatalog, hoursAvailable, audience, availableChannel, termsOfService, serviceOutput and providerMobility. Seven more specific types inherit from it: BroadcastService, CableOrSatelliteService, FinancialProduct, FoodService, GovernmentService, TaxiService and WebAPI.
The division between those 22 properties and the rest matters more than it looks, and it is the measurement this post turns on. Name, description, url, image and sameAs are not Service properties. They are inherited from Thing, the root of the whole vocabulary, and every one of the 147 types this run saw carries them. A node that declares a type of Service and then fills in only name and url has said that something exists and has a web address. It has not said who performs the work, where, for whom, on what terms, or at what price. Those are exactly the questions the 22 own properties exist to answer, and they are the ones an engine assembling an answer about a local trade or a professional practice would need.
So a Service node can be read on two levels, and this run read both. The first is whether it is there at all. The second is whether it carries any of the vocabulary that makes the type worth choosing over a bare Thing, which is also the level at which entity confidence is decided: a typed node with no distinguishing properties leaves a reader no more certain about the business than the page's prose already did. One scoping note before the counts. Only JSON-LD was parsed. Microdata was checked separately and 93 of the 1,078 pages carried a schema.org itemtype attribute, but not one of those 93 named Service, so nothing was missed by reading JSON-LD alone on this corpus, which was not a safe assumption before it was tested and is the same split measured directly when 22 of 385 pages carried microdata.
| Property | Nodes | Defined on |
|---|---|---|
| name | 89 | Thing |
| url | 55 | Thing |
| provider | 36 | Service |
| serviceType | 35 | Service |
| description | 32 | Thing |
| areaServed | 24 | Service |
| hasOfferCatalog | 4 | Service |
| image | 3 | Thing |
| audience | 2 | Service |
| category | 2 | Service |
| offers | 2 | Service |
| alternateName, additionalType, additionalProperty, mainEntityOfPage | 1 each | Thing |
How many home pages declared a Service, and where the type ranks
20 of the 616 pages with parseable JSON-LD declared at least one Service node. Ranked by how many sites declared each type, that puts Service thirtieth of the 147 distinct types this run saw, in a tail that falls away quickly: Organization on 411 sites, WebSite on 410, ImageObject on 253, SearchAction on 223, PostalAddress on 197, WebPage on 192, ContactPoint on 165, BreadcrumbList on 135, Person on 87, LocalBusiness on 60 and Offer on 60. Sites in this corpus describe who they are twenty times more often than they describe what they do, which is consistent with the gap found when 103 of 385 pages named no organization at all and with how rarely the organisation nodes that do exist get filled in, as when two of 172 LocalBusiness nodes carried opening hours.
The 89 nodes are not spread evenly. Five sites account for 43 of them: seota.com with 11, thewireguyelectric.com with nine, and povio.com, gardencityplumbing.com and fly.io with eight, seven and seven. Nine of the 20 sites declared exactly one. By stratum the type lands where its definition predicts: five of the 20 sites are in this corpus's Webflow stratum and three in its WordPress small business stratum, both heavy in trades and professional practices, three are in the SaaS stratum, two in finance, and one each in healthcare, ecommerce, Framer, Wix and Squarespace, no code, single page app startups and local media. The trades read exactly as the vocabulary's own examples do, with an electrician declaring nine services and a plumbing and heating firm eight.
Three sites also declared a Service subtype, and all three chose the same one: FinancialProduct, five nodes across hdfcbank.com, paypal.com and statefarm.com. None of the other six subtypes appeared anywhere in the corpus, so GovernmentService went undeclared by all 129 government hostnames in the industry seed file, the one stratum whose entire subject that type names. Twenty of anything is a small number, and it is worth saying that these counts sit in the same range as other types this blog has measured at corpus scale, where 19 of 1,419 sites declared an Event and 17 of 605 declared an ItemList. Rarity is the normal condition of a schema type that earns no rich result.
Why 46 of the 89 nodes said nothing that a Service says
46 of the 89 Service nodes, on nine of the 20 sites, carried none of the 22 properties schema.org defines on Service. Every one of those 46 declared a type, a name, and in most cases a url or a description, and then stopped. Swap Thing for Service in any of them and nothing is lost, because nothing in the node depends on the type being Service. That is not a syntax error and no validator will flag it: it is a node that costs a site nothing and tells a reader nothing, which is the harder failure to notice and the reason a defect count like 117 of 612 pages carrying a schema defect is not the whole picture of markup quality.
Where the nodes sit explains most of it. 53 of the 89 are not top level objects at all. They appear as the value of itemOffered inside an Offer, which is the construct schema.org provides for saying that a price or an availability applies to a thing. In that position the Service is a label for what the Offer is about, so the Offer carries the commercial detail and the Service often carries a name and nothing else. Twenty nodes sat in an @graph array, nine inside the mentions property of a WebPage, and seven stood at the top level of a block on their own. Read that way, the commonest use of the type in this corpus is not describing a service; it is naming the thing a price attaches to, which is the same pattern that makes 42 of 50 product pages declaring Product a different kind of result to this one.
The nodes that did reach for the type's own vocabulary did it carefully, and this is the part of the finding that runs against the direction of the rest. 36 nodes declared a provider, the property that names who performs the work. Every single one resolved: 35 pointed at a node on the same page by @id, every reference matching an organization typed node declared in the same markup, with targets including Organization, Corporation, NGO, MedicalOrganization, ProfessionalService and AccountingService, and the thirty sixth inlined the provider with a name. None dangled. That is a higher standard of internal referencing than the corpus manages generally, where 313 of 615 pages gave no node an @id at all, and 28 of these 89 nodes carried an @id of their own. 35 declared serviceType, though on nine of those the serviceType string repeated the name exactly, and 24 declared areaServed, 13 as a plain string such as Worldwide or US, eight as an array, and three as a typed Country object.
Flow: 616 pages parsed to 20 declare a Service; 20 declare a Service to 89 Service nodes; 89 Service nodes to 53 inside an Offer; 89 Service nodes to 20 in an @graph; 89 Service nodes to 9 in WebPage.mentions; 89 Service nodes to 7 at the top level; 53 inside an Offer to 46 carry none; 20 in an @graph to 43 carry a Service property; 9 in WebPage.mentions to 43 carry a Service property; 7 at the top level to 43 carry a Service property.
32 of the 89 service names appeared nowhere in the page text
Every one of the 89 nodes carried a name, which is the one thing they all got right. 32 of those names, across 10 of the 20 sites, did not appear anywhere in the text the crawler was served. The comparison was made after stripping script, style, noscript and template content and all tags from the delivered HTML, decoding character entities on both sides, lowercasing, normalising whitespace, and normalising curly quotes and the dash characters, so a name was counted as present if its text appeared anywhere in the page at all, in any element, visible or hidden. The threshold is deliberately generous and the 32 still failed it.
This is the one place the run meets a published rule rather than a definition. Google's structured data general guidelines, last updated 10 July 2026, state plainly: do not mark up content that is not visible to readers of the page, and give as the example that if the JSON-LD describes a performer, the HTML body must describe that same performer. The same page lists, among the reasons structured data may not be used, that the content referred to by the structured data is hidden from the user. Nine services declared by an electrician in Mesa, Arizona, seven by a plumbing and heating firm in Missoula, Montana, and eight by a marketing agency in Frisco, Texas sat entirely inside the markup. Each of those names was confirmed by hand to exist in the raw bytes only inside a JSON-LD script element, in most cases as the itemOffered of an Offer.
One case is worth separating from the rest because it is a different failure wearing the same clothes. sammylabs.com declared a Service with a serviceType of Computational Law Engine, a resolving provider and an @id, on a home page that served this crawler 15 words of text in total. The markup is the only description of the business that reached the crawler, so the name being absent from the page is a consequence of there being almost no page, which is the condition measured head on when 11 of 271 pages returned no words at all. The pattern itself is not new to this corpus. It is the same shape as 70 of 146 structured data values sitting off the page, as 27 of 165 Article headlines that the page's own h1 did not contain, and as 298 of 1,277 FAQ answers that were not on the page. Markup drifts from prose in the same direction every time, because the markup is generated and the prose is written.
| Site | Nodes | Off page | Words of text served |
|---|---|---|---|
| seota.com | 11 | 8 | 2,547 |
| gardencityplumbing.com | 8 | 7 | 856 |
| thewireguyelectric.com | 9 | 6 | 530 |
| ama.com.au | 7 | 3 | 1,296 |
| roberthalltaxes.com | 6 | 2 | 1,468 |
| strabo.app | 2 | 2 | 1,220 |
| sammylabs.com | 1 | 1 | 15 |
| povio.com | 8 | 1 | 881 |
| iheald.com | 1 | 1 | 5,136 |
| tiki.vn | 1 | 1 | 2,083 |
Does any engine document reading it?
No engine documents a result built from Service, and the honest version of that sentence is longer than the sentence. Google's gallery of supported structured data features, carrying a last updated date of 15 June 2026, lists 25 features: Article, Breadcrumb, Carousel, Course list, Dataset, Discussion forum, Education Q&A, Employer aggregate rating, Event, Image metadata, Job posting, Local business, Math solver, Movie, Organization, Product, Profile page, Q&A, Recipe, Review snippet, Software app, Speakable, Subscription and paywalled content, Vacation rental and Video. Service is not among them, and the word does not appear on the page.
What Google does not say is that it ignores the type. Its introduction to structured data, last updated 10 December 2025, says the opposite twice over: that there are more attributes and objects on schema.org that are not required by Google Search, that those may be useful for other search engines, services, tools, and platforms, and that Google can make general use of the sameAs property and other schema.org structured data, some of which may be used to enable future Search features if they are deemed useful. So the position a site owner is actually in is that Service earns no documented result today, may be read by something, and is governed in the meantime by the one rule Google does state about all markup, which is the visibility rule the previous section measured against.
That is a weaker claim than either side of this argument usually makes, and it is the claim the evidence supports. A rich result is not the only reason to write markup, and this blog has published the case for writing it anyway: the FAQ entries on this page emit FAQPage data for an answer engine rather than for a snippet, long after Google withdrew the FAQ rich result while the type kept being scored. But the case for markup with no documented consumer rests entirely on the markup being accurate, which is what makes 46 empty nodes and 32 off page names the relevant findings rather than the raw adoption count. It also sets the ceiling on what any of this buys: in a citation audit this blog covered, structured data came third behind other factors, and anyone sizing the work should read generative engine optimisation with that ordering in mind.
-
schema.org/ServiceDefined A service provided by an organization, with 22 own properties and seven subtypes, vocabulary release 30.1 of 16 September 2026 -
Google search galleryAbsent 25 features listed on 15 June 2026 and Service is not one of them, nor does the word appear on the page -
Google intro to structured dataNot excluded Says undocumented attributes may be useful for other search engines, services, tools, and platforms, and may enable future features -
Google general guidelinesConstrained Do not mark up content that is not visible to readers of the page, last updated 10 July 2026
What this run did not measure
No engine was observed. Every request in this run came from this scanner, identified as LantadBot from one network location, so nothing here is evidence that Google, OpenAI, Anthropic or anyone else read, used or ignored a Service node. The statements about what the documentation says are quotations from pages opened at source on 7 October 2026, and the statements about what engines do with the type are absent because this run cannot support any.
One page was read per hostname, the home page. A trades business that declares its services on a dedicated services page and not on the front page is invisible to this count, and that is the single likeliest reason 20 is an undercount rather than a rate. No JavaScript was executed, so a Service node injected by a client side script was not seen, and that gap has a measured size on this corpus: 27 of 404 pages with no JSON-LD in the HTML gained some once a browser ran them. Only JSON-LD was parsed, though the microdata check above found no Service in the 93 pages carrying an itemtype attribute, so on this corpus that limit cost nothing. Fourteen blocks across six sites failed to parse as JSON and their contents are unknown; if any held a Service node it is missing from all of these figures.
The 341 hostnames that served no page are absent from every rate, and they are not a random sample of the web: 216 of them refused this crawler with HTTP 403, which selects for sites that have opinions about crawler access. The corpus itself is an editorial sampling frame assembled for platform and industry coverage, not a random draw, so every figure here describes these 1,419 hostnames on one date and nothing wider, as the methodology sets out. One last point about this scanner rather than the corpus: Lantad does not validate Service either. The requirements table in core/src/schema.ts names five types, Organization, Product, Article, FAQPage and BreadcrumbList, with six subtype aliases beside them, and anything outside that list is treated as an unrecognised type carrying no business fact the scanner can check. So a site could declare 11 Service nodes with every name absent from the page and read nothing about it in a Lantad report. That is a gap in our own coverage and it is named here for the same reason the counts are. Readers who want to see what their own page hands a crawler before any of this applies can start with what GPTBot sees.
- One home page per hostname 1,078 pages read; a dedicated services page was never requested, so 20 sites is a floor
- JSON-LD parsed 1,173 blocks, 14 of which failed to parse as JSON across six sites
- Microdata checked 93 of 1,078 pages carried a schema.org itemtype and none of them named Service
- JavaScript executed A client injected Service node was not seen; 27 of 404 pages gained JSON-LD from a browser in an earlier run
- Any engine observed Every request was sent by LantadBot from one network location
- Service scored by this scanner Lantad's schema scoring reads identity nodes, so an empty Service node is invisible in a Lantad report
Lantad
Published .
Almost every schema type this blog has counted exists to describe a thing: a person, an article, an event, a product. Service is the one that describes an activity, and for a large part of the economy it is the only type that fits. A plumber, a tax practice, a clinic and a cloud platform all sell work rather than objects, and the schema.org vocabulary gives them one type to say what that work is. So the question a reader doing structured data for an answer engine actually wants settled is narrow: do sites use it, and when they do, does the markup carry anything an engine could lift into an answer.
Common questions
What is service schema markup?
Service schema markup is JSON-LD or microdata declaring a node of the schema.org type Service, which that vocabulary defines as a service provided by an organization, e.g. delivery service, print services, etc. The type carries 22 properties of its own, including provider, areaServed, serviceType, offers and hasOfferCatalog, and inherits name, description and url from Thing. Seven more specific types inherit from it, among them FinancialProduct, GovernmentService and TaxiService.
Does Service schema produce a rich result in Google?
No. Google's gallery of supported structured data features listed 25 features on 15 June 2026 and Service is not one of them. Google does not say it ignores the type: its introduction to structured data, last updated 10 December 2025, says attributes it does not require may be useful for other search engines, services, tools, and platforms, and that some may enable future Search features. So the type earns no documented result today and is not documented as discarded either.
How common is Service schema markup on home pages?
Uncommon. Of the 616 home pages Lantad found carrying parseable JSON-LD on 7 October 2026, 20 declared a Service node, which ranks the type thirtieth of 147 distinct types in that set. Organization appeared on 411 of the same pages and LocalBusiness on 60. Five of the 20 sites were in this corpus's Webflow stratum and three in its WordPress small business stratum, both heavy in trades and professional practices.
Does the service name have to appear on the page?
Google's structured data general guidelines, last updated 10 July 2026, say not to mark up content that is not visible to readers of the page, and list content hidden from the user among the reasons structured data may not be used. On 7 October 2026 Lantad found 32 of 89 service names, across 10 of 20 sites, appearing nowhere in the text the crawler was served, usually because the name existed only as the itemOffered of an Offer inside a JSON-LD block.
See what AI can read on your site
Run a free scan and get a graded report of exactly what AI crawlers can and cannot read, with ranked fixes.