Yes, I Put the Schema Where You Could See It. On Purpose.

Cartoon of a blogger shrugging beside a laptop full of schema code while a group of AI bots and crawler robots point and laugh

About Will

I run Tygart Media, an AI-first agency that gets businesses cited and recommended by AI assistants — and I write about what we do, including what breaks.

Connect on LinkedIn →

I had an audit run on the oldest content on this site this week. Pages, posts, links, bylines, search descriptions, the works. It came back with a ranked list of problems, and near the top, flagged as a defect readers can see, was this:

Visible raw JSON-LD schema code printed as text in the post body.

Across the whole site, it found 197 posts doing it.

Cartoon crawler robot stamping FLAGGED on a blog post full of visible code while the blogger gives a sheepish thumbs-up
My own audit, doing exactly what I asked it to do. Rude.

And I’ll be honest, my first reaction wasn’t “oops.” It was closer to “hey, I did that on purpose.”

What you’re looking at

If you’ve scrolled to the bottom of some of my older posts, you’ve seen it: a block of curly braces, "@context": "https://schema.org", a headline, an author, a publisher, a date. It’s structured data. The machine-readable summary of what the page is, who wrote it, and who published it.

Normally that lives in a <script type="application/ld+json"> tag. Readers never see it, and crawlers pick it up behind the scenes. I know how to do it that way. Plenty of these same posts had it that way too.

I also put a copy out front, in the body, where anyone could read it.

Before: the end of “Your Competitors Are Optimizing for Google. You Should Be Optimizing for ChatGPT.” with its Article schema printed as visible text, curly quotes and all
Before. The article ends, the schema begins. Those curly quotes are lovely typography and terrible JSON.

Why I did it

This didn’t come out of nowhere. Back when I published these, I’d already been at it a while: for about a year before that, my everyday workflow was screenshotting schema and photos and pasting them into AI tools to get help with them. That was on my own desk, not on the website. But do that long enough and you get in the habit of thinking about the page as something a machine reads, not just something a person reads.

When it came time to publish these posts, my reasoning was simple. Not everything that reads a web page reads it the way Google does. Screen readers, accessibility tools, and whatever crawler or AI agent happens to show up next don’t all go digging through script blocks. Some of them only take in the text on the page.

So I thought: if the structure matters, and I was betting heavily that it did, especially for AI and answer engines, then why hide it? Put it where every reader, human or machine, could get to it. Treat it as part of the content, not an invisible attachment.

It was also a demonstration. I write about getting businesses understood by machines. Showing the actual markup on the page was a way of saying: this is what that looks like. Nothing up my sleeve.

The fair criticism

Now, I’m stubborn, not blind. A few things are fair game here.

A wall of JSON is not friendly to a human reader. If you came for a local SEO playbook and finished on forty lines of braces and quotation marks, I get it if you thought the page was broken. The audit literally measured one of these blocks running about 2,100 pixels tall on a phone. That’s a lot of scrolling for metadata.

What a screen reader actually does with a block of JSON is a fair debate. My intent was access. Whether reading out a pile of punctuation counts as access is a fair thing to argue about, and I’m not going to pretend I settled it.

The copies didn’t stay clean. WordPress likes to “help.” Some of the visible blocks picked up curly quotes and line breaks along the way. That’s charming in prose and useless in JSON. A machine trying to parse those blocks as data would choke.

So the audit isn’t wrong that it’s a problem today. It’s just wrong about why it’s there. It wasn’t an accident. It was a choice, and the choice has run its course.

Why it’s coming down now

Here’s the part that makes this easy. The stack caught up.

This site runs Rank Math, and Rank Math now outputs proper Article and BreadcrumbList schema on every post, in the head of the page, where it belongs. That means the visible copy isn’t carrying any weight anymore. It’s a duplicate. Worse, some of these posts were carrying three versions of the same facts: Rank Math‘s, an older inline script block, and the visible one, and they didn’t always agree on things like the modified date.

When the system does the job properly, the demonstration becomes clutter.

Then and now cartoon: a blogger holding a sign of raw code, then a Rank Math badge as robots applaud
Same guy, same idea. The plugin just does it without the sign.

What we’re doing about it

  • Audit first. Nothing gets touched without a list. The audit covered the 50 oldest items on the site, and a separate site-wide scan found the full 197.
  • Delete the visible blocks. No rewriting, no reformatting. The fix is deletion, and the duplicate inline Article scripts in those same posts go at the same time.
  • Let Rank Math own schema. One source of truth for structured data. If a page ever needs custom schema, it goes through Rank Math‘s schema settings, not pasted into the post.
  • Look at the page like a human. Every fixed post gets checked live in a browser afterward. The code should be gone, and the article should end where the article ends.

The cleanup of the oldest posts is happening now. The rest of the 197 get their own pass after that.

The actual lesson

I’m not going to tell you I was wrong to try it. I had a reason. You just didn’t know it, and to be fair, neither did the audit.

But a reason has a shelf life. What made sense back when I published these doesn’t have to make sense now, and it’s worth checking every once in a while whether your clever idea is still doing its job or just sitting there being clever.

Mine was sitting there. So it’s coming down.

If you spot a stray curly brace at the bottom of one of my posts in the meantime, consider it a collector’s item.

Track the AI tools you actually use
Live, vendor-neutral prices & limits for ChatGPT, Claude, Gemini, Perplexity and more — and we’ll email you the moment your tools change price or limits. Free, no hype.
See the live AI tracker →or set up your alerts

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *