SchemaForge is a self-contained HTML tool that connects to the Claude API to perform a full schema audit for any WordPress, Shopify, or Magento 2 site. Paste sitemap XML and optionally page HTML source โ it identifies what schema already exists, what's missing, what conflicts with active plugins, then generates ready-to-deploy JSON-LD with CMS-specific implementation code.
Use it at the start of any client onboarding, after a CMS migration, or when a site is underperforming for rich results despite qualifying content.
-
1Fill in Site InformationEnter the site URL, client/business name (used in the report header), business type, and your Anthropic API key (
sk-ant-api03-โฆ). The key is used only to call Claude and is never stored or sent anywhere else. Get one at console.anthropic.com โ API Keys. Leave the Proxy URL field blank. -
2Select the CMSClick WordPress, Shopify, or Magento 2. This controls which plugin list appears in Section 4 and determines the implementation code format in the output โ PHP Code Snippets for WP, .liquid files for Shopify, PHTML/layout XML for Magento 2.
-
3Paste Sitemap XMLOpen the sitemap URL in your browser (usually
/sitemap.xmlor/sitemap_index.xml), press Ctrl+U to open View Source, then Ctrl+A โ Ctrl+C โ paste into Sitemap 1.
Sitemap index (RankMath / Yoast): paste the index XML first. The tool detects it automatically and generates one labelled field per child sitemap, each with an Open โ link. Open each child โ Ctrl+U โ paste. Focus on post-sitemap, page-sitemap, product-sitemap โ skip image and news sitemaps.
Tip: if Ctrl+U doesn't give you clean XML (some CDNs block it), the tool also accepts pasted rendered HTML โ it extracts all valid URLs from <a href> links and <loc> tags automatically. Use + Add another sitemap to add more fields manually at any time. -
4Paste Page HTML Source (optional but strongly recommended)For each key page type, open the page โ right-click โ View Page Source โ Ctrl+A โ Ctrl+C โ paste into a page source field and select the page type from the dropdown.
This lets the tool see what schema plugins are already outputting โ including RankMath and Yoast's @graph blocks โ so it avoids duplicates and gives precise conflict warnings. It also extracts real contact data (phone number, email, address, social URLs) from Contact, Homepage, and About pages, which is used directly in the generated schema instead of invented placeholder values.
Minimum recommended: homepage + contact page + one product/service page + one blog post. -
5Tick installed plugins (Section 4)Check any SEO plugins or apps active on the site. The list updates automatically based on the selected CMS. Ticking plugins tells Claude which schema types are already generated so it won't produce conflicting duplicates.
-
6Load Session (optional)If you've audited this site before, click ๐ Load Session to restore a previously saved
.jsonfile. All fields โ sitemap XML, page sources, plugin settings, and the previous audit result โ are repopulated automatically. Re-enter the API key and run a fresh audit. If a session was saved since you last opened the tool, a blue restore banner will appear at the top of the page automatically. -
7Run Audit & Generate SchemaClick the orange button. The audit log shows progress in real time โ URL count, page type classification, existing schema detection, API call status. Typically takes 30โ90 seconds. On completion the tool moves to the Schema Output tab automatically and auto-saves the session to browser storage.
-
8Download Report & Save Sessionโฌ Download Report โ generates a standalone branded HTML file with the client's name, schema score, all schema groups with pretty-printed JSON-LD and CMS implementation code, conflict warnings, and next steps. Ready to send to a client or include in a deliverables pack.
๐พ Save Session โ exports all current inputs and the full audit result to aschemaforge-[client]-[date].jsonfile. Load this next time to skip re-pasting everything โ just enter the API key and re-run.
- 1Open
example.com/sitemap.xmlin your browser - 2Press Ctrl+U โ opens the raw XML source in a new tab
- 3Ctrl+A โ Ctrl+C โ paste into Sitemap 1
- 1Open
example.com/sitemap_index.xmlโ Ctrl+U โ Ctrl+A โ Ctrl+C โ paste into Sitemap 1. One labelled field per child sitemap is generated automatically, each with an Open โ link. - 2For each child, click Open โ โ Ctrl+U โ paste into that field. Focus on post-sitemap, page-sitemap, product-sitemap. Skip image-sitemap and news-sitemap.
- 3The URL count in the preview updates as you paste each field. You can add more fields manually with + Add another sitemap.
SchemaForge saves everything โ sitemap XML, page HTML sources, plugin settings, and the full audit result โ so repeat audits on the same site take seconds instead of minutes.
- 1After an audit completes, the session is automatically saved to browser storage. You don't need to do anything for this.
- 2To save a portable file, click ๐พ Save Session on the Schema Output screen. This downloads a
schemaforge-[client]-[date].jsonfile you can keep alongside the client folder.
- 1From browser storage: if a session was saved since you last opened the tool, a blue banner appears at the top of Step 1 showing the client name and date. Click Restore Session.
- 2From a JSON file: click ๐ Load Session on Step 1 and pick the saved
.jsonfile. All fields restore immediately. - 3After restoring, enter your API key (it is never saved for security) and click Run Audit to generate a fresh report with the same inputs.
After the audit completes, results appear across six tabs. The schema score and issue count are shown above the tabs.
-
OOverviewSchema score (0โ100), a 2โ3 sentence audit summary, and a table of detected page types with planned schema coverage. Start here.
-
SSitewideSchema for every page โ typically
OrganizationandWebSitewith Sitelinks Searchbox. Deploy once and it covers the whole site. Click any group to expand the pretty-printed JSON-LD and CMS implementation code. -
TTemplatesSchema scoped to page templates โ
Product,Article,CollectionPage,Serviceetc. Uses PHP conditionals, Liquid template checks, or Magento layout handles to fire only on matching pages. -
IIndividual PagesOne-off schema for specific pages โ Contact, About, FAQ, Homepage specifics. Targeted by page slug/ID in WP,
page.handlein Shopify, orfull_action_namelayout handle in Magento 2. -
CConflictsPlugin-specific warnings. Each entry names the plugin, the affected @type, the risk, and the exact resolution. Always check this tab before deploying anything.
-
โImplementationStep-by-step deployment guide for the selected CMS โ conditional targeting examples, de-duplication patterns, and cache-flush instructions for Magento 2.
| Plugin / Source | Schema it generates | What to do |
|---|---|---|
| RankMath SEO | @graph block with Organization, WebSite, WebPage, BreadcrumbList, Article/Product depending on page |
Do not add duplicate Organization or WebSite. Disable RankMath's schema for a specific type under Rank Math โ Titles & Meta โ Schema, or use its Schema Builder to extend rather than duplicate. |
| Yoast SEO | @graph block โ same types as RankMath. Also adds Person schema if author pages are enabled. |
Disable at SEO โ Search Appearance โ General โ Schema tab, or override per post/page via the Schema tab in the editor. |
| WooCommerce | Basic Product + Offer on product pages โ minimal, often incomplete | Safe to override โ WooCommerce's output lacks AggregateRating and full Offer details. A complete Code Snippets block supersedes it. |
| Shopify native | Most themes (Dawn, Impulse, Prestige) include Product and Article schema in product.liquid / article.liquid |
Search theme files for application/ld+json before adding anything. Edit the existing block rather than adding a second one. |
| Magento 2 native | Product in module-catalog/.../product/view.phtml and BreadcrumbList in module-theme/.../breadcrumbs.phtml |
Run grep -r "application/ld+json" vendor/magento/ before adding anything. Override templates in your custom theme โ never edit vendor files. |
| Schema Pro | All major @types via UI โ whatever you've configured | Check Schema Pro's active rules before deploying. Disable the conflicting type in Schema Pro, or skip that type in the generated output. |
- 1Install the free Code Snippets plugin. It adds PHP without editing theme files โ snippets survive theme updates.
- 2Copy the WordPress (Code Snippets) block from each schema group. In Code Snippets โ Add New, paste as a PHP snippet, set scope to Run everywhere โ the conditionals inside handle page targeting.
- 3The generated code uses
add_action('wp_head', function() { ... });with conditionals likeis_front_page(),is_singular('post'),is_page('contact'). - 4Test with Google Rich Results Test and Schema.org Validator after each snippet is activated.
- 1Go to Online Store โ Themes โ Edit Code. The tool specifies the exact file (e.g.
theme.liquid,snippets/product-schema.liquid). - 2Search the file for
application/ld+jsonbefore pasting. If a block exists for the same @type, edit it rather than adding a second one. - 3Generated Liquid uses
{% if template == 'product' %},{% if page.handle == 'contact' %}etc. Dynamic values:{{ product.title }},{{ product.price | money_without_currency }}.
bin/magento cache:flush after every change.- 1Create a PHTML template in your theme, e.g.
app/design/frontend/[Vendor]/[Theme]/Magento_Catalog/templates/product/schema.phtml. - 2Register via layout XML using the correct handle โ
catalog_product_view,cms_index_index,catalog_category_view,contact_index_index. - 3Use
$escaper->escapeHtml()for all output. Access data via$block->getProduct(). Usejson_encode($schema, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE). - 4Audit existing schema first:
grep -r "application/ld+json" app/design/frontend/andgrep -r "application/ld+json" vendor/magento/. - 5Flush and test:
bin/magento cache:flush && bin/magento cache:clean, then validate with Google Rich Results Test.
-
โPaste the sitemap index first, alwaysEven if you can't paste every child, pasting the index lets the tool infer page types from sitemap file names (post-sitemap.xml, product-sitemap.xml) and generates the child fields for you.
-
โSave session after every auditSessions auto-save to browser storage, but also click ๐พ to save a portable JSON file alongside the client folder. Next time: load the file, enter API key, run audit โ 10 seconds instead of 10 minutes of pasting.
-
โPaste 4โ5 page sources including Contact and AboutHomepage + contact page + about page + one product/service page + one blog post is the ideal set. Contact and About pages are used to extract real phone numbers, email addresses, and business addresses โ so generated schema uses actual values rather than
REPLACE_WITH_PHONE_NUMBERplaceholders. The more real data extracted, the less manual editing needed before deployment. -
โAPI response cut off or JSON errorIf you see a JSON parse error, try again โ the tool includes a repair routine that closes truncated JSON. If it fails repeatedly, reduce the number of page sources pasted (they increase prompt size).
-
โScore is indicative, not absoluteThe 0โ100 score reflects coverage vs. what's recommended for the site type. 75+ is solid. A low score means opportunity โ not a penalty.
-
โDon't copy from the rendered sitemap pageRankMath and Yoast render sitemaps as styled HTML tables. Ctrl+A on that page copies table HTML โ the tool handles this, but raw XML via Ctrl+U is cleaner and more reliable.
-
โAggregateRating is an opportunity, not a gapSchemaForge will not flag AggregateRating as missing in the score or issues count โ it requires real review data that most sites don't have wired up. It may appear in the output as an optional addition if a reviews system is detected. Only implement it once you have a live source of review data (a plugin, third-party feed, or Google reviews integration).
-
โDon't deploy without checking the Conflicts tabIf RankMath is active and you deploy an Organization block without disabling RankMath's output, the page will have two conflicting blocks. The Conflicts tab gives exact instructions per plugin.
-
M2Magento: audit native output before touching anythingMagento 2 core outputs Product and BreadcrumbList schema in vendor templates. Run
grep -r "application/ld+json" vendor/magento/first โ or paste a product page source into Section 3 so the tool detects it automatically.
REPLACE_WITH_PHONE_NUMBER-style placeholders โ easy to search for before deployment. Dynamic fields (product prices, article titles) always use CMS template variables.bin/magento CLI access. Confirm with the developer before auditing.