Schema markup is structured data you add to a web page so search engines — and AI systems like Google’s AI Overviews, ChatGPT, and Perplexity — can understand exactly what the page is about, not just guess from keywords. To implement it, you choose the right Schema.org type, write a JSON-LD block, validate it, drop it into your page, and monitor how it performs in Search Console.
The workflow is the same whether you are marking up a how-to guide, a local business, a product page, or a course listing. Once you do it a few times it becomes second nature. The steps below are the exact process the team at Salterra uses when onboarding a new client site — we will walk through each one in plain terms so you can replicate it immediately.
The Schema.org vocabulary has hundreds of types, but most sites live and die by a handful: Article, FAQPage, HowTo, LocalBusiness, Product, Review, BreadcrumbList, and Person. Start there before diving into obscure subtypes.
Match the type to the page’s primary content purpose. A blog post explaining a process is a HowTo or Article. A page with Q&A content qualifies for FAQPage. A location page for a service business should use LocalBusiness (or its subtype, like ProfessionalService). If the page serves multiple purposes — say, a product page with reviews — you can nest multiple schema types in one JSON-LD block.
The fastest way to pick the right type: look at what Google’s Rich Results Test reports as eligible for rich results on pages similar to yours. If competitor pages are winning review stars or FAQ dropdowns in the SERP, that is your signal about which type earns a visual enhancement. Not every schema type earns a rich result, but all of them feed entity understanding to AI systems, so even “invisible” schema has value.
Every schema type has required properties (must include), recommended properties (should include for rich results), and optional properties. Before writing a single line of JSON-LD, look up the type on schema.org and Google’s developer documentation for that specific type — Google’s required/recommended list sometimes differs from the base schema.org spec.
For example, FAQPage requires a mainEntity array of Question objects, each with a name (the question text) and an acceptedAnswer containing text (the answer). Miss either and the markup is invalid. For LocalBusiness, you need at minimum name, address, and telephone; add geo, openingHours, and aggregateRating to unlock richer display options.
Write out a simple checklist before coding anything: type, required properties, recommended properties, any nested types. This one-minute planning step prevents you from shipping incomplete markup that fails validation.
JSON-LD (JavaScript Object Notation for Linked Data) is the format Google recommends. It lives in a <script type=”application/ld+json”> tag and does not require you to interweave markup with your HTML — a massive advantage over Microdata and RDFa.
A minimal Article schema looks like this pattern: a @context set to https://schema.org, a @type of Article, a headline matching your H1, an author object with @type: Person and the author’s name, a publisher object referencing your organization, and datePublished. Every property value must be accurate — schema is not for stuffing keywords; it is for stating facts about the page.
Keep your JSON valid. Missing a closing brace, using a trailing comma, or forgetting to escape a quote inside a string will break the entire block silently. Paste your JSON into jsonlint.com before you even validate the schema itself — catch syntax errors first, then semantic errors.
You can include multiple schema blocks on the same page by either writing separate <script> tags or wrapping them in a JSON-LD array using @graph. The @graph pattern is cleaner and lets different objects reference each other by ID. For example, your WebPage can reference the BreadcrumbList and the Article as part of a single interconnected graph, which gives AI search engines a richer entity map of the page.
Hand-coding JSON-LD is the right way to learn the format, but for client sites running WordPress, a dedicated plugin handles the heavy lifting without removing your control. The three plugins the Salterra team uses and evaluates regularly are SEOPress, Rank Math, and Yoast SEO.
SEOPress Pro has the most granular schema builder — you can create custom schema types with dynamic variables that pull from post meta, author data, or WooCommerce fields. Rank Math auto-generates schema for posts, products, and local businesses based on your settings, and layers it with their breadcrumb and review markup. Yoast outputs a clean @graph structure by default and is the most conservative choice if you want predictable, well-tested output.
The plugin handles the <script> tag injection and keeps schema in sync when you update post content. The tradeoff: you are dependent on the plugin’s output logic, which sometimes produces redundant or slightly wrong properties. Always validate the live output — do not assume the plugin is generating valid schema just because the settings look right.
Validation is non-negotiable. Two tools cover the full picture:
A clean validation means zero errors and ideally zero warnings. If you see an error like “The property X is not recognized by Google for an object of type Y,” you either named a property wrong or used it on the wrong type. Fix the underlying JSON before moving on — do not deploy broken markup and plan to fix it later.
Once validated, deploy. On WordPress with a plugin, this is automatic — publish the post or save the schema settings. For hand-coded implementations, paste the <script type=”application/ld+json”> block inside the <head> of the page (preferred location) or just before the closing </body> — both work. Google reads JSON-LD anywhere on the page, but <head> is convention and avoids render-blocking concerns.
If you manage schema centrally — for instance, a sitewide Organization or WebSite block — inject it via your site’s header template so it appears on every page without manual effort. Sitewide schema like SearchAction (sitelinks search box) and Organization (with logo and social profiles) should live at the root level, not buried inside individual post templates.
For large sites with thousands of pages, avoid duplicate schema blocks. Audit your template logic to confirm that schema injected at the post-type level does not conflict with schema injected by a plugin. Double-firing the same type with different data confuses crawlers and can trigger manual action in edge cases.
After deploying, fetch the page in Google Search Console using the URL Inspection tool and request indexing. This prompts Googlebot to recrawl the page and pick up the new markup. For large-scale schema deployments across many pages, submitting an updated sitemap accomplishes the same thing at scale.
Once the page is recrawled, the URL Inspection tool will show detected structured data under the “Enhancements” section. Confirm that Google detected the type you intended and that there are no new errors introduced by the live version of the page (plugin output on staging versus production can sometimes differ).
For ongoing monitoring, check the Enhancements reports inside Search Console — each schema type that earns a rich result gets its own report showing valid items, warnings, and errors across all pages using that type. Set a reminder to review these monthly. Schema errors often appear quietly after a theme update, plugin update, or content migration breaks the template logic.
Schema is not a one-and-done task. After implementation, open the Performance report in Search Console and filter by “Search Appearance” to isolate rich result impressions and clicks. Compare click-through rates on pages with rich results versus plain blue links — the difference is often material, especially for FAQ dropdowns and How-To step cards.
In the AI-search era, structured data does additional work beyond rich results. AI Overviews and third-party AI assistants pull entity data from schema to populate knowledge panels, citations, and direct answers. A well-marked-up page that names its author with a Person schema block, connects that author to an Organization, and marks its content with the correct content type is far more likely to surface as a citable entity in AI-generated responses than an unstructured page covering the same topic.
Track whether your schema types correlate with visibility changes in AI Overview appearances — you can see these in the Search Console Performance report as a separate search appearance filter. This is a relatively new data point but increasingly important for understanding your organic footprint.
The most frequent error we see on new client audits is mismatched content — schema that describes something different from what is on the page. Marking a page as a Product when there is no product for sale, or using a Review type for a non-review article, is against Google’s guidelines and risks a manual penalty for misleading markup. Always validate that the schema accurately represents the visible page content.
The second most common mistake is incomplete required properties. A LocalBusiness block without a street address, or a HowTo block without steps, will not validate and will not earn a rich result. Use the Rich Results Test’s error output as a checklist rather than dismissing warnings.
All three are ways to add schema markup to a page, but JSON-LD is a separate script block that does not touch your HTML structure, while Microdata and RDFa are embedded directly into your HTML tags as attributes; Google recommends JSON-LD because it is easiest to implement and maintain without risking layout breakage.
Schema is not a direct ranking factor, but it earns rich results (FAQ dropdowns, star ratings, How-To steps) that significantly increase click-through rate, and it feeds entity understanding that can improve how AI search systems cite and surface your content — both of which translate to more organic traffic.
Match the type to the page's primary content purpose — use HowTo for process walkthroughs, FAQPage for Q&A content, Article for editorial posts, LocalBusiness for location pages, and Product for e-commerce pages — then cross-check against Google's rich results documentation to confirm that type is eligible for visual enhancements in search.
Yes — you can include multiple JSON-LD script blocks or use the @graph pattern to combine related types in one block; for example, a blog post commonly uses both Article and BreadcrumbList, and a local business page might combine LocalBusiness with FAQPage and Review markup.
After deploying and requesting indexing via Google Search Console, most pages are recrawled within a few days to a few weeks; once Googlebot picks up the markup and it passes validation, rich results can appear in search within days of the recrawl, though rollout across all data centers may take a bit longer.
Errors in schema markup usually mean Google ignores that block rather than penalizing the page, so the most common outcome of invalid schema is simply no rich result; however, deliberately misleading markup (fake reviews, wrong content types, hidden content) can trigger a manual action, so the key rule is that every schema property must accurately describe what is actually on the page.
Terry has 30+ years in software and SEO. He’s the founder of Salterra Digital Services and SEO Spring Training, host of the Roundtable SEO Mastermind, and lead instructor at SEO University — teaching the exact tactics his team uses on client work.
This guide is one lesson from the Advanced Schema course. Get every lesson, framework and checklist — plus the full 38-course catalog — inside SEO University.
Practitioner-focused training across the full digital marketing stack — from technical SEO to conversion optimization and the AI search era. By Salterra Digital Services, since 2011.