
SEO vs SEM: Which Searches to Earn and Which to Buy
SEO vs SEM is usually the wrong question. Learn what the terms really mean and how to use ads and Search Console data to decide which searches to earn or buy.
From F&B to fintech, clinics to law firms, startups to enterprise. If your customers search on Google, we make sure they find you first, not your competitors.
One specialist team, focused only on the organic rankings that put you in front of ready-to-buy Singapore customers.
A clear, sequenced path from audit to rankings. You always know what we’re doing and why it matters for your leads.

Quick answer: Most WP SEO structured data schema problems are not missing markup but too much of it. Your SEO plugin, theme, page builder, WooCommerce and hand-pasted code can all output schema at once. Audit what each page outputs, choose one source of truth per entity, and switch the rest off before adding anything new.
When a Singapore business owner tells us their WordPress site “has schema problems”, the instinct is usually to install something. Another plugin, another snippet, another block of code from a forum. In our experience that instinct makes things worse, because the real issue with WP SEO structured data schema on most sites is not absence. It is crowding.
Schema markup (also called structured data) is code that describes your page to search engines in a fixed vocabulary from Schema.org: “this is a business”, “this is a product with a price in SGD”, “this is the breadcrumb trail”. On a typical WordPress site, four or five different pieces of software can each decide to write that description independently. The result is two Organization descriptions with different logos, two Product blocks with different prices, or a breadcrumb trail declared twice. This is a core part of the technical SEO work that sits underneath rankings.
This piece is not a setup tutorial. It is about the duplicate and conflicting markup that builds up over years of plugin installs. The conclusion running through every section: pick one source of truth per entity, switch everything else off, and only then add anything new.
WordPress is built on plugins and themes that each try to be helpful. That design is what makes it flexible, and it is also why schema gets messy. Each component that outputs structured data assumes it is the only one doing so. Nobody coordinates them.
A few terms first. An entity is a single thing your markup describes, such as your company, a product, an article or a web page. JSON-LD (JavaScript Object Notation for Linked Data) is the format Google recommends for schema: a block of code inside a script tag, invisible to visitors. Some older themes still use microdata, which wraps schema attributes around visible HTML elements instead. A rich result is an enhanced search listing, such as product price and stock shown under a link.
Modern SEO plugins such as Yoast SEO, Rank Math and All in One SEO (AIOSEO) output what is called a schema graph: one connected JSON-LD block where the website, the organisation, the web page and the breadcrumb all reference each other using identifiers. That graph is well designed. The trouble starts when a second source adds its own Organization or Product outside the graph, unconnected to anything.
Google does not publish a penalty for having the same type twice, and its documentation says it can understand multiple items on one page. But Google’s general structured data guidelines require markup to reflect the visible content accurately. When two copies disagree, for example one Product says S$45 and another says S$49 because one reads the sale price and one does not, you have created ambiguity on your own page. Google picks whichever it decides is most relevant, and you no longer control which.
Duplicates also hide errors. If the plugin’s Product block is valid and the theme’s Product block is missing a required field, your testing tool reports a warning you cannot fix inside the plugin, because the plugin is not the source. We have seen site owners spend days tweaking plugin settings to clear a warning generated by a theme file they never opened.
So before anyone asks “what schema should we add?”, the right question is “who is already writing schema on this site?”
On most WordPress sites we look at, several components are capable of outputting structured data at the same time. Here is the usual cast, what each tends to produce, and what we generally recommend keeping or switching off when an SEO plugin is in charge.
| Source | What it typically outputs | Keep or turn off (with an SEO plugin in charge) |
|---|---|---|
| SEO plugin (Yoast, Rank Math, AIOSEO) | Connected graph: WebSite, Organization or Person, WebPage, BreadcrumbList, Article | Keep as the source of truth for site-wide entities |
| Theme (especially older or “SEO-ready” themes) | Microdata on headers, posts and authors; sometimes its own Organization or BreadcrumbList | Turn off theme schema options, or remove via child theme |
| Page builder widgets (rating, review, accordion) | Review, AggregateRating or FAQPage markup per widget | Turn off per widget unless that widget is the only source |
| WooCommerce core | Product JSON-LD on product pages, plus breadcrumb and shop data | Keep only if no SEO plugin or add-on replaces it |
| SEO plugin WooCommerce add-on or module | Product joined to the plugin’s graph, with brand and seller links | Keep, and disable the duplicate WooCommerce copy if one remains |
| Review, event or recipe plugins | Review, Event or Recipe items | Keep for their own type; turn off any Organization they add |
| Hand-pasted JSON-LD (header scripts, tag manager) | Often LocalBusiness or Organization written years ago | Remove or merge into the plugin, then delete the snippet |
Two things stand out in this table. First, site-wide entities (who you are, your website, your breadcrumbs) belong in one place, and that place is usually your SEO plugin. Second, type-specific entities (a product, an event, a review) can legitimately come from a specialist plugin, as long as nothing else writes the same type on the same page.
Yoast’s own documentation describes its WooCommerce SEO add-on as tying product schema into the Yoast graph, and Rank Math generates Product schema on WooCommerce product pages when its WooCommerce support is active. Whether the original WooCommerce copy is fully removed depends on your versions and settings, which is exactly why you test rather than assume. For stores, our ecommerce SEO service treats this product markup check as a standard first step.
You cannot fix what you have not counted. A proper audit takes about twenty minutes per template, and you only need to test one URL per template: the homepage, one service page, one blog post, one product, one category and the contact page.
Step 1: View the source. Open the page in Chrome, right-click and choose View Page Source, then search for “application/ld+json”. Count the script blocks. Then search for “itemtype” and “itemscope”, which reveal microdata. Note which block mentions Organization, LocalBusiness, Product and BreadcrumbList. Plugin graphs often include a comment or class naming the plugin, which helps you trace each block to its source.
Step 2: Run Google’s Rich Results Test. This free tool from Google shows which rich result types the page is eligible for and lists every detected item. If you see “Product” listed twice, or two “Breadcrumbs” items, you have a duplicate. Test the live URL and also paste the code, because the two can differ when caching is involved (more on that below).
Step 3: Run the Schema Markup Validator. Hosted at validator.schema.org, this tool checks everything against the full Schema.org vocabulary, not just the types Google uses for rich results. It is better at showing microdata from themes and items Google ignores, such as a stray WPHeader or a second Organization with no logo.
Step 4: Check Google Search Console. Search Console (Google’s free tool that reports how your site appears in search) groups structured data issues under its enhancement and shopping reports. A sudden jump in invalid items after an update is often the first sign that a new source has started writing markup.
When we audited WordPress sites with mysterious rich result losses, the cause was rarely a broken plugin. It was usually a second source the owner did not know existed: a theme setting switched on by default, or a script pasted into the header by a previous developer.
Write down what you find in a simple sheet: template, entity, source, keep or remove. That sheet becomes your plan.
Most duplicate schema on WordPress falls into four patterns. Once you recognise them, audits get much faster.
1. Two Organization nodes. The SEO plugin outputs an Organization with your registered company name and logo. A theme, a review plugin or an old header snippet outputs another, often with a different name format (“ABC Pte Ltd” versus “ABC Trading”) or an outdated logo. Google’s understanding of who you are is built partly from this entity, so conflicting versions undercut the consistency you want for your brand. Keep the plugin’s version, make sure it matches your ACRA-registered name or the trading name you use everywhere else, and remove the rest.
2. Duplicate Product. WooCommerce core outputs Product markup, and an SEO plugin module or add-on outputs another. Sometimes a review plugin adds a third with its own AggregateRating. The risk is mismatched price, availability or currency. For Singapore stores, check that priceCurrency is SGD in every copy and that sale prices and GST-inclusive prices match what the visitor actually sees on the page.
3. LocalBusiness from two plugins. A local SEO add-on outputs LocalBusiness with your opening hours, while a hand-pasted snippet from years ago describes your old address before you moved from one industrial estate to another. Google then sees two addresses for one business. For multi-outlet businesses, the right structure is one LocalBusiness per location page, not several stacked on the homepage. Our local SEO work covers how this markup should line up with your Google Business Profile.
4. BreadcrumbList twice. Breadcrumbs are the “Home > Category > Page” trail. Many themes print a visual breadcrumb with its own markup, while the SEO plugin adds BreadcrumbList to its graph. If the trails disagree, for example the theme includes a parent category the plugin skips, Google may show either. Pick the plugin’s version and switch the theme’s markup off, even if you keep the visual trail.
None of these conflicts is exotic. They are the default outcome of installing sensible tools without checking what each one outputs.
Most agencies will tell you to fix schema problems by installing a dedicated schema plugin on top of your SEO plugin, because it offers more types and more fields. That advice frequently backfires on WordPress. A dedicated schema plugin is one more source writing Organization, WebPage and breadcrumbs, and unless you carefully disable the overlapping parts of your SEO plugin, you now have two graphs instead of one.
The better rule is simple: one entity, one owner. For each entity type on your site, decide which component writes it, record that decision, and make sure nothing else does.
A practical allocation for most Singapore SME sites looks like this:
Notice that the choice is per entity, not per site. It is fine for a review plugin to own Review markup while your SEO plugin owns Organization. What is not fine is two owners for the same thing on the same page.
Write the allocation down. A one-page note listing “Organization: Rank Math” or “Product: WooCommerce core, plugin module off” is worth more than any setting, because the next developer, freelancer or agency will read it before installing something new. In our experience, the sites that stay clean over several years are the ones where someone owns this note.
If you are a smaller team without a developer on call, our small business SEO approach keeps this kind of housekeeping to a short, repeatable routine.
Once you know what to remove, do it carefully. Menu labels change between versions, so treat the steps below as the general method rather than exact click paths.
Start on a staging copy. Most Singapore hosting providers and managed WordPress hosts offer a one-click staging site. Make every schema change there first, test, then push live. At minimum, take a full backup before you begin.
Themes. Look in the theme’s customiser or theme options panel for anything labelled schema, structured data, microdata or SEO. Many popular themes include a switch to disable their markup when an SEO plugin is active. If there is no switch, the markup lives in template files, and the safe way to remove it is a child theme (a small theme that inherits from your main theme and overrides only the files you change), so updates do not undo your work. Never edit the parent theme directly.
Page builder widgets. Rating, review and accordion widgets sometimes include an FAQ or review schema toggle in the widget’s own settings. Open each widget on the affected pages and switch it off unless that widget is your chosen source.
WooCommerce. WooCommerce provides developer filters for its structured data, including one for product data (woocommerce_structured_data_product) that a developer can use to stop the core Product output when another source owns it. This is a small code change best done by a developer in a site-specific plugin or child theme, not by pasting code you do not understand.
SEO plugins. Yoast, Rank Math and AIOSEO each document their own settings and developer filters for removing specific schema pieces. Rank Math lets you toggle its schema module from its dashboard; check each plugin’s current knowledge base before changing anything.
Hand-pasted snippets. Check header and footer script plugins, theme “custom code” boxes and Google Tag Manager. Old JSON-LD often hides there. Merge anything useful, such as an extra sameAs link to your LinkedIn page, into the plugin’s settings, then delete the snippet.
After each removal, re-run the audit from the previous section. Remove one source at a time so that if something breaks, you know which change caused it.
A common frustration: you switch off the theme’s schema, run the Rich Results Test, and the duplicate is still there. Before you assume the setting did not work, check the caches.
Page caching. Caching plugins and hosting-level caches store a ready-made copy of each page so it loads faster. Until that copy is cleared, visitors and testing tools see the old HTML, including the old schema. Clear the plugin cache, the server cache and any CDN (content delivery network, a service such as Cloudflare that serves copies of your pages from data centres near the visitor) after every schema change.
Minification and script optimisation. Optimisation plugins can combine, defer or delay scripts to improve speed scores. JSON-LD uses a script tag, so an aggressive “delay all JavaScript” setting can occasionally move or alter it. Google generally reads JSON-LD wherever it sits in the HTML, but if your audit shows schema missing on the live page while it appears in the plugin’s preview, exclude “application/ld+json” scripts from optimisation and retest.
Object caching of plugin output. Some SEO plugins store parts of their schema output so they do not rebuild it on every request. After changing your logo, company name or address, resave the relevant settings and clear caches so the new values flow through.
Google’s own copy. Even when your live HTML is correct, Google’s index holds the version from its last crawl. Use URL Inspection in Search Console to request reindexing of key templates, then give it time. The rich result reports in Search Console update on Google’s schedule, not yours.
When we have reviewed “the fix did nothing” situations, stale cache was the explanation far more often than a broken setting. Test the live URL and the pasted HTML side by side: if the pasted code is clean and the live URL is not, it is a caching problem, not a schema problem.
This is also why a quick spot-check is not enough after a theme or plugin change. Clear everything first, then audit.
Our B2B ecommerce case study shows how schema fits into a wider programme rather than standing alone. The client was a B2B wholesale kitchenware supplier (Singapore + regional) based in Ubi, Singapore, in an 8 month engagement. At the start the website had a product catalogue with no specifications, no MOQ information and no industry application content. It had 470 monthly organic visitors, 5 keywords ranking on page 1 (brand only) and 5 monthly organic trade enquiries, with a Domain Authority (a third-party score estimating a site’s link strength) of 11.
| Metric | Baseline | Month 8 |
|---|---|---|
| Monthly organic visitors | 470 | 1,476 (+214%) |
| Keywords ranking page 1 | 5 (brand only) | 32 |
| Category / specification pages | 0 | 14 |
| Monthly trade enquiries (organic) | 5 | 28 |
| Domain Authority | 11 | 22 |
The schema work sat in Phase 4, Technical SEO and Schema, which ran across months 1 to 3. The page states that Organization and Product schema were implemented across all category pages, FAQPage schema was added to trade buyer content articles, mobile Lighthouse improved from 48 to 74, and the sitemap was rebuilt to include the new category and vertical pages. That ran alongside Phase 1, which rebuilt the catalogue into 14 category pages, and Phase 2, which created 6 industry vertical pages.
The point for this topic is the order of operations. Organization and Product schema were implemented across all the rebuilt category pages as part of the new architecture, in the same months the catalogue was restructured. The results came from the whole programme: architecture, vertical pages, trade buyer content, technical work and trade directory submissions. By months 4 to 5 enquiries had moved from 5 to 14 per month, and by month 8 the site ranked top 3 for 4 wholesale terms, with organic generating 19% of all new trade relationships. For wholesale and retail stores, our ecommerce SEO for Singapore businesses page sets out how that sequencing is usually approached.
Clean schema does not stay clean on its own. Every update to WordPress, your theme, WooCommerce or any plugin can introduce a new source of markup or change an existing one. A plugin update might add a new schema feature switched on by default. A theme update might restore microdata your child theme had overridden.
Build a short post-update routine. After any significant update, run your six template URLs through the Rich Results Test and the Schema Markup Validator. Compare the item list against your one-source-per-entity note. If a new item appears, trace it to its source before it spreads across the site.
Watch Search Console weekly. The enhancement and shopping reports show valid and invalid item counts over time. A sudden spike or drop that lines up with an update date tells you exactly where to look.
Keep up with Google’s changes. Google regularly narrows which rich result types it displays. In May 2026, Google updated its documentation to state that FAQ rich results no longer appear in Search, completing a restriction that began in August 2023. FAQPage markup can still describe your content, but if a page builder widget is adding FAQPage everywhere purely for a rich result that no longer exists, that is one more source worth reviewing. Check the Search Central structured data documentation before chasing any rich result type.
Re-audit when people change. A new developer, a new freelancer or a new agency is the single most common moment for a second schema plugin to appear. Share the allocation note on day one.
In our experience, a short quarterly schema check catches most problems before they affect search listings. For businesses that want this folded into ongoing work, our SEO services overview explains where technical monitoring sits.
If you are weighing the cost of ongoing checks against a one-off clean-up, our pricing page lays out the options.
Field notes: In our B2B ecommerce case study, the wholesale kitchenware supplier in Ubi went from 470 to 1,476 monthly organic visitors (+214%) and from 5 to 28 monthly organic trade enquiries over 8 months. Organization and Product schema were implemented across all category pages in Phase 4, during months 1 to 3, at the same time as the catalogue was rebuilt into 14 category pages. The schema was implemented alongside the new structure rather than as a separate add-on, and the results came from the whole programme around it.
WP SEO structured data schema rarely fails because a site has too little markup. It fails because too many components are writing it at once: the SEO plugin, the theme, page builder widgets, WooCommerce, specialist plugins and code pasted in by someone years ago. Each one is reasonable on its own. Together they produce duplicate Organization nodes, conflicting Product prices and breadcrumbs declared twice.
The fix is a discipline, not a plugin. Audit what each template outputs, assign one owner per entity, switch the rest off one at a time, clear every cache, and retest after every update. Only then add new schema types. If you want to know more about the people who would carry out that kind of audit with you, our about page explains how we work with Singapore businesses.
It is code that describes your pages to search engines using the Schema.org vocabulary, telling Google that a page represents a business, a product, an article or a breadcrumb trail. On WordPress it is usually generated automatically by your SEO plugin, theme, WooCommerce or other plugins, most often in JSON-LD format inside a script tag that visitors never see. It helps Google understand your content and can make pages eligible for rich results such as product prices in search listings.
Google does not publish a penalty for having the same schema type twice, and it says it can understand multiple items on a page. The real problem is conflict. If two copies of your Product or Organization markup disagree on price, name, logo or address, Google has to choose one and may choose the wrong one. Duplicates also make errors hard to trace, because a warning may come from a source you never configured.
View the page source and search for “application/ld+json” to count JSON-LD blocks, and search for “itemtype” to find microdata. Then run the URL through Google’s Rich Results Test and the Schema Markup Validator at validator.schema.org. The first shows what Google can use for rich results; the second shows everything, including theme microdata. Test one URL per template rather than every page.
Any of the three can serve as your source of truth, because each outputs a connected schema graph covering your website, organisation, pages and breadcrumbs. The choice matters less than using only one. Running two SEO plugins, or an SEO plugin plus a separate schema plugin with overlapping features, is a common cause of duplicates. Pick the one you already use well and switch off overlapping schema elsewhere.
Yes. WooCommerce outputs Product structured data on product pages by default. SEO plugins with WooCommerce support, such as Yoast’s WooCommerce SEO add-on or Rank Math’s WooCommerce features, also produce Product markup joined to their own graph. Depending on versions and settings, you can end up with two Product items. Test a product page and, if both appear, have a developer disable one using the documented WooCommerce or plugin filters.
Check the theme options or customiser for settings labelled schema, structured data or microdata, since many themes offer a switch for sites using an SEO plugin. If no switch exists, the markup is in template files, and a developer should remove it through a child theme so future updates do not restore it. Avoid editing the parent theme directly, and make changes on a staging site first.
Usually because of caching. Page caching plugins, server caches and CDNs can keep serving the old HTML after you change a setting. Clear all of them, then retest. Compare the live URL test with a pasted-code test: if the pasted code is clean and the live result is not, it is a cache issue. Also remember that Google’s index only updates after it recrawls the page.
Google updated its documentation in May 2026 to state that FAQ rich results no longer appear in Search. FAQPage markup can still describe question-and-answer content accurately, but it will not produce the old expandable listing. If FAQ schema is being added automatically by page builder widgets on many pages, review whether each instance is accurate and whether it duplicates markup from your SEO plugin.
Check your key templates after any significant WordPress, theme or plugin update, and run a fuller review about once a quarter. Also re-audit whenever a new developer or agency starts working on the site, because that is when new plugins tend to appear. Search Console’s enhancement reports help between audits by showing sudden changes in valid or invalid items.
Yes, and for multi-outlet businesses it is the right approach. Each outlet should have its own location page with one LocalBusiness item containing that outlet’s name, address, six-digit postal code, phone number and opening hours, matching its Google Business Profile. Avoid stacking several LocalBusiness items on the homepage or outputting the same location from both a plugin and a pasted snippet.
If you suspect your WordPress site has more schema sources than it should, or a recent update changed what shows in Search Console, we can take a look. We will check what your key templates actually output, show you where markup is duplicated or conflicting, and suggest which source should own each entity. Start with a free SEO audit and we will take it from there.
If you would rather talk it through first, get in touch and tell us what changed on your site.
Natalie leads SEO strategy at Singapore SEO Agency, helping local and regional businesses build organic search programmes that drive qualified leads. She specialises in technical SEO and content-led authority building for Singapore SMEs.
Get a free SEO audit for your Singapore website — we'll show you exactly where you stand, what's holding you back, and what it would take to rank on page 1.
Get Your Free SEO Audit →
SEO vs SEM is usually the wrong question. Learn what the terms really mean and how to use ads and Search Console data to decide which searches to earn or buy.

Google Search Console login problems usually start with verification and ownership. Learn how to get in, fix access errors and offboard agencies safely.

The click through rate formula is clicks divided by impressions. Learn what each platform counts, the averaging trap and how to set it up in Google Sheets.

A click through rate means nothing on its own. Learn to compare CTR by position, query type and SERP features, and see what low CTR is really telling you.

What a google analytics certification proves, what it misses, how to verify one and the practical questions to ask before you hire a marketer or freelancer.

A domain authority checker only helps when you compare your site with the pages ranking for your searches. Learn to read Moz, Ahrefs and Semrush scores.
Fast, no obligation. We reply within 24 hrs.
Singapore’s specialist SEO agency for SMEs. We rank your business on Google — and only Google. No distractions, just results.
© 2026 Singapore SEO Agency. All rights reserved.