{"id":1755,"date":"2026-06-02T09:17:23","date_gmt":"2026-06-02T09:17:23","guid":{"rendered":"https:\/\/rblog.it\/en\/?p=1755"},"modified":"2026-06-02T09:17:23","modified_gmt":"2026-06-02T09:17:23","slug":"schema-markup-wordpress-guide","status":"publish","type":"post","link":"https:\/\/rblog.it\/en\/seo\/schema-markup-wordpress-guide\/","title":{"rendered":"Schema Markup on WordPress: A Practical Guide"},"content":{"rendered":"<p><strong>Schema markup<\/strong> is structured data you add to a page so search engines understand it precisely \u2014 not just the words, but what they mean. On WordPress, adding it is more straightforward than most guides suggest. This tutorial covers what schema markup is, which types actually matter, three ways to add it on WordPress, and how to test that it works.<\/p>\n<h2>What schema markup is<\/h2>\n<p>A search engine reading a normal web page sees text and guesses. It sees &#8220;4.8&#8221; near &#8220;reviews&#8221; and infers a rating. Schema markup removes the guessing. It is a standardized vocabulary \u2014 from <a href=\"https:\/\/schema.org\" rel=\"noopener\">schema.org<\/a> \u2014 that labels content explicitly: <em>this is a rating, this is an author, this is a price, this is an event date<\/em>.<\/p>\n<p>The labels are written in <strong>JSON-LD<\/strong>, a small block of structured code placed in the page. JSON-LD is the format Google recommends, because it sits separately from the visible content and is easy to add and maintain. You do not rewrite the page \u2014 you add a description of it that machines can read.<\/p>\n<h2>Why schema markup matters<\/h2>\n<p>Schema markup is not a direct ranking factor. Adding it does not push a page up by itself. What it does is change how the page can appear and be understood, and that matters more each year.<\/p>\n<p>First, it unlocks <strong>rich results<\/strong> \u2014 the enhanced listings in search with star ratings, FAQ dropdowns, recipe details, or event dates. These take more space and earn more attention than a plain blue link. Second, schema helps search engines and AI systems read a page with confidence. As <strong>AI Overviews<\/strong> and generative answers pull from pages directly, clearly labeled content is easier to quote correctly. Schema is part of solid technical <a href=\"https:\/\/rblog.it\/en\/seo\/seo-online-marketing-business\/\">SEO for business<\/a> \u2014 it makes the rest of your work legible.<\/p>\n<figure class=\"rblog-img-placeholder\">\n<div style=\"background:#f3f4f6;padding:40px;text-align:center;border:2px dashed #999;\"><strong>[IMG da inserire]<\/strong><br \/>a search result with a rich snippet showing star ratings and an FAQ dropdown, beside a plain result for comparison<\/div>\n<\/figure>\n<h2>Which schema types you actually need<\/h2>\n<p>Schema.org defines hundreds of types. Most sites need only a handful.<\/p>\n<ul>\n<li><strong>Article:<\/strong> for blog posts and news content \u2014 marks the headline, author, and dates.<\/li>\n<li><strong>FAQPage:<\/strong> for pages with a real question-and-answer section. It can produce expandable FAQ results.<\/li>\n<li><strong>BreadcrumbList:<\/strong> shows the page&#8217;s place in the site hierarchy in search results.<\/li>\n<li><strong>LocalBusiness:<\/strong> for a business with a physical location \u2014 name, address, hours. Essential for <a href=\"https:\/\/rblog.it\/en\/seolocal\/local-seo-benefits\/\">local SEO<\/a>.<\/li>\n<li><strong>Product:<\/strong> for e-commerce pages \u2014 price, availability, and reviews.<\/li>\n<li><strong>Organization:<\/strong> site-wide identity markup \u2014 your business name, logo, and profiles.<\/li>\n<\/ul>\n<p>Start with the two or three that match your content. A blog needs Article and BreadcrumbList; a local business adds LocalBusiness; a shop adds Product. Do not mark up types you do not genuinely have.<\/p>\n<h2>How to add schema markup on WordPress<\/h2>\n<p>There are three ways to do this, from easiest to most technical. Most sites should use the first.<\/p>\n<h3>Method 1 \u2014 An SEO plugin (recommended for most sites)<\/h3>\n<p>The major WordPress SEO plugins \u2014 Rank Math, Yoast, and others \u2014 generate schema markup automatically. Once active, they output Article, Breadcrumb, and Organization schema for the right page types with no manual code.<\/p>\n<ol>\n<li>Install and activate your SEO plugin of choice.<\/li>\n<li>Open its schema or structured-data settings.<\/li>\n<li>Set the default schema type per content type \u2014 usually Article for posts.<\/li>\n<li>For specific pages, use the plugin&#8217;s per-page schema control to add types like FAQPage.<\/li>\n<\/ol>\n<p>This covers what most sites need and updates the schema automatically when content changes. It is the lowest-effort, lowest-risk option.<\/p>\n<h3>Method 2 \u2014 A dedicated schema plugin<\/h3>\n<p>If you need schema types your SEO plugin does not handle well, a dedicated structured-data plugin gives finer control \u2014 more types, conditional rules, and custom fields. The trade-off is another plugin to maintain, and a risk of <strong>duplicate schema<\/strong> if it overlaps with your SEO plugin. Use one or the other for a given type, never both.<\/p>\n<h3>Method 3 \u2014 Manual JSON-LD<\/h3>\n<p>For full control, you can write JSON-LD by hand and insert it into the page header. This suits developers and unusual cases. The basic shape of an Article block looks like this:<\/p>\n<pre><code>&lt;script type=\"application\/ld+json\"&gt;\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@type\": \"Article\",\n  \"headline\": \"Your article title\",\n  \"author\": { \"@type\": \"Person\", \"name\": \"Author name\" },\n  \"datePublished\": \"2026-06-02\"\n}\n&lt;\/script&gt;<\/code><\/pre>\n<p>Manual markup is precise but you own the maintenance \u2014 if a date or title changes, you update the code. For most WordPress sites, the plugin route is the better choice.<\/p>\n<h2>How to test your schema markup<\/h2>\n<p>Never assume schema works because a plugin is active. Test it.<\/p>\n<p>Use Google&#8217;s <strong>Rich Results Test<\/strong>: paste a live URL and it shows which schema types Google detected and whether any are eligible for rich results. The <strong>Schema Markup Validator<\/strong> from schema.org checks the syntax more broadly. After your site has run for a while, the <strong>Enhancements<\/strong> section of Google Search Console reports schema errors across all pages at once.<\/p>\n<p>Check a sample page of each type after setup, then review Search Console monthly. Schema breaks quietly \u2014 a theme update or plugin change can introduce errors you will not see without testing.<\/p>\n<h2>Common schema markup mistakes<\/h2>\n<p>A few errors show up repeatedly. <strong>Marking up invisible content<\/strong> \u2014 adding FAQ schema for questions not actually on the page \u2014 breaks Google&#8217;s guidelines and can cost you the rich result. <strong>Duplicate schema<\/strong> from two plugins outputting the same type confuses search engines. <strong>Incomplete required fields<\/strong> mean the markup validates but never earns a rich result. And <strong>stale markup<\/strong>, where the schema still shows an old price or date, misleads both engines and users. Keep schema honest, single-sourced, and current.<\/p>\n<h2>FAQ<\/h2>\n<h3>Does schema markup improve rankings directly?<\/h3>\n<p>No. Schema markup is not a direct ranking factor. It helps indirectly by enabling rich results, which improve visibility and click-through, and by helping search engines understand a page accurately.<\/p>\n<h3>Which is better, JSON-LD or microdata?<\/h3>\n<p>JSON-LD is the format Google recommends. It sits separately from visible content, is easier to add and maintain, and is what every major WordPress SEO plugin outputs. Microdata, woven into the HTML, is older and harder to manage.<\/p>\n<h3>Do I need a plugin to add schema on WordPress?<\/h3>\n<p>Not strictly \u2014 you can write JSON-LD manually \u2014 but a plugin is the practical choice for most sites. The major SEO plugins generate the common schema types automatically and keep them updated as content changes.<\/p>\n<h3>How do I know if my schema markup is working?<\/h3>\n<p>Test a live URL with Google&#8217;s Rich Results Test, which shows detected types and rich-result eligibility. For ongoing monitoring, check the Enhancements section of Google Search Console, which flags schema errors across the whole site.<\/p>\n<h2>Where to go next<\/h2>\n<p>For most WordPress sites, the path is short: pick an SEO plugin, enable Article and Breadcrumb schema, add FAQPage where you have real Q&#038;A, and test a sample page with the Rich Results Test. Avoid duplicate markup, never label content that is not on the page, and review Search Console monthly. Done cleanly, schema markup makes your pages easier for both search engines and AI answers to read and quote.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Schema markup is structured data you add to a page so search engines understand it precisely \u2014 not just the words, but what they mean. On WordPress, adding it is more straightforward than most guides suggest. This tutorial covers what [&hellip;]<\/p>\n","protected":false},"author":8,"featured_media":1754,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_wds_title":"","_wds_metadesc":"","_wds_focus-keywords":"","_wds_canonical":"","sync_status":"none","episode_type":"","audio_file":"","podmotor_file_id":"","podmotor_episode_id":"","castos_file_data":"","cover_image":"","cover_image_id":"","duration":"","filesize":"","filesize_raw":"","date_recorded":"","explicit":"","block":"","wds_primary_category":0,"footnotes":"","_wds_robots-noindex":"","_wds_robots-nofollow":"","_wds_opengraph-title":"","_wds_opengraph-description":"","_wds_twitter-title":"","_wds_twitter-description":""},"categories":[28],"tags":[157,160,159,158],"series":[],"class_list":["post-1755","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-seo","tag-schema-markup","tag-structured-data","tag-technical-seo","tag-wordpress"],"episode_featured_image":"https:\/\/rblog.it\/en\/wp-content\/uploads\/2026\/05\/schema-markup-wordpress-guide.jpg","episode_player_image":"https:\/\/rblog.it\/en\/wp-content\/uploads\/2021\/11\/rblog-podcast.png","download_link":"","player_link":"","audio_player":false,"episode_data":{"playerMode":"dark","subscribeUrls":{"apple_podcasts":{"key":"apple_podcasts","url":"","label":"Apple Podcasts","class":"apple_podcasts","icon":"apple-podcasts.png"},"stitcher":{"key":"stitcher","url":"","label":"Stitcher","class":"stitcher","icon":"stitcher.png"},"google_podcasts":{"key":"google_podcasts","url":"","label":"Google Podcasts","class":"google_podcasts","icon":"google-podcasts.png"},"spotify":{"key":"spotify","url":"https:\/\/open.spotify.com\/show\/5IjCCrGAVU62CiHVLLbjTY","label":"Spotify","class":"spotify","icon":"spotify.png"}},"rssFeedUrl":"https:\/\/rblog.it\/en\/feed\/podcast\/growth-marketing-rblog","embedCode":"<blockquote class=\"wp-embedded-content\" data-secret=\"jd0ePXKUwT\"><a href=\"https:\/\/rblog.it\/en\/seo\/schema-markup-wordpress-guide\/\">Schema Markup on WordPress: A Practical Guide<\/a><\/blockquote><iframe sandbox=\"allow-scripts\" security=\"restricted\" src=\"https:\/\/rblog.it\/en\/seo\/schema-markup-wordpress-guide\/embed\/#?secret=jd0ePXKUwT\" width=\"500\" height=\"350\" title=\"&#8220;Schema Markup on WordPress: A Practical Guide&#8221; &#8212; Rblog\" data-secret=\"jd0ePXKUwT\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\" class=\"wp-embedded-content\"><\/iframe><script type=\"text\/javascript\">\n\/* <![CDATA[ *\/\n\/*! This file is auto-generated *\/\n!function(d,l){\"use strict\";l.querySelector&&d.addEventListener&&\"undefined\"!=typeof URL&&(d.wp=d.wp||{},d.wp.receiveEmbedMessage||(d.wp.receiveEmbedMessage=function(e){var t=e.data;if((t||t.secret||t.message||t.value)&&!\/[^a-zA-Z0-9]\/.test(t.secret)){for(var s,r,n,a=l.querySelectorAll('iframe[data-secret=\"'+t.secret+'\"]'),o=l.querySelectorAll('blockquote[data-secret=\"'+t.secret+'\"]'),c=new RegExp(\"^https?:$\",\"i\"),i=0;i<o.length;i++)o[i].style.display=\"none\";for(i=0;i<a.length;i++)s=a[i],e.source===s.contentWindow&&(s.removeAttribute(\"style\"),\"height\"===t.message?(1e3<(r=parseInt(t.value,10))?r=1e3:~~r<200&&(r=200),s.height=r):\"link\"===t.message&&(r=new URL(s.getAttribute(\"src\")),n=new URL(t.value),c.test(n.protocol))&&n.host===r.host&&l.activeElement===s&&(d.top.location.href=t.value))}},d.addEventListener(\"message\",d.wp.receiveEmbedMessage,!1),l.addEventListener(\"DOMContentLoaded\",function(){for(var e,t,s=l.querySelectorAll(\"iframe.wp-embedded-content\"),r=0;r<s.length;r++)(t=(e=s[r]).getAttribute(\"data-secret\"))||(t=Math.random().toString(36).substring(2,12),e.src+=\"#?secret=\"+t,e.setAttribute(\"data-secret\",t)),e.contentWindow.postMessage({message:\"ready\",secret:t},\"*\")},!1)))}(window,document);\n\/* ]]> *\/\n<\/script>\n","syncStatus":{"isSynced":false,"status":"none","error":"","message":"Not synced yet.","title":"Not synced"}},"_links":{"self":[{"href":"https:\/\/rblog.it\/en\/wp-json\/wp\/v2\/posts\/1755","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rblog.it\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rblog.it\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rblog.it\/en\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/rblog.it\/en\/wp-json\/wp\/v2\/comments?post=1755"}],"version-history":[{"count":0,"href":"https:\/\/rblog.it\/en\/wp-json\/wp\/v2\/posts\/1755\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/rblog.it\/en\/wp-json\/wp\/v2\/media\/1754"}],"wp:attachment":[{"href":"https:\/\/rblog.it\/en\/wp-json\/wp\/v2\/media?parent=1755"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rblog.it\/en\/wp-json\/wp\/v2\/categories?post=1755"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rblog.it\/en\/wp-json\/wp\/v2\/tags?post=1755"},{"taxonomy":"series","embeddable":true,"href":"https:\/\/rblog.it\/en\/wp-json\/wp\/v2\/series?post=1755"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}