podbor-minuta.ru has about 600 listing pages for apartments, grouped by metro, district, room count and price. They are built ahead of time into ready HTML so search engines can read them without running JavaScript. Each has its own title, description and a real list of apartments.
In Google Search Console these pages were marked as indexed. Over 90 days they got zero impressions. Zero. Other sections, building cards and articles, did get impressions.
I chased the wrong ideas first: thin content? crawl budget on a young domain? duplicates? The titles and descriptions were fine and the pages were in the index. So I looked at what search engines actually receive - the ready HTML.
I fetched a page and stripped the head and scripts to see only the visible text:
curl -s https://podbor-minuta.ru/novostroyki/metro/domodedovskaya/do-10-mln \
| sed -e 's/<script.*script>//g'
Instead of a list of apartments there was one thing: "Log in with Telegram to use the service." A sign-in form. It went straight into the ready HTML. No page title, no list, just a prompt to sign in.
The reason is how rendering works. All content is wrapped in an access check:
<AuthGate>{children}</AuthGate>
When pages are built ahead of time there is no user and no session. For pages treated as non-public, the check shows the sign-in form. That form is what gets saved to the file. The title and description are prepared separately, so they stayed correct. That is why the pages looked healthy in the index while the search engine read the sign-in form as their content.
The check itself is a list of public paths:
const PUBLIC_PATH_PREFIXES = ['/project/', '/articles/', '/discounts/'];
function getRouteTier(path) {
if (PUBLIC_PATHS.includes(path)) return 'public';
if (PUBLIC_PATH_PREFIXES.some((p) => path.startsWith(p))) return 'public';
return 'authenticated';
}
The paths /novostroyki/ and /developer/ were never added. An unknown path is treated as closed, which means the sign-in form.
The fix is two lines:
const PUBLIC_PATH_PREFIXES = ['/project/', '/articles/', '/discounts/', '/novostroyki/', '/developer/'];
After a rebuild all these pages return the real title, intro and apartment list instead of the sign-in form.
What I took from this.
Prebuilt pages inherit your access check. They are built as a guest. What a logged-out visitor sees is what gets frozen into the file, and that is what the search engine reads.
If a whole section gets zero impressions, it is almost always technical, not content. One page low in results is competition. A whole pattern at zero - look at the ready HTML, not the page in your browser where you are logged in and everything looks fine.
The title and the body can disagree. A correct title and description can hide a broken body.
The reliable guard is not the list entry but a build-time check: no prebuilt page should contain the sign-in form. Then this kind of bug cannot ship silently.
600 pages were invisible to search for months. The fix was two lines. The expensive part was trusting the titles instead of looking at the page.
The site is podbor-minuta.ru, daily price monitoring for Moscow new builds.
Top comments (0)