How to Do Schema Markup: A Step-by-Step Workflow

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.

Step 1: Decide Which Schema Type You Actually Need

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.

Step 2: Gather the Required Properties for That Type

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.

Step 3: Write Your JSON-LD Block

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.

Nesting Multiple Types

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.

Step 4: Use a Plugin If You Are on WordPress

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.

Prefer the guided path? This is one lesson from the Advanced Schema course — get the complete step-by-step system with every lesson and template.
Explore the course →

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.

Step 5: Validate Before You Deploy

Validation is non-negotiable. Two tools cover the full picture:

  • Google Rich Results Test (search.google.com/test/rich-results) — tests whether your markup qualifies for a rich result and flags any errors or warnings Google sees. Paste your URL or paste the raw HTML. Look at both the “Detected items” panel and any warnings — warnings do not break eligibility but they signal missing recommended properties.
  • Schema Markup Validator (validator.schema.org) — tests against the full Schema.org vocabulary, not just what Google supports. Use this when you are implementing a type that Google does not officially support for rich results, because the Rich Results Test will simply say “no rich result detected” without telling you if the markup is structurally correct.

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.

Step 6: Deploy the Markup to Your Pages

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.

Step 7: Request Indexing and Confirm in Search Console

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.

Step 8: Monitor Rich Result Performance in Search Console

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.

Common Schema Markup Mistakes to Avoid

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.

  • Do not hide schema content from users — every property value must be visible on the page or clearly implied by it.
  • Do not aggregate ratings you do not have — only use aggregateRating if there are real, verifiable reviews.
  • Do not apply FAQPage to pages where the Q&A is behind a login or is not readable in the HTML source.
  • Do update schema when you update content — a dateModified property that is months behind the actual last edit is a trustworthiness signal to crawlers.

Frequently Asked Questions

What is the difference between JSON-LD, Microdata, and RDFa?

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.

Does schema markup directly improve my Google rankings?

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.

How do I know which schema type to use for my page?

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.

Can I use multiple schema types on the same page?

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.

How long does it take for schema markup to appear in search results?

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.

What happens if my schema has errors — will it hurt my site?

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 Samuels
Written by Terry Samuels

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.

Ready to master this?

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.