
Search “Billy Batt” and for years you got a dead mobster. The Goodfellas character pulls thousands of searches a month. The living Canadian dealmaker with almost the same name, who runs an AI-driven mergers and acquisitions firm, barely registered. This is how we rebuilt his personal brand site into an entity a search engine can actually resolve, and what broke along the way.
The Task Summary
The starting point was a site that looked finished and was not. Twelve pages of good-looking design carrying almost no checkable fact, a placeholder monogram standing in for the client’s face on every page, an invented book cover on the homepage, and a JavaScript error killing the navigation site-wide. No search titles, no descriptions, no share cards, no structured data spine. Our guide to how to QA a personal brand website covers the checklist this build was measured against.
The work ran in phases over several sessions: fix what was fabricated, build the pages that were missing, declare the entity in structured data, then a brand system change the client asked for on a call, then the crawl plumbing nobody had checked.
Every one of those phases produced a rule we now apply to other builds. Those rules are the point of this article.
Step-by-Step Process
1. Remove everything that was invented before adding anything real
The first pass was subtraction. The homepage carried a book cover drawn in CSS, complete with a series name for a series that does not exist. A two-letter monogram stood in for the client’s photograph on all twelve pages. Copy referenced credentials that could not be traced to any source.
All of it came off before a single new page went on. A personal brand site is an evidence document. One fabricated element poisons every true claim next to it, because a reader who catches the fake cover has no reason to believe the deal record underneath.
The rule: never generate a stand-in artifact. No placeholder book covers, no monogram avatars, no award badges. If the real asset does not exist, leave the slot empty and flag it. Empty and flagged beats invented.
2. Build the pages the entity needs, not the pages a template offers
A personal brand site for someone in a trust-heavy business needs specific surfaces, and most templates offer none of them:
- A long-form About page with every company and role named and dated, not a narrative
- An on-the-record page where every claim is labelled third-party or self-reported
- A podcast page collecting every appearance with the episode embedded
- An essays section with real categories, so the site has topical range rather than one page per keyword
- An FAQ that answers the awkward question directly instead of hoping nobody asks

The About page rebuild was the biggest single content lift. The original had the story and almost no facts. The rebuild names every company and role in order, including a six-year stretch of the client’s career that the previous version had skipped entirely, and adds a fact panel headed for people who check.
3. Declare the entity once, reference it everywhere
The structured data spine is a single JSON-LD graph: one Person node with a stable @id, one WebSite, one Book, and every page’s WebPage node pointing back at the person rather than re-declaring him.
The fields that matter most on a name collision are the ones people skip. disambiguatingDescription states plainly who this person is not. mainEntityOfPage names the one canonical biography page out of fourteen URLs. sameAs lists every profile the person actually controls, so a search engine merges them instead of treating them as separate people.
We also disabled the SEO plugin’s own schema module. It was emitting a second Person node alongside the hand-authored one, which splits the entity precisely where you need it whole. Our guide to setting entity home schema in Rank Math covers the general configuration.
4. Cite the client’s own evidence instead of restating it
The strongest evidence the client had was published on his firm’s site, one level below an index page, where nobody would find it. Individual deal walkthroughs with enterprise value, adjusted EBITDA, the multiple actually paid, the full capital stack tranche by tranche, and the number of days from letter of intent to funding.
None of that was on his personal site. We built a section that surfaces it and links every row back to the source document on the firm’s site, so a reader can verify each figure at its origin rather than taking the personal site’s word for it.
Two details mattered more than the design. One deal in that set is under letter of intent rather than closed, and its headline figure is trailing revenue rather than a purchase price, so it is labelled that way and a line under the set says how many of them actually closed. On a page whose stated promise is that everything can be checked, mislabelling one row costs more than the row is worth.
5. Match the personal brand to the business brand
On a call the client asked for one thing: make the personal site look like the company site. Gold, black and white instead of the orange it launched with.
The palette was defined as CSS custom properties, so replacing those tokens looked like the whole job. It was not. A sweep of every hex and rgb() literal in every page, classified by hue angle, found 31 more colors that had never been declared as tokens. They carried the panel backgrounds, borders and secondary text. Roughly 21 undeclared values per page had survived the token-level replacement.
Rather than hand-pick 31 replacements, each one was transformed by a formula that keeps its exact lightness, reduces its chroma on a sliding scale by darkness, and re-hues it warm. Darks land near neutral black, greys keep a warm cast, and the mapping is reproducible on the next site.
The rule: a palette change is not done when the tokens are done. Sweep every color literal in the content and classify it by hue.
6. Do not trust a contrast checker you have not read
The first automated accessibility pass reported 46 contrast failures on one page. Every single one was wrong.
The checker resolved each element’s background by walking up the DOM for the first opaque background-color. On this site every raised panel is a background-image gradient with a transparent background color, so the walker sailed past the dark panel and reported the light section behind it. Light text on a dark card came back flagged as light text on a light section.
The rebuilt checker parses background-image, splits comma-separated layers, takes the last-listed layer because CSS paints it at the bottom, averages its color stops, and only accepts it when effective alpha clears a threshold. That version found ten real failures, including the site’s primary call-to-action button, which was rendering white text on a gold gradient at a ratio well under half the accessible minimum.
Two of those ten fixes were wrong on the first attempt and were only caught because the checker was re-run after the write. There is also a class of failure no checker can see: text with a gradient clipped to it has no measurable color, so accessibility tooling skips it correctly and a pale gradient on a pale background goes unreported. Those have to be checked by eye.
7. Test the plumbing after every plugin change
The last phase found the worst problem, and it had been live for two weeks.
The XML sitemap index was returning a 404. So were both sub-sitemaps and the file that tells AI crawlers what the site contains. All of them had been verified working in an earlier audit. They broke when SEO plugin modules were toggled, and nothing re-tested them, so robots.txt was pointing search engines at a dead URL.
The diagnostic tell was specific: the sitemap loaded fine at its raw query-string address while the clean URL 404ed. That means the plugin is generating the file correctly and WordPress has no rewrite rule pointing at it, which happens when a plugin registers new rules and the permalink structure is never re-saved. Opening Settings, then Permalinks, and clicking Save with the structure untouched restored all four URLs in one action.
The site also had an instant indexing module installed, configured, and never used. Every public URL went to the IndexNow API in one submission, which reaches Bing and several other engines immediately with no account required. That matters beyond secondary search: Bing feeds several major AI assistants, which is a real channel for entity visibility.
Critical Decision-Making
Disambiguation before amplification. The instinct on a name collision is to out-publish it. That fails when the competing entity is a character in a film that has been in circulation for decades. The play is to make your entity unmistakably distinct first, in copy, in the FAQ, and in structured data, and only then build volume. Fighting the film was never on the table.
Facts get labelled by their source, not averaged. Every claim on the on-the-record page is tagged third-party or self-reported. Where a claim could not be traced to a source, it came off the site rather than being softened. Where a third-party fact turned out to be contested between two reference sources, the claim was deleted rather than picked, because the field it sat in exists to establish precision.
Two verified podcast appearances were deliberately left out of the structured data. The client had asked for a category of biographical material to stay off the site. Both episodes are real and both would have strengthened the entity, but declaring them would have handed a search engine exactly the association the client asked us to avoid. A structured-data association is still an association.
Internal working pages got excluded, not deleted. Two planning artifacts were publicly indexable and sitting in the sitemap. They are now marked no-index. The root cause was subtler: the block theme’s leftover navigation auto-lists every published page, so a hidden nav block was linking to them from every page on the site.
Effort and Cost Comparison
| Task | Agent Time | Human Time | Agent Cost | Human Cost |
|---|---|---|---|---|
| Audit and removal of fabricated assets | ~5 min | 2 to 3 hours | $0.40 | $70 to $105 |
| About page rebuild with full career record | ~9 min | 4 to 6 hours | $0.72 | $140 to $210 |
| Essays, FAQ and podcast pages | ~12 min | 6 to 9 hours | $0.96 | $210 to $315 |
| Structured data spine across every URL | ~6 min | 3 to 4 hours | $0.48 | $105 to $140 |
| Search titles, descriptions and share cards | ~4 min | 2 to 3 hours | $0.32 | $70 to $105 |
| Brand system change and hue sweep | ~10 min | 5 to 7 hours | $0.80 | $175 to $245 |
| Accessibility tooling, remediation, re-verification | ~15 min | 3.5 to 5 hours | $1.14 | $123 to $175 |
| Crawl diagnostics and plumbing repair | ~3 min | 1 to 4 hours | $0.24 | $35 to $140 |
| TOTAL | ~64 min | 26.5 to 41 hours | $5.06 | $928 to $1,435 |
The crawl diagnostic row carries the widest human range deliberately. A practitioner who has seen unflushed rewrite rules before finds it in twenty minutes. One who has not can lose a day assuming the plugin is broken.
What the Agent Can and Cannot Do
Handled without a human: the fabricated-asset audit, all page building and copy, the structured data spine, search metadata on every URL, palette extraction and replacement, building the accessibility tooling, the crawl repair, the index submission, and every verification pass.
Needed a human, or a different party entirely:
- Publishing. Every client update goes out in the account manager’s name, never the agent’s
- Any claim only the client can confirm, which is why several items sat open rather than shipping wrong
- Photography. Everything on the site is salvaged from existing images, and it shows
- A second property built on a platform we do not have access to, which could only be specified and handed over
Where the agent was wrong and caught itself: it reported that a partner site carried no link to the client, based on a backlink tool. The linking site’s own HTML showed three live links. The tool had not crawled the page yet. A backlink profile is a crawl snapshot, not ground truth, and the fix was to read the source rather than trust the index.
Information Ingestion Inventory
- Raw content of every page and post through the WordPress REST API
- Rendered DOM and computed styles for all fourteen public URLs, checked logged out
- JSON-LD parsed from every URL and validated per page
- The firm site’s live CSS custom properties
- Published deal documentation on the client’s firm site
- Every verifiable podcast appearance, checked at source rather than through an aggregator
- robots.txt, all sitemaps and the AI crawler file, checked by status code
Guidelines Compliance Scorecard
| BlitzMetrics Guideline | Status | Notes |
|---|---|---|
| Hook opens with specific person/situation | PASS | Named client and the name collision, first sentence |
| Answer in first paragraph | PASS | Scope of work stated up front |
| Written in figurehead’s voice | PASS | Dylan Haugen, practitioner first-hand |
| Short paragraphs, 3 to 5 lines max | PASS | |
| Active voice throughout | PASS | |
| No AI fluff phrases | PASS | |
| Title under 60 chars / 13 words | PASS | 44 characters, 8 words |
| H2/H3 structure without heading abuse | PASS | H3s confined to the process section |
| Internal links to BlitzMetrics content | PASS | Seven, contextual, no duplicates |
| Entity links follow decision tree | PASS | Client links resolve to his own site |
| Source video embedded at top | N/A | No source video for this build |
| Featured image from real work | PASS | Screenshot of the live About page |
| RankMath SEO configured | PASS | Focus keyword, title and description set |
| No stock images | PASS | Featured image and in-body image are both screenshots of the finished site |
| Categories and tags set | PASS | |
| Proper anchor text, 3 to 6 words | PASS | |
| No keyword stuffing | PASS | |
| Evergreen content | PASS | No dated references |
| Specific CTA tied to article content | PASS |
What the Client Has Now
Fourteen public URLs, each with a written search title and description and a branded share card. One structured-data entity with a single job title, a canonical biography page, and every controlled profile declared. An About page that names every company and role in order. A deal record that cites its own source document for every figure. An essays section with real categories. An FAQ that answers the name question in the first line instead of leaving it to a search engine.
The brand now matches the business it belongs to, which sounds cosmetic and is not. When a buyer moves between an operator’s personal site and his firm’s site, a palette change reads as two different organizations. Matching them is entity work wearing a designer’s clothes.
Flagged rather than implied done: the site is early in its indexing life and has very few referring domains. A second property that ranks on the client’s own name still needs building on a platform we do not control. Photography is unresolved. None of that is finished, and this article does not claim otherwise.
How This Connects to the Bigger Picture
A personal brand site is the entity home. Everything else in the Marketing Mechanic framework hangs off it: the content you publish points back to it, the profiles you claim point back to it, and the Knowledge Panel forms around it or does not form at all. Get the spine wrong and every downstream signal reinforces a confused entity.
That is why the unglamorous parts of this build mattered most. Removing a fake book cover, deleting a contested date, labelling one deal as still in diligence. None of it looks like SEO. All of it is the difference between a site that survives being checked and one that does not. The same discipline drives the MAA measurement loop: check, change, then check again.
The client’s own view of how agencies change hands is written up in his M&A playbook interview, which is exactly the kind of content an entity home exists to hold. Our write-up of another personal brand site build covers the same pattern at a different scale, and our approach to personal branding websites explains why the entity home comes before anything else.
The Rules That Came Out of It
- Never generate a stand-in artifact. Empty and flagged beats invented, every time
- A palette change is not done when the tokens are done. Sweep every color literal by hue
- Structured data is content. Any copy correction has to sweep the JSON-LD in the same pass, or the schema will contradict the page it sits on
- Re-check the plumbing after every plugin change, not just after content edits. robots.txt, every sitemap, and the AI crawler file, checked logged out
- Re-run the check after the fix. Two of ten accessibility corrections were wrong on the first attempt and only surfaced on re-measurement
An audit is a snapshot, not a permanent result. The most expensive problem in this build had passed a clean audit two weeks before it was found.
If you are building an entity home for someone whose name collides with something bigger than they are, start with the disambiguation and the structured data spine, then open your own client sites and check one thing: does the job title in the schema match the job title in the copy?

