Four steps on any platform: generate the JSON-LD, put it in the page, test the live URL, and watch Search Console. Pick your platform below for the exact placement.
1. Generate markup that matches the page
Choose the type that describes the page's main content: Product for a product page, Article for a post, LocalBusiness for a location page. Every value must be visible to visitors too; Google's guidelines treat hidden or contradictory markup as spam.
2. Place it in the page
Generate the JSON-LD with "Wrap in <script>" switched on.
Paste the block before </head> (or anywhere in <body>).
Each supported rich result gets a report under Enhancements (or Shopping for merchant listings) showing valid items, warnings and errors. After fixing, use Validate fix so Google recrawls the affected pages. Note that retired features, such as FAQ since June 2026, no longer have reports.
Common mistakes
Marking up content that isn't on the page, such as reviews from elsewhere or a price that differs from the visible one.
Two plugins outputting two conflicting Product or Organization blocks.
Prices with currency symbols ("$149") instead of 149 plus priceCurrency.
Dates without time zones on events and videos.
Adding the same Organization or FAQ block to every page of the site.
Placement questions
Head or body: where should JSON-LD go?
Either. Google reads JSON-LD anywhere in the HTML. The head is conventional; the body is fine when your CMS only allows content-area HTML.
Can I add schema with Google Tag Manager?
Yes. Google can read JSON-LD injected by JavaScript, including via Tag Manager, because it renders pages. It's slower to be picked up than markup in the HTML, and our validator's URL fetch won't see it.
Can I have several JSON-LD blocks on one page?
Yes. Use separate script blocks or one block with an @graph array. Both are valid.
How long until Google picks it up?
Google re-reads the markup the next time it crawls the page. You can request indexing in Search Console's URL Inspection tool to speed this up.