Chapter 7 of 14

Who Is Behind This Page

Two pages answer a question equally well. One is cited, the other is not. The difference is usually not the prose — it is that one page says who wrote it, in a form a machine can resolve, and the other is anonymous.

The problem

An answer engine is about to repeat something to a user, in its own voice, and it will be blamed if the something is wrong. So before it quotes you, it wants to know what you are: a company with a real presence, a person with a history, or an anonymous page that appeared last Tuesday.

This is a resolution problem, not a trust-me problem. The engine is trying to connect your page to an entity it already knows about — and if it cannot, the safest thing it can do with your excellent paragraph is not use it.

Valid is not the same as complete

Most structured-data tools answer one question: does your JSON-LD parse and satisfy the required fields? That is validity, and validity is a low bar. This is valid:

{
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": "How Freddy stores your notes"
}

It passes every validator and tells an engine nothing it could not have guessed from the <h1>. No author. No publisher. No dates. No way to connect this page to anything else in the world.

Sjá checks validity and completeness, and reports them separately, because they fail for different reasons and have different fixes. Validity is a bug. Completeness is an omission — and omissions are what keep you from being resolved.

The publisher entity

The single highest-value thing on this page is the publisher block, and it has four parts that do different jobs:

"publisher": {
  "@type": "Organization",
  "name": "Wireable",
  "url": "https://freddy.app",
  "logo": "https://freddy.app/logo.png",
  "sameAs": [
    "https://github.com/wireable",
    "https://www.linkedin.com/company/wireable"
  ]
}
  • name — and it must be spelled identically everywhere on your site. Chapter 8 will show you how many spellings you actually have.
  • url — anchors the entity to a domain.
  • logo — an absolute URL to an image that resolves.
  • sameAs — the part that does the actual resolving. These are links to profiles that already exist in the engine's world. They turn “an organisation calling itself Wireable” into “that Wireable, the one with a GitHub account and 200 commits and a LinkedIn page that agrees”.

If you do nothing else in this chapter, add sameAs. It is four lines and it is the difference between a claim and a corroborated claim.

Dates that agree

Sjá cross-checks the dates it can find: the datePublished and dateModified in your JSON-LD, dates in meta tags, and visible dates in the page text. When they disagree it says so.

This sounds pedantic and is not. Freshness is a real input to both ranking and retrieval, and disagreement is a signal that something is automated badly. Freddy's changelog said “Updated 12 September 2026” in the text while its dateModified read 2026-03-04 — the day the template was written and then never touched again. From outside, that is a page claiming to be current while its own metadata says it has been abandoned for six months.

Generating schema without inventing it

Sjá can generate FAQPage and Article markup from the page you analysed — and it builds it from the page's own content, deterministically, with no model involved.

That constraint is the feature. If the page has no question-and-answer pairs, no FAQ markup is produced, and it tells you why instead of writing questions you never answered. This matters because invented structured data is worse than none: it is a machine-readable statement that your page contains something it does not, which is the precise definition of a mismatch between markup and content — the thing search engines penalise.

A tool that refuses is telling you something. “No FAQ found on this page” is not a failure of the generator. It is a finding: if you want FAQ markup, write the FAQ. The markup describes the page; the page does not exist to justify the markup.

What you learned

  • Citation is an entity-resolution problem. An engine that cannot tell who you are will not repeat what you said.
  • Valid is a low bar; complete is the bar. They fail differently and are reported separately.
  • sameAs does the resolving. Four lines that turn a claim into a corroborated one.
  • Dates must agree with each other, or your page claims to be current while its metadata says otherwise.
  • Generated schema comes from your content or not at all. Invented markup is worse than missing markup.
Next: in Chapter 8 you stop working one page at a time: a crawl of the whole site, an issue inventory sorted by how often each thing is wrong, and the duplicates you cannot see from inside a single page.