Nine months ago I wrote a post on here claiming my ENS identity architecture had reached "85% Knowledge Panel trigger probability."
Two things happened since.
Google's Knowledge Graph actually minted an entity node for me. And I learned that the 85% number was fiction — mine.
This is the honest retrospective.
The timeline, with receipts
| Date | What happened |
|---|---|
| Aug 2025 | ookyet.com first indexed |
| Oct 2025 | Entity markup shipped: Person @graph, Dentity verification, ENS identifiers. The "85%" post |
| Jun 2026 | Search Console turned red: Q&A errors, Profile page: Invalid object type. Cleanup |
| Jun 28, 2026 | Fixed markup deployed. Then: hands off |
| Jul 2, 2026 | Knowledge Graph Search API returns a machine-minted Person node for ookyet |
| Jul 7, 2026 | Search Console fully green: ProfilePage valid, indexed pages up, zero 404s |
Still no Knowledge Panel. Keep reading — that part matters.
What Google actually built
You can reproduce this:
curl "https://kgsearch.googleapis.com/v1/entities:search?query=ookyet&limit=10&key=YOUR_API_KEY"
{
"result": {
"@id": "kg:/g/11z806my44",
"name": "Qifeng Huang",
"@type": ["Person"]
}
}
Three details in that tiny response taught me more than anything I shipped in 2025.
The /g/ MID is machine-minted. You can't register one, buy one, or submit one. Google's entity reconciliation creates it when enough independent sources agree that a person exists. This is the mechanical prerequisite for a Knowledge Panel — the entity has to exist in the graph before anything can be displayed about it.
The node's name is my real name, not my handle. My site declares name: "ookyet". The node says "Qifeng Huang" — pulled from the high-authority anchors (LinkedIn, ORCID), not from my self-declaration. Third-party corroboration outweighs anything you say about yourself. Expected, and honestly a relief: the graph is working as designed.
The Knowledge Graph holds 8 distinct people named Qifeng Huang. Query any of them by real name and you get a crowded namespace. Query ookyet and exactly one node comes back — mine. A coined handle turns out to be a cross-namespace disambiguation key: every external signal converts cleanly because Google never has to ask "which one?"
What I got wrong in the last post
The percentage. There is no such metric.
Google does not expose a "Knowledge Panel probability," a candidate state, or a trigger score. Anyone quoting you a percentage — including 2025 me — computed it from their own weighted checklist and dressed it up as measurement. I've since rewritten the open-source tooling to call the number what it is: a signal-completeness checklist of things you maintain. Saturating it does not trigger anything.
The mindset behind the number was the deeper bug. I treated the Knowledge Panel as something you trigger with sufficiently clever markup. It isn't. It's a notability decision Google makes about independent third-party coverage, and markup cannot force it. What markup can do — all it can do — is make sure that when signals arrive, they reconcile into one clean entity instead of a fog of ambiguity.
And some of that clever markup actively hurt. The June 2026 Search Console cleanup retired, with prejudice:
-
FAQPage/HowTo— Google removed those rich results; emitting them now just generates errors - A synthetic "Knowledge Panel candidate" node — markup that described my ambitions instead of the page. Google's policy is blunt: markup must reflect visible content
- JSON-LD for press coverage that was still "planned" — asserting articles that didn't exist yet. That's fabricated notability evidence, pointed at the exact system I was trying to earn trust from
-
SearchActionpointing at a search page my site doesn't have
Every one of those felt like optimization when I shipped it. Every one was debt.
What survived
The boring parts. The parts that are just schema.org used correctly:
One Person entity, referenced everywhere. A single @id, with every page — ProfilePage, articles, breadcrumbs — pointing at it. Handle as name, ENS as alternateName + identifier, never two competing self-descriptions.
One ProfilePage, with a typed mainEntity. Not a bare @id reference — Search Console rejects that with "Invalid object type." Carry @type and name explicitly.
sameAs quality over quantity. Live, identity-consistent profiles only. LinkedIn and ORCID matter disproportionately — they're the reconciliation sources Google actually reads, and unlike Wikipedia or Wikidata they're attainable without notability. Don't force wiki entries; a deleted self-created item is a negative signal.
Fix once, then freeze. The June 28 fix went from deploy to fully green Search Console in 9 days — with zero tweaks in between. Every markup edit resets Google's re-evaluation clock. The discipline is the feature: patience is doing work while you aren't.
What the node looks like today
Sparse. No detailedDescription, no image, no url, resultScore around 0.0001. A newborn entity.
I check it weekly (daily is pointless — same-day queries return byte-identical results), reading the fields in the order they typically grow:
-
url— Google binding my site to the node as its entity home. Driven by corroboration already shipped; this is the milestone I'm actually watching -
image— the reconciled avatar -
resultScore— rising an order of magnitude would be a display-confidence precursor -
detailedDescription— sourced from encyclopedic references, so for a niche entity: probably never. It isn't a blocker for the rest
No change week over week is the normal case. Confidence for a small entity compounds like interest — source quality times time times stability — and none of those factors respond to impatience.
The honest scoreboard
Real, today: position 1 for my name, sitelinks, an image pack, AI Overview describing me as an entity with my real name and ENS resolved together, and a persistent MID in the Knowledge Graph.
Not real, today: a Knowledge Panel. Possibly not ever — Google may simply never grant panels to entities at my scale, and no architecture changes that.
I used to frame the panel as the prize. I now think the prize is already collected: an identity that machines resolve unambiguously, backed by evidence anyone can verify. The panel, if it comes, is a bonus rendered on top of work that already paid out.
Everything above is documented in the open-source repo — including the retired strategies, kept as documented failures with dates, because the failures are the useful part: github.com/ookyet/web3-identity-seo
I'll write the next chapter when the node grows a url.
Top comments (0)