There's a big difference between a site that looks professional and a site that Google understands is professional. For Google, the difference is called structured data. And the standard the whole web uses to write it is called Schema.org.
Schema.org is vocabulary. It's a set of types (Restaurant, Article, Product, LocalBusiness, FAQPage, and 800 more) that describes what's on a page using labels Google, Bing, and AI models can read and use. In return, your business gets featured in rich results — those enhanced cards that appear at the top of Google search with stars, prices, hours, expanded FAQs.
Without schema, you're a page of text. With schema, you're a five-star restaurant, open until 11pm, on Rua das Flores. The difference in CTR is measurable and brutal.
How Google uses schema in practice
When someone searches in Lisbon for "Italian restaurant Chiado", Google has three sources of information about your restaurant:
- Page content — words, images, links.
- Google Business Profile — claimed profile, photos, reviews, hours.
- Structured data (Schema.org) — vocabulary that confirms exactly what you are, where, when, and how.
The three are weighed against each other. If GBP says one thing and schema says another, Google gets confused and tends to favor GBP. When the three align, you rank much higher — not because schema is a magic boost, but because Google gains enough confidence to show you with rich results.
And rich results boost CTR. Average organic search (no rich results) has ~5% CTR at position 1. With schema properly implemented and rich results active, it climbs to 10-15%. In some niches (recipes, FAQs, events), it reaches 25%.
Schema.org is not technical decoration. It's the contract that tells Google: "what you're seeing really is what it looks like, and you have permission to highlight it".
The five most valuable types for businesses in Portugal
Over 800 types exist. But in practice, five cover 90% of cases for small and mid-sized businesses in Portugal.
1. LocalBusiness (and subtypes)
For any business with a physical address. Confirms to Google the name, address, phone, hours, area served, price range.
{
"@context": "https://schema.org",
"@type": "LocalBusiness",
"name": "Atelier Bernardo",
"image": "https://example.pt/storefront.jpg",
"address": {
"@type": "PostalAddress",
"streetAddress": "Rua da Escola Politécnica 50",
"addressLocality": "Lisboa",
"postalCode": "1250-101",
"addressCountry": "PT"
},
"telephone": "+351 213 456 789",
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
"opens": "11:00",
"closes": "19:00"
}
],
"priceRange": "€€"
}
Specialized types worth using when applicable: Restaurant, BeautySalon, HairSalon, Dentist, MedicalBusiness, Store, ProfessionalService, LegalService. Each one has extra useful fields (e.g., Restaurant has servesCuisine).
2. Restaurant (subtype of LocalBusiness)
For restaurants. Adds everything LocalBusiness has, plus:
{
"@type": "Restaurant",
"servesCuisine": ["Portuguese", "Mediterranean"],
"menu": "https://example.pt/menu",
"acceptsReservations": true,
"hasMenu": {
"@type": "Menu",
"hasMenuSection": [
{
"@type": "MenuSection",
"name": "Starters",
"hasMenuItem": [
{
"@type": "MenuItem",
"name": "Cod fish pataniscas",
"offers": { "@type": "Offer", "price": "8.50", "priceCurrency": "EUR" }
}
]
}
]
}
}
Note: hasMenu is work. For many restaurants, the base LocalBusiness + Restaurant without a detailed menu is enough.
3. FAQPage
For any page with question-answer pairs. Activates the accordion expansions in Google.
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "Do you take online reservations?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Yes, you can book online any day except Sunday."
}
},
{
"@type": "Question",
"name": "Do you have vegetarian options?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Yes, every section of our menu has at least one vegetarian option."
}
}
]
}
Tip: only use FAQPage on pages where you actually have Q&A. Sprinkling it across every page is spam and Google penalizes it.
4. Article (and BlogPosting)
For any editorial article. Identifies the author, publication date, hero image, and the publisher (your brand).
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "How much does a website cost in Portugal in 2026",
"datePublished": "2026-05-09",
"dateModified": "2026-05-09",
"author": {
"@type": "Person",
"name": "Mauricio Amaro"
},
"publisher": {
"@type": "Organization",
"name": "Black Bean™ Digital Agency"
},
"image": "https://example.pt/og-image.png"
}
5. Product (and Offer)
For any product page. Confirms name, brand, price, availability, rating.
{
"@type": "Product",
"name": "Stró lounge chair",
"image": "https://example.pt/chair.jpg",
"brand": { "@type": "Brand", "name": "Stró" },
"offers": {
"@type": "Offer",
"url": "https://example.pt/product/chair-stro",
"priceCurrency": "EUR",
"price": "489.00",
"priceValidUntil": "2026-12-31",
"availability": "https://schema.org/InStock"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.7",
"reviewCount": "32"
}
}
How to test what you have
Three free tools:
- Rich Results Test — tests a specific URL. Tells you if there's schema, what type, and whether there are errors.
- Schema Markup Validator — tests pure syntax without Google's opinion on rich results.
- Search Console > Enhancements — once your site is verified, you see a report of detected schema types and errors.
We recommend running the Rich Results Test on three representative pages every time you change something significant.
Where to put the schema
Two valid approaches:
- JSON-LD inside a
<script>in the<head>(recommended, Google prefers it) - Inline microdata in the HTML (legacy, more fragile, harder to debug)
Always go JSON-LD. In modern systems (Next.js, Astro, etc.), generating per-page JSON-LD is one line of code. In WordPress, there are plugins (Rank Math, Yoast SEO Premium) that do it automatically — but always validate the output.
The most common mistakes we see in Portugal
- Plugin-generated schema without review. Most WordPress sites we audit have auto-generated schema with wrong fields or pointing to the wrong pages.
LocalBusinesswithout hours. MissingopeningHoursSpecificationinvalidates half the benefits.ProductwithoutpriceValidUntil. Google wants to know how long the price is valid. Without it, you get a warning and lose rich results.ArticlewithoutdateModified. Without this, Google thinks the content is as old as its first publication. Regular updates needdateModified.FAQPageon pages that don't have FAQs. Google's algorithm has penalized this since 2023.
What if you don't know how to implement it?
Schema is part of our SEO service and part of the foundations of every new site we deliver (included in Signature and Tailored at no extra cost). If you already have a site and just want an audit + implementation, get in touch — two hours of audit, fix in 3-6 hours depending on the number of types.
Most sites in Portugal either don't have schema or have it badly. Done well, it's a competitive advantage that costs little to obtain and lasts for years. It's the cheapest SEO work out there in return per hour of effort.