DEV Community

Cover image for I Retired My "85% Knowledge Panel Probability" Claim. Then Google Built the Entity Anyway.
ookyet.eth
ookyet.eth

Posted on

I Retired My "85% Knowledge Panel Probability" Claim. Then Google Built the Entity Anyway.

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"
Enter fullscreen mode Exit fullscreen mode
{
  "result": {
    "@id": "kg:/g/11z806my44",
    "name": "Qifeng Huang",
    "@type": ["Person"]
  }
}
Enter fullscreen mode Exit fullscreen mode

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
  • SearchAction pointing 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:

  1. 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
  2. image — the reconciled avatar
  3. resultScore — rising an order of magnitude would be a display-confidence precursor
  4. 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)