Guides · Technical
Published · 10 min
The schema markup guide
Structured data tells Google what a page is about in a format it can read without guessing. This guide covers the types that still matter for a London business, the two that stopped earning anything in 2026, how to write them in JSON-LD and how to test them without inventing a single review.
On this page
- What schema markup is, and what it is not
- The types that matter for a London business
- The two types that stopped paying their way
- Worked example: a dental practice in Clapham
- Service, Article and Person: the connective tissue
- Adding it on the platforms London businesses actually use
- Testing, and keeping it honest
- What to do next
Short answer. Put Organization (or a LocalBusiness subtype such as Dentist or Restaurant) on your home or contact page, Service on each service page, Article on guides, BreadcrumbList on every page and Person on team profiles. Write it as JSON-LD, test it in the Rich Results Test and the Schema Markup Validator, and keep it to facts a visitor can see on the page. Do not add FAQPage or HowTo expecting a rich result: Google stopped showing both. Never mark up your own reviews. Details and sources below.
What schema markup is, and what it is not
Schema markup is structured data: a block of code that labels the facts on a page using the shared vocabulary at Schema.org. A human reads "Open Monday to Friday, 9 to 6" in your footer. A crawler reads openingHoursSpecification with opens and closes values and does not have to guess.
Google’s own guidelines list three formats and mark one as JSON-LD (recommended); Microdata and RDFa are also accepted. JSON-LD sits in a single script tag, separate from your HTML, which is why it is easier to generate, maintain and test. Everything in this guide uses it.
Two things schema will not do. It will not lift a page’s ranking on its own: Google’s introduction to structured data describes it as a way to understand page content and enable search features, not as a ranking lever, and neither we nor anyone else should promise otherwise. And it will not rescue a slow site or a thin page. Treat it as hygiene that makes an already good page easier to understand.
The same guidelines carry two rules that decide whether your markup helps or harms. First, do not mark up content that is not visible to readers of the page. Second, do not mark up irrelevant or misleading content, with fake reviews given as the example. A page with a structured data issue can receive a manual action; Google says that action removes rich-result eligibility rather than changing the page’s ranking in web search, but it is still a Search Console red flag you will have to clear.
The types that matter for a London business
Most London service businesses need five or six types, not fifty. The table lists the ones we add for clients and for this site, where each one goes and what Google’s documentation says it can do.
| Type | Where it goes | What it does | Note |
|---|---|---|---|
| Organization or ProfessionalService | Home page, once | Describes the company: name, legal name, logo, address, phone, sameAs profiles, founders, parent company | Google recommends placing it on your home page and lists properties such as logo, sameAs, contactPoint, iso6523Code and vatID |
| LocalBusiness subtype (Dentist, Restaurant, LegalService, RealEstateAgent, Plumber, HairSalon and so on) | The location or contact page; one per physical location | Describes a place customers visit: address, geo, hours, phone, price range | Google requires name and address; geo coordinates need at least five decimal places |
| Service | Every service page | Names the offering, its provider, its service type and the area served | No rich result of its own; it links the page to your Organization node so the entity graph is complete |
| Article | Guides, blog posts, case studies | Headline, author, publisher, published and modified dates, images | Google notes there is no markup requirement for Top stories; the markup makes authorship and dates explicit |
| BreadcrumbList | Every page below the home page | Describes the trail (Home, Services, Local SEO) | Eligible for the breadcrumb rich result shown under a result’s title |
| Person | Team profiles, author pages | Name, job title, employer, photo, LinkedIn | Supports the "who wrote this" question that Google’s helpful-content guidance asks of every page |
| WebSite | Home page | Names the site and its publisher | Ties pages to one site; the sitelinks search box markup it used to carry has been retired by Google |
| Product with Offer | Product pages | Price, availability, images, brand | Eligible for product snippets and merchant listings; retail only |
| Event | Event pages | Date, venue, tickets | Eligible for the event rich result; useful for venues, galleries and training providers |
Choosing the subtype matters more than people expect. A Brixton estate agent is a RealEstateAgent, not a generic LocalBusiness; a Soho restaurant is a Restaurant, which unlocks menu and cuisine properties; a Hatton Garden jeweller is a JewelryStore. The Schema.org LocalBusiness page lists the subtypes. Google’s guidance is to use the most specific one that fits, and to give several as an array when a business is genuinely two things.
Get your free SEO auditA person checks your structured data along with the rest of your site and sends you the three fixes that matter within two working days. Three fields, no call required.
The two types that stopped paying their way
Older guides (and many agency proposals) still sell FAQ and How-to markup as quick wins. Both features are gone.
| Type | What happened | Source | What to do now |
|---|---|---|---|
| FAQPage | Google added a deprecation notice on 8 May 2026 saying the FAQ rich result "will no longer appear in Google Search starting May 7, 2026", then removed the documentation in June 2026 | Google Search Central updates | Keep it only as an accurate description of a page that genuinely has questions and answers; expect no rich result. This site still emits it for that reason and claims nothing for it |
| HowTo | Google removed the How-to structured data documentation because the rich result is no longer shown on desktop or mobile | Google Search Central updates | Remove it; write the steps as an ordered list the reader can see |
| Review and AggregateRating about yourself | Never eligible: Google’s guidelines say pages are ineligible for the star feature when the entity being reviewed controls the reviews about itself | Review snippet guidelines | Do not paste your Google rating into LocalBusiness or Organization markup. Stars on your own site about your own business earn nothing and invite a structured data manual action |
The review rule catches a lot of London businesses. A Shoreditch restaurant that copies "4.8 from 312 reviews" from its Google Business Profile into its own site markup is marking up reviews it controls the display of. Google says that makes the page ineligible for the star feature, and the structured data policy above says misleading markup can bring a manual action. Our own code of ethics rules it out for every client, and this site carries no rating markup at all for the same reason.
Worked example: a dental practice in Clapham
Here is how we would mark up a single-site dental practice on Clapham High Street. Every value comes from something a visitor can see on the page or verify in the real world, and every value matches the practice’s Google Business Profile, whose guidelines say the name should reflect your business’s real-world name as used on the storefront and stationery. If the signage says "Clapham Smile Dental", the markup, the footer and the profile all say "Clapham Smile Dental", not "Best Dentist Clapham SW4".
| Property | Value | Why |
|---|---|---|
| @type | Dentist | The most specific LocalBusiness subtype; Google asks for the most specific one |
| name | The trading name exactly as on the signage | Must match the Google Business Profile and the footer |
| address | PostalAddress with streetAddress, addressLocality "London", postalCode "SW4 ...", addressCountry "GB" | Required by Google alongside name |
| geo | GeoCoordinates with latitude and longitude to five decimal places, taken from the pin in Google Maps | Google requires at least five decimal places of precision |
| telephone | +44 20 ... | International format with country and area code, as Google’s example shows |
| openingHoursSpecification | dayOfWeek array, opens "09:00", closes "18:00"; a second entry for Saturday if different | Reflects the hours printed on the page; use validFrom and validThrough for seasonal closures |
| url | The practice’s canonical home page | One working URL per location |
| image | A photo of the front of the practice | Recommended for local results |
| priceRange | "££" or omitted | Optional; keep under 100 characters |
| sameAs | Google Business Profile URL, Instagram, General Dental Council register page | Connects the entity to its public profiles |
| hasMap | Google Maps link | Helps machines and people find the door |
A practice with a second site in Balham gets a second LocalBusiness node on its own location page. Google’s guidance is to define each location as its own LocalBusiness, and to use the department property only for a department inside one building that keeps different hours or a different phone number. That is also how the Google Business Profile should be set up: one profile per location, which our Google Business Profile service handles alongside the markup, and which our local SEO work depends on.
Service, Article and Person: the connective tissue
The LocalBusiness or Organization node is the hub. The other types point back to it with an @id, so Google sees one entity rather than a dozen unconnected blocks. On this site every page carries the same Organization identifier, and Service.provider, Article.publisher and Person.worksFor all reference it. That is the single most useful habit in this guide.
- Service
- name ("EICR testing"), serviceType, description, url, provider (the Organization @id) and areaServed as Place values ("London", or the boroughs you actually cover). A Croydon electrician with twelve service pages gets twelve Service nodes, each on its own page, none claiming an area the business does not serve.
- Article
- headline, description, datePublished, dateModified, image, author and publisher. Google’s Article documentation shows images supplied in 16x9, 4x3 and 1x1 crops and asks for author.name with an author.url where one exists. The author must be the person who wrote or reviewed the piece. Guides on this site are authored by the organisation unless a named person actually wrote them.
- Person
- name, jobTitle, image, worksFor (the Organization @id) and sameAs for a LinkedIn profile. Put it on team and author pages, never on pages about people who do not work for you. Our team page is built this way.
- BreadcrumbList
- An itemListElement array of ListItem values with position, name and item URL, matching the visible breadcrumb trail. Every page below the home page gets one.
Adding it on the platforms London businesses actually use
| Platform | Where the markup usually comes from | What goes wrong |
|---|---|---|
| WordPress | An SEO plugin outputs Organization or Person, Article and BreadcrumbList; LocalBusiness often needs the plugin’s local module or a hand-written block | Theme and plugin both emit Organization, so the page carries two conflicting company nodes; the plugin’s "Person" site type is chosen for a company |
| Shopify | The theme emits Product, Organization and BreadcrumbList; apps add more | Three apps each add Product markup with different prices; review apps add self-serving AggregateRating to the store |
| Squarespace, Wix and similar | Built in, with limited control | LocalBusiness fields left blank or filled with a marketing name rather than the real one |
| Custom builds (Next.js, Laravel, Rails) | A JSON-LD script generated from the same data that renders the page | Hand-pasted blocks drift from the visible content when the page changes |
The custom-build row is the pattern we recommend wherever it is possible: generate the markup from the same record that produces the visible page, so a change to opening hours changes the footer and the JSON-LD together. This site works that way; one business-facts file feeds the footer, the contact page and every schema block. If you run WordPress or Shopify, the practical equivalent is to let one plugin own the markup, switch the others off and audit the output rather than assuming it.
Testing, and keeping it honest
Two testers, two jobs. The Rich Results Test tells you whether a page is eligible for Google’s rich results and flags errors in the types Google uses. The Schema Markup Validator checks the markup against the Schema.org vocabulary itself, which catches mistakes in types Google does not show, such as Service. Run both on a live URL, not just on pasted code, because plugins and tag managers change what ships.
After launch, Search Console’s enhancement reports list the pages with valid, warned and errored items for each eligible type, so a broken deployment shows up within days. Pair that with a quarterly check of the pages that carry LocalBusiness, because hours, phone numbers and names change and the markup rarely gets told.
- Every value in the markup appears on the page a visitor sees.
- One Organization node per site, referenced by @id from every Service, Article and Person.
- The business name matches the signage, the footer and the Google Business Profile exactly.
- No Review or AggregateRating markup about your own business, anywhere.
- No FAQPage or HowTo added in the hope of a rich result; keep FAQPage only where it describes the page honestly.
- Both validators pass on the live URL on desktop and mobile.
- A named person owns the quarterly check.
What to do next
If your site has no structured data, start with Organization or your LocalBusiness subtype and BreadcrumbList this week; they take an afternoon. Add Service to your service pages and Article to your guides next. Then stop. More markup is not better markup, and every block you add is one more thing that has to stay true.
If you would like a second pair of eyes, the free SEO audit includes a structured data check as part of the technical pass, written by a person, with the three fixes that matter most. Structured data is also part of our technical SEO service and sits inside every SEO engagement from the first month. Not ready to talk? Score your own site in five minutes.
Sources
14 sources · accessed 9 Oct 2026
Questions
5 questions