by A1 SEO Glasgow
SchemaForge โ€” Schema Audit & Generator
Audits existing structured data, identifies gaps and plugin conflicts, generates implementation-ready JSON-LD by deployment scope, and produces a branded client-facing HTML report โ€” for WordPress, Shopify, and Magento 2.
WordPress Shopify Magento 2 JSON-LD RankMath Yoast Session Save Client Report
S
Summary
What this tool does and when to use it

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.

๐Ÿ”
Audit existing schema
Detects @types from Yoast, RankMath, Shopify native, WooCommerce, Magento 2 and others โ€” including @graph format. Extracts real contact data (phone, email, address) from pasted page source so generated schema uses actual values, not invented placeholders.
โšก
Generate implementation code
PHP for Code Snippets (WP), exact .liquid edits for Shopify, PHTML/layout XML for Magento 2 โ€” all with page conditionals and pretty-printed JSON-LD.
โš ๏ธ
Conflict detection
Plugin-specific conflict warnings with exact resolution steps โ€” which types to skip, which to disable in the plugin, and what to check before deploying.
๐Ÿ“„
Branded client report
One click generates a standalone HTML report with the client's name, schema score, all implementation code, and next steps โ€” ready to send.
๐Ÿ’พ
Session save & restore
Save all inputs (sitemaps, page sources, audit result) to JSON. Reload next time โ€” just re-enter the API key and run a fresh audit without re-pasting everything.
๐Ÿ“‹
Grouped output
Schema grouped into Sitewide, Templates (product, blog, collection), and Individual Pages โ€” so each block goes exactly where it belongs.
1
Step-by-Step Usage
How to run a full audit from scratch
  • 1
    Fill in Site Information
    Enter 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.
  • 2
    Select the CMS
    Click 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.
  • 3
    Paste Sitemap XML
    Open the sitemap URL in your browser (usually /sitemap.xml or /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.
  • 4
    Paste 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.
  • 5
    Tick 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.
  • 6
    Load Session (optional)
    If you've audited this site before, click ๐Ÿ“‚ Load Session to restore a previously saved .json file. 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.
  • 7
    Run Audit & Generate Schema
    Click 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.
  • 8
    Download 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 a schemaforge-[client]-[date].json file. Load this next time to skip re-pasting everything โ€” just enter the API key and re-run.
2
Getting the Sitemap XML
The right way to copy sitemap content
โ„น๏ธ
The tool accepts raw XML, rendered HTML sitemaps (copied straight from the browser page), and plain text URLs one per line. Raw XML via Ctrl+U is always the most reliable โ€” but all three formats work.
Standard sitemap (single file)
  • 1
    Open example.com/sitemap.xml in your browser
  • 2
    Press Ctrl+U โ€” opens the raw XML source in a new tab
  • 3
    Ctrl+A โ†’ Ctrl+C โ†’ paste into Sitemap 1
RankMath / Yoast sitemap index
  • 1
    Open 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.
  • 2
    For each child, click Open โ†— โ†’ Ctrl+U โ†’ paste into that field. Focus on post-sitemap, page-sitemap, product-sitemap. Skip image-sitemap and news-sitemap.
  • 3
    The URL count in the preview updates as you paste each field. You can add more fields manually with + Add another sitemap.
โš ๏ธ
Sites behind StackCDN or aggressive WAFs block Ctrl+U from certain browsers โ€” try a private/incognito window or a different browser. As a fallback, Ctrl+A on the rendered sitemap page (the styled HTML table) also works โ€” the tool extracts URLs from the table links automatically.
3
Session Save & Restore
How to avoid re-pasting everything next time

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.

Saving a session
  • 1
    After an audit completes, the session is automatically saved to browser storage. You don't need to do anything for this.
  • 2
    To save a portable file, click ๐Ÿ’พ Save Session on the Schema Output screen. This downloads a schemaforge-[client]-[date].json file you can keep alongside the client folder.
Restoring a session
  • 1
    From 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.
  • 2
    From a JSON file: click ๐Ÿ“‚ Load Session on Step 1 and pick the saved .json file. All fields restore immediately.
  • 3
    After restoring, enter your API key (it is never saved for security) and click Run Audit to generate a fresh report with the same inputs.
๐Ÿ”‘
The API key is deliberately excluded from session files. It must be re-entered each session. This is intentional โ€” session files are meant to be shareable and stored in client folders.
4
Reading the Output
What each results tab contains

After the audit completes, results appear across six tabs. The schema score and issue count are shown above the tabs.

Overview
Sitewide
Templates
Individual Pages
Conflicts
Implementation
  • O
    Overview
    Schema score (0โ€“100), a 2โ€“3 sentence audit summary, and a table of detected page types with planned schema coverage. Start here.
  • S
    Sitewide
    Schema for every page โ€” typically Organization and WebSite with Sitelinks Searchbox. Deploy once and it covers the whole site. Click any group to expand the pretty-printed JSON-LD and CMS implementation code.
  • T
    Templates
    Schema scoped to page templates โ€” Product, Article, CollectionPage, Service etc. Uses PHP conditionals, Liquid template checks, or Magento layout handles to fire only on matching pages.
  • I
    Individual Pages
    One-off schema for specific pages โ€” Contact, About, FAQ, Homepage specifics. Targeted by page slug/ID in WP, page.handle in Shopify, or full_action_name layout handle in Magento 2.
  • C
    Conflicts
    Plugin-specific warnings. Each entry names the plugin, the affected @type, the risk, and the exact resolution. Always check this tab before deploying anything.
  • โš™
    Implementation
    Step-by-step deployment guide for the selected CMS โ€” conditional targeting examples, de-duplication patterns, and cache-flush instructions for Magento 2.
๐Ÿ“„
Click โฌ‡ Download Report to generate a standalone client-facing HTML file. It includes the client's business name in the header, the schema score with all groups and pretty-printed code blocks, conflict warnings, and a Next Steps section. Safe to send directly to a client.
!
Conflict Avoidance
What to check before deploying any schema
๐Ÿšจ
Never have two JSON-LD blocks for the same @type on the same page. Google will process both and may surface the wrong one, suppress rich results, or flag a manual action. Always audit what's already on the page before adding anything.
Plugin / SourceSchema it generatesWhat 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.
5
Implementation
Deploying the generated code on WordPress, Shopify, and Magento 2
WordPress โ€” Code Snippets plugin
  • 1
    Install the free Code Snippets plugin. It adds PHP without editing theme files โ€” snippets survive theme updates.
  • 2
    Copy 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.
  • 3
    The generated code uses add_action('wp_head', function() { ... }); with conditionals like is_front_page(), is_singular('post'), is_page('contact').
  • 4
    Test with Google Rich Results Test and Schema.org Validator after each snippet is activated.
add_action('wp_head', function() { if ( !is_front_page() ) return; echo '<script type="application/ld+json">'; echo json_encode([ /* schema array */ ]); echo '</script>'; }, 5);
Shopify โ€” Theme .liquid files
โš ๏ธ
Always duplicate your theme before editing code: Online Store โ†’ Themes โ†’ ยทยทยท โ†’ Duplicate. Work on the duplicate.
  • 1
    Go to Online Store โ†’ Themes โ†’ Edit Code. The tool specifies the exact file (e.g. theme.liquid, snippets/product-schema.liquid).
  • 2
    Search the file for application/ld+json before pasting. If a block exists for the same @type, edit it rather than adding a second one.
  • 3
    Generated Liquid uses {% if template == 'product' %}, {% if page.handle == 'contact' %} etc. Dynamic values: {{ product.title }}, {{ product.price | money_without_currency }}.
{% if template == 'product' %} <script type="application/ld+json"> { "@context": "https://schema.org", "@type": "Product", "name": "{{ product.title | escape }}", "offers": { "@type": "Offer", "price": "{{ product.price | money_without_currency }}", "priceCurrency": "GBP" } } </script> {% endif %}
Magento 2 โ€” PHTML Templates & Layout XML
โš ๏ธ
Always work in a custom theme. Run bin/magento cache:flush after every change.
  • 1
    Create a PHTML template in your theme, e.g. app/design/frontend/[Vendor]/[Theme]/Magento_Catalog/templates/product/schema.phtml.
  • 2
    Register via layout XML using the correct handle โ€” catalog_product_view, cms_index_index, catalog_category_view, contact_index_index.
  • 3
    Use $escaper->escapeHtml() for all output. Access data via $block->getProduct(). Use json_encode($schema, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE).
  • 4
    Audit existing schema first: grep -r "application/ld+json" app/design/frontend/ and grep -r "application/ld+json" vendor/magento/.
  • 5
    Flush and test: bin/magento cache:flush && bin/magento cache:clean, then validate with Google Rich Results Test.
<!-- layout XML: catalog_product_view.xml --> <referenceContainer name="content"> <block class="Magento\Framework\View\Element\Template" name="schema.product" template="[Vendor]_[Theme]::product/schema.phtml" /> </referenceContainer> <?php /* PHTML */ ?> <script type="application/ld+json"> <?= json_encode([ '@context' => 'https://schema.org', '@type' => 'Product', 'name' => $escaper->escapeHtml($block->getProduct()->getName()), ], JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE) ?> </script>
6
Tips & Common Issues
Practical notes from real usage
  • โœ“
    Paste the sitemap index first, always
    Even 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 audit
    Sessions 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 About
    Homepage + 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_NUMBER placeholders. The more real data extracted, the less manual editing needed before deployment.
  • โš 
    API response cut off or JSON error
    If 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 absolute
    The 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 page
    RankMath 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 gap
    SchemaForge 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 tab
    If 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.
  • M2
    Magento: audit native output before touching anything
    Magento 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.
โ†’
Next Steps
After the audit is complete
Download and send the client report โ€” use the โฌ‡ Download Report button. The HTML file is self-contained and includes all schema groups, code blocks, and next steps. No login required to open it.
Validate deployed schema โ€” use Google Rich Results Test on each page type after deployment. Check for warnings on required vs recommended properties.
Monitor in GSC โ€” after 1โ€“2 weeks, check Google Search Console โ†’ Enhancements for new schema types. GSC surfaces errors (missing required fields) and valid items separately.
Re-run after content changes โ€” new post types, product categories, or page templates need schema coverage too. Load the saved session and re-run.
Re-run after plugin updates โ€” Yoast and RankMath update their schema output occasionally. After a major plugin version bump, re-audit to catch anything duplicated or broken.
Populate dynamic fields โ€” the generated schema uses template variables for address, phone, opening hours, and prices. Update these with real values before deploying to production.
i
Comments & Constraints
Known limitations and operational notes
๐Ÿ”‘
API key required. Uses the Anthropic Claude API โ€” paid account or active free credits needed. The key is entered per session and is never saved to browser storage or session files. Get one at console.anthropic.com โ†’ API Keys.
๐Ÿ“‹
Paste-only sitemap input. Auto-fetch was removed โ€” CORS restrictions from CDNs (StackCDN, Cloudflare WAF) make it unreliable for many client sites. Manual paste via Ctrl+U works every time. The tool accepts raw XML, rendered HTML, and plain text URLs.
โฑ
Audit takes 30โ€“90 seconds. Claude processes the full context โ€” sitemap structure, existing schema, plugins, page types โ€” before generating output. Longer waits usually mean a large prompt from many page sources pasted.
๐Ÿ› 
Phone, email and address are extracted automatically from pasted Contact/Homepage/About page source. Where the tool can find them, they go directly into the generated schema. Where it cannot, it uses REPLACE_WITH_PHONE_NUMBER-style placeholders โ€” easy to search for before deployment. Dynamic fields (product prices, article titles) always use CMS template variables.
๐Ÿ”ด
Magento 2 requires server access. Unlike WP Code Snippets or Shopify's theme editor, Magento deployment requires SSH/SFTP, a custom theme, and bin/magento CLI access. Confirm with the developer before auditing.