Designer · Developer · Operator

Launch
with Ben



Build Notes

Entity SEO Audit: Why AI Search Couldn't See My 5 Sites

I ran 5 sites and 58 articles; to crawlers and AI models I didn't exist. The entity-coherence audit that fixed it, plus a checklist for your site.


I ran 5 websites. Wrote 58 articles. Built 3 SaaS products. Spent months promoting all of it.

Then I asked a simple question about itbroke.dev, a monitoring SaaS I built from scratch and one of the products I’d been actively promoting: “Can a crawler tell who built it?”

The answer was no. Not reliably. Not from structured data. Not from meta tags. Not from any machine-readable signal on any of my 5 sites.

I was a ghost with a portfolio.

The test

I built an auditor that checks entity coherence across sites. It tests whether a person exists as a structured, machine-readable identity that crawlers and AI can actually parse. Not whether content exists. Whether the builder exists.

The audit asked one question across 5 layers: Can a machine connect “Ben Peetermans” to the things Ben Peetermans built?

What I saw: 5 live sites, press kits, articles, a projects page listing everything I’ve shipped

What crawlers saw: 5 disconnected websites with no structured Person entity, no author attribution, no cross-site links, and bylines that just said “Ben”

Five layers, all zeros

The audit checked structured data, HTML meta tags, AI crawler signals, visual attribution, and cross-site links. Every layer came back empty.

1
JSON-LD. No Person schema on any site. Organization schemas existed on 2 sites but with no founder property and empty sameAs arrays. Zero creator declarations.
2
HTML meta. No <meta name="author"> anywhere. No article:author. No rel="me". No twitter:creator. Article bylines said “Ben” with no last name.
3
AI signals. llms.txt files existed on 4 sites but none mentioned my full name or linked to a press kit. An AI reading these files couldn’t attribute the product to a person.
4
Visual attribution. Footers said “Launch With Ben” but never “Ben Peetermans.” No social links. My /about page returned a 404. Kit pages existed but weren’t linked from any navigation.
5
Cross-site links. My products didn’t link back to me. My portfolio didn’t link to the live product URLs. The entity web was completely disconnected.

The headline finding: “Ben Peetermans” did not exist as a structured entity on any of 5 websites.

An AI asked “Who built itbroke.dev?” would have to scrape HTML and hope. There was no machine-readable path from any product to a person.

Why this matters now

When someone asks ChatGPT or Perplexity “who built itbroke.dev,” the answer comes from entity signals: Person schema, sameAs links, author meta tags. Not from scanning your homepage and guessing.

LLM-powered search pulls from structured data. Google’s Knowledge Graph connects people to things through structured signals. If you don’t provide those signals, you don’t exist in the graph. Your products float in isolation. Your articles have no author. Your portfolio is a list of things that belong to nobody.

This is the difference between an AI confidently answering “Ben Peetermans built itbroke.dev, SerpDelta, and LayerView — he’s a solo builder with 20 years of experience” and responding with “I don’t have enough information to answer that.”

What I fixed

The entire fix took about 2 hours across the main hub site. Here’s what shipped:

Person JSON-LD on every page. The single highest-impact fix. Created the entity that didn’t exist:

{
  "@type": "Person",
  "@id": "https://launchwithben.com/#person",
  "name": "Ben Peetermans",
  "sameAs": [
    "https://www.linkedin.com/in/...",
    "https://itbroke.dev",
    "https://serpdelta.com",
    "https://layerview.dev"
  ]
}

The @id creates a reusable identity anchor. Every other schema on every other site can now reference this single Person entity instead of creating disconnected copies.

Organization schema with founder. Connected the business to the person:

{
  "@type": "Organization",
  "founder": {
    "@type": "Person",
    "@id": "https://launchwithben.com/#person"
  },
  "sameAs": ["https://itbroke.dev", "https://serpdelta.com", "..."]
}

The rest of the fixes:

  • <meta name="author" content="Ben Peetermans"> on every page
  • 6 rel="me" links in the <head> (LinkedIn, Threads, all product domains)
  • Article JSON-LD with author referencing @id: #person
  • article:author OG meta pointing to /about
  • Footer: “Built by Ben Peetermans” + Press Kit link + social icons
  • Created /about page with ProfilePage schema
  • Created humans.txt
  • Updated llms.txt with full name and press kit link
  • Fixed article bylines from “Ben” to “Ben Peetermans”

I also found bugs: breadcrumb schema was producing doubled URLs (https://example.comhttps://example.com/learn), and article:published_time was outputting unix timestamps instead of ISO 8601. Both the kind of silent failures you only catch by actually checking what the code produces instead of trusting that it works.

The checklist

This is the generalized version. Run it against your own site, especially if you’re a solo builder with multiple projects.

Entity Coherence Checklist

Do

  • Person JSON-LD exists on your main site with @id, name, url, sameAs linking to all your profiles and projects
  • Organization schemas on every product site include a founder property referencing your Person @id
  • <meta name="author"> on every page uses your full name, not a first name, not a brand name
  • rel="me" links in your <head> point to your social profiles and product domains
  • Article pages have article:author OG meta and Article JSON-LD with author referencing your Person @id
  • Footer attribution on every site says “Built by [Full Name]” with a link to your hub site
  • /about page exists and doesn’t 404. This is your canonical author destination
  • Cross-site links go both directions: hub → products AND products → hub
  • llms.txt mentions your full name and links to your press kit or about page
  • humans.txt exists with your name and site URL

Every item is a signal. Alone, each one is small. Together, they create the entity graph that tells machines who you are and what you built.

That checklist covers the half you control. The other half is off-site: the same name, URL, and description repeated on domains you don’t own, which is the only reason directory listings are worth an afternoon. I vetted the free ones and put them in a tool.

Verify it worked

Shipping fixes without checking is the same mistake that got me here. After you implement the checklist, confirm machines can actually read what you added:

  1. Google’s Rich Results Test. Paste any page URL. Check that your Organization schema parses without errors. If sameAs or founder don’t appear, they’re malformed. (Note: Google doesn’t surface a rich result for the Person type, so use the next tool to validate that one.)
  2. Schema.org Validator. More detailed than Google’s tool, and it validates every type including Person. Shows every property and flags missing recommended fields.
  3. Ask an AI. Literally ask ChatGPT or Perplexity “Who built [your-site.com]?” If the answer is confident and correct, the signals are landing. If it hedges or gets it wrong, something’s missing.
  4. View source. Search for application/ld+json in your page source. Count the Person references. Check that @id matches across schemas. Check that article:published_time is ISO 8601, not a unix timestamp (I had that bug).

If you skip this, you’re doing what I did: promoting in the dark. Spending time and money making things people can find, while machines can’t connect any of it to you.

The good news: unlike most SEO, this isn’t a game. It’s just telling the truth in a format machines can read. Two hours of work, and now the question “Who built itbroke.dev?” has a structured answer.


Related:

Ben Peetermans

Ben Peetermans

I build MVPs and run ad campaigns with AI, and I write these notes from real projects. Twenty years shipping for the web. If you want someone who works with these tools every day to build yours, that is what I do.