By Saad Salman, fintech product manager at Keep Technologies · · Updated
Winning your own name is an entity problem

When I rebuilt this site, Google could already find me. The hard part was standing out from every other Saad Salman: a film director with a Wikipedia page, two doctors, a fabrics business, an industrial design student with the .co domain and a few hundred LinkedIn profiles. Winning your own name is an entity problem, not a discovery one. The search engine is not asking whether your page exists. It is asking which Saad Salman you are, and whether anyone else agrees.

This is the playbook I ended up with, including the part I got wrong the first time. It is also a Claude skill you can install in one line, and the install step is at the end.
Why a name behaves differently from a keyword
For a normal query, Google ranks pages. For a person's name it first resolves an entity, then ranks the pages it believes are about that entity. If it cannot tell you apart from your namesakes, your page never enters the second step, however well it is built. A new domain makes this worse: the namesakes have years of links and a Wikipedia page, you have a month-old site and a handful of profiles.
So there are two jobs. Make your own site unambiguous about who you are, and collect enough independent signals that say this is the one. Everything below serves one of those two jobs.
Step one: make the site unambiguous
The on-site setup is fast and mostly mechanical. A title tag that pairs the name with the role (Saad Salman | Fintech Product Manager: Cards, Payments and Banking). One H1 carrying the full name. A first paragraph that says name, role, employer and city in plain words. A JSON-LD graph with a Person node and a WebSite node, the Person carrying jobTitle, worksFor, alumniOf and a sameAs list of every profile you actually own. A self-referencing canonical on every page, a sitemap, and a verified Search Console property so you can watch what happens.

Two details matter more than they look. Give the employer an address on the web (worksFor with a url), because Keep Technologies is not the only Keep and the fitness app at keep.com is the one Google meets first. And add the same headshot everywhere: the site, LinkedIn, GitHub, the schema image field. One face, one name, one role, repeated.
What schema cannot do
Here is the part I got wrong. My About page had a full Person graph: job title, employer, alumni, sameAs links, the works. Textbook entity setup. It was also 162 words long, and Google skipped it anyway. It stayed out of the results for my own name while pages with no schema at all ranked above it.
Google does not care how good your schema is if there is nothing underneath it. Neither does an AI Overview deciding what to cite. Every canonical was in place, every field in the graph was filled in, and the page still deserved to get skipped. The schema was complete. The content was not.
So the skill now runs a content-quality pass before it lets you near structured data: word-count every key page (500 words minimum, 1,500 or more for anything meant to be a pillar), proofread it, and check whether two pages on the same site are quietly competing for one query. That last check caught something too. A FAQ answer I had added to About restated, almost verbatim, a list that already lived on my Experience page. Two pages splitting one answer help neither. I rewrote the FAQ as a summary with a pointer to the full list.
Step two: sort the queries by intent
I had been treating get found for my name as one problem. The queries that actually reach this site sort into four buckets. Someone typing my name wants consolidation: one page that settles which Saad Salman this is. Someone asking what I do wants a direct answer in the first paragraph. Someone comparing consultants wants a table. Someone ready to hire wants one obvious button. Writing the same kind of page for all four is how you serve none of them well, so the skill now asks which bucket a query falls into before deciding what the page should even look like.

Step three: collect signals that say this one
This is where the time goes, and it is the half that actually moves the rank. The rule is simple: put your domain in the machine-readable website field of every real profile you own, not just in the bio text. LinkedIn, GitHub, dev.to, Medium, Peerlist, Bluesky, whatever you use. A URL in a bio is prose. A URL in the website field is a link Google can follow and count.
Then republish. Every post on this site also goes to dev.to and Medium with a canonical pointing back here, so the reposts pass their signal home instead of competing. Open-source work counts too: the README of my mutual funds API links to this site, and GitHub lets a repo declare a homepage. If an employer or a product you built has a page that can name you, ask for the link. And nothing purchased, ever. A bought link is the one signal that can take the whole site down with it.
What does not apply, and what does
A lot of general SEO and answer-engine advice is written for B2B teams with a marketing budget, and most of it does not apply to a one-person site. Local SEO assumes a physical office or a service area. I have neither, so the skill now says so plainly and skips the Google Business Profile step instead of bolting one on.
Voice search does transfer: conversational long-tail phrasing, answers sized for an assistant to read aloud, and actually asking Siri and Google Assistant your own name to hear what comes back. I did that. The answers were technically correct and completely generic. Nothing in them said Saad Salman rather than any other product manager, which is a useful way to learn that the entity is not established yet.
Two more things made the cut. A free-first tool list, so a low-traffic site is not paying for a rank tracker it does not need. And a real question source, AnswerThePublic, so any FAQ I add answers questions people ask rather than ones invented to justify FAQPage schema.
Measure it, then wait
Rankings for a name move in days to weeks, not hours, and they move differently by country and device. The skill ships a small Search Console script that pulls the average position for your name every morning, free, from the property you already verified. Mine now runs as a scheduled task and writes a one-line report.

Then keep a cadence, because check on it sometime is not a plan: a weekly look at the rank, a monthly content and voice-assistant audit, a quarterly re-run of the off-site checklist and a fresh look at whether the FAQ questions are still the ones people ask.
For the record: my name sat at position 74 for saad salman at the end of August 2026, two weeks after the content fixes it was at 51, and it is still on page five. The skill's first rule is no guarantees, and I am not breaking it for a blog post. The namesakes have a decade of links. What changed is that the mechanism is honest now. It checks the content before it dresses it up in schema, and it tells you when a tactic does not apply instead of running it anyway.
Install it in one line
It is a Claude skill, MIT-licensed, works for people and for companies and drops straight into Claude Code. There is nothing to clone or configure. Open Claude Code and paste this into the chat:
Install this skill globally https://github.com/saadsalmankhan/entity-seo-skillIt pulls down the playbook and the Search Console rank script, and walks you through the on-site and off-site steps for your own name or brand. Take it, fork it, open an issue: github.com/saadsalmankhan/entity-seo-skill.

Written by
Saad SalmanFintech product manager in Lahore. I lead program management at Keep Technologies, where I launched the corporate card program with Mastercard, PTC and i2c, and I've shipped 20+ financial products across Canada, the UK, the EU and MENAP.I also consult on card programs. More about me.
Get new posts by email
Occasional writing on payments, fintech and building products. No spam, unsubscribe anytime.