The site was written for half its own audience
StellarReach sells to the people who build websites for a living, from freelancers working alone through to agencies with a team of reps. Across its 34 public pages, agency and its variants appeared 293 times. Freelance appeared 23 times, and 14 of those were on two pages about rival tools. The exact phrase web developer appeared once, on the privacy policy.
The symptom
What the source said
This entry quotes no Search Console figures, and the reason is worth stating plainly rather than burying: the pages it is about did not exist until the day it was written. There is no baseline for them yet. What there is instead is the site’s own source, counted at the commit immediately before the change, a measurement anyone can reproduce from the repository.
A ratio of roughly thirteen to one is not a stylistic preference. It is a site that has decided who it is talking to, and the decision does not match who it sells to.
The finding
What the structure showed
Counting words says something is off. It does not say what to do. Four structural facts did:
There was a door for one audience and not the other. A /for-agencies landing page existed with no counterpart. A freelancer who reached it read about a seat and an inbox per rep, sends rotating across a team, and a market-exclusivity add-on: every argument on the page priced for a company with employees.
Eight pages were named after a nav label. Features - StellarReach, Pricing - StellarReach, FAQ - StellarReach, Blog - StellarReach. Nobody searches those words. Google rewrites a weak title anyway, so the cost is not that the title is wrong: it is that the page hands the search engine nothing to work from.
28 of 34 public pages carried no structured data at all, including all seven comparison pages. Those are the highest-intent pages on the site: someone searching for an alternative to a tool they already pay for is shopping, not browsing.
Three blog posts and no hub. The site’s own marketing plan had specified a pillar page with supporting posts around it. Only the supporting posts had been written, so there was nothing for them to link into and nothing accumulating their authority.
The obvious keyword here is the one we deliberately did not target.
The audience is web developers, so web developer looks like the term to rank for. It is not. Search intent for that phrase is dominated by two groups: people learning to code, and people looking to hire a developer. Neither buys prospecting software. Ranking for it would have delivered traffic that could never convert, and the effort would have been indistinguishable from progress right up until someone checked what the visitors did next.
The commercial intent sits in the job to be done: how to get web design clients, web design leads, without cold calling. So the messaging speaks to web developers and the keywords target getting clients. That decision is written into the project’s own marketing notes rather than left in someone’s head, because the obvious wrong move stays obvious and someone will propose it again.
The change
What shipped
One pull request, reviewed and merged the same day. Four changes, in descending order of how much they matter:
A second door. /for-freelancers, the mirror of /for-agencies: one seat rather than a team, the flat-price offer, and prospecting that keeps running through a busy delivery week. The two pages link to each other, so whichever one a visitor lands on can hand them to the other.
Titles that match a search. Eight pages retitled, with og:title and twitter:title moved in step: a page retitled in the browser tab but not in the link preview is worse than one left alone, because the two now disagree.
The cluster that was specified but never built. A pillar plus three supporting posts, interlinked in both directions with the three that already existed. The pillar targets the head term; the older post keeps the long-tail variant it already owned.
Structured data on the 28 pages without it. Breadcrumbs throughout, a collection type on the two hubs, and about/contact types where those are actually true. Two things were deliberately left out: the product type on every feature page, since the home and pricing pages already declare it once and repeating it per page is noise; and FAQ markup on any page without a visible FAQ on it.
The call
Recorded before deployment
Written on the day the change merged, with the baseline fixed and the expected outcome stated in advance, including the way this one is most likely to go wrong.
- EXPECT Indexation is the first thing to check, and the first thing that can fail. The five new URLs have no inbound links from any other site. Discovery runs through the sitemap and internal links only, so a page that never gets crawled will look exactly like a page that ranks badly, and the fixes are different.
- EXPECT The eight retitled pages move before the five new ones. They are already indexed and already have history; a title is re-evaluated on the next crawl. If anything shifts inside a month, it should be those, not the new posts.
- TARGET The new pillar becomes the page Google picks for the head term: how to get web design clients. Before this change the only page on the site addressing that phrase was the older post about avoiding cold calls.
- FALSIFIES If both the pillar and the older post rank for the same query, the differentiation failed. They would be splitting signal rather than compounding it. The agreed remedy is recorded now, before anyone is invested in a different one: tighten the older post’s title toward its long tail. Not merge them, not delete either.
- TIMING Weeks to months, on a domain with little authority. Two checks are already scheduled rather than left to memory: indexation on 20 August 2026, rankings and the cannibalisation question on 5 October 2026.
One category of number is absent throughout: anything from Search Console. The pages are new, so there is no before-figure to compare against and no honest way to quote one. Writing “impressions up” here would have been the easiest sentence in this document and the only dishonest one. The next entry will carry real figures; this one does not pretend to.
Nothing measurable yet: the change merged the day this was written. The first honest read is the indexation check on 20 August 2026, and the first ranking read on 5 October 2026. This block gets the actual figures then, whichever way they go, and the prediction above will not be edited to match them.
The check
How it was verified
Most of this change is copy, which is exactly the kind of work that gets shipped without verification because there is apparently nothing to verify. There was. A title is duplicated across three tags, a new page has to be reachable through the routing layer, and structured data is invalid in ways no browser complains about.
So the whole suite ran (6,366 tests, none failing) and four checks were written against the published output directly: that every JSON-LD block on all 39 public pages parses, that all 36 sitemap URLs resolve to something servable, that every internal link resolves against the routing rules or a real file, and that the retitled pages carry the same title in the tab and in the link preview.
The test that mattered was the one nobody would have thought to write.
Adding a link to the site’s footer broke a test in a different part of the codebase, and the reason is the sort of coupling that only a test finds. The public guide is generated from the logged-in help pages, and it lifts its header and footer from one of the marketing pages. That generator carries an allowlist of paths considered public; anything not on it has its link stripped, on the reasoning that a logged-out reader should not be sent to a page behind the login wall.
The new page was not on that list. Without the test, the footer link would have shipped everywhere on the site except the one page where it was silently removed: no error, no warning, and no reason for anyone to look.