Most WordPress sites in Bergen County run an SEO plugin that ships generic schema. Yoast, Rank Math, Schema Pro — they all emit JSON-LD on every page by default. The owner sees a green checkmark in the dashboard and assumes schema is handled. Then the site sits at position 7 for its main keyword for fourteen months while a competitor with hand-rolled JSON-LD pulls the FAQ rich result, the local business panel, and the review stars.
Plugin schema is not wrong. It is just too generic to answer the specific question Google is asking. The plugin does not know your service area, your price range, your differentiator, or which entity on the page is the answer. Hand-rolled schema does. That is the entire difference.
What plugin schema actually outputs
Open the source of any Yoast-managed page and search for application/ld+json. You will find a WebPage object, a WebSite object, an Organization object, maybe a BreadcrumbList. Useful baseline. But every page on the site emits the same shape with the same field set — name, URL, logo, sameAs. Nothing in there tells Google that the page is specifically about emergency furnace repair in Ridgewood, available Saturdays, starting at $185.
The plugin cannot generate that from a page title. It would need to read your mind. So it emits the safe minimum and moves on.
When manual schema beats plugin schema
Three signals tell us a page is leaving rich-result money on the table:
- The page ranks 4-10 for a keyword that shows rich results for competitors (FAQ accordions, review stars, price ranges, “available now” badges)
- The page has structured content the plugin cannot see — a service area list, a price tier, an FAQ block built in Elementor, a how-to with steps
- Google Search Console shows impressions but flat CTR — the page is being found and skipped
All three mean the SERP is rewarding the competitor’s richer markup. The fix is not more content. It is telling Google what is already on the page in a vocabulary it can parse.
The 4 schemas that benefit from custom JSON-LD
Not every page needs hand-rolled markup. These four pay back the hour it takes:
- LocalBusiness. Plugin emits a generic Organization. Hand-rolled adds
areaServed(every town you cover),priceRange,openingHoursSpecification,geocoordinates, and the specific@type(Plumber, Dentist, Roofer — not the catch-all “LocalBusiness”). This is the schema that drives the local pack panel. - Service. One page, one service, one schema block.
name,provider,areaServed,offerswith a real price or price range. Plugins do not emit Service schema at all on most templates. This is how you get the “starting at $X” snippet. - FAQPage. Plugins detect FAQ blocks in Yoast’s own Gutenberg block. They miss every FAQ built in Elementor, Bricks, Divi, or a custom accordion. Hand-rolled FAQPage JSON-LD with the question and answer text from the actual page recovers the rich result on those builds.
- Review and AggregateRating. Pulling reviews from a third-party widget and marking them up in JSON-LD on the page itself gets you star ratings in the SERP. Plugin schema rarely touches this because the plugin does not know where your reviews live.
Where the manual JSON-LD goes
One block in the page header or footer area, scoped to the specific page or page template. Yoast and Rank Math both accept supplemental JSON-LD without conflict — they will emit their generic block and your custom block side by side, and Google reads both. No need to disable the plugin’s schema. The custom block adds; it does not replace.
Validate every block in Google’s Rich Results Test before publishing. A malformed JSON-LD block is worse than none — Google will throw it out and may downweight the page for the attempted markup. The validator catches every common error in under a minute.
How AJD handles this
On every site we maintain, we audit the rendered JSON-LD for the top ten pages by impressions. Where the plugin schema is leaving rich-result opportunity on the table, we add hand-rolled JSON-LD scoped to that page or template — LocalBusiness with full areaServed, Service with real pricing, FAQPage for non-Yoast accordions, AggregateRating where reviews exist. Every block is validated in the Rich Results Test before push and re-tested weekly in Search Console for impressions and CTR lift. Whether you work with us or not, run your top three pages through the Rich Results Test this week. If the schema is generic, the rich result is almost certainly going to someone else.
Want us to audit your current schema for free and show you what rich results you are leaving on the table? Thirty minutes, no pitch. Book Free Discovery Call →





