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.
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.