From 1abf6d5fe9d3c7973a2632b1980c28f0667e376f Mon Sep 17 00:00:00 2001 From: Harlan Wilton Date: Wed, 7 Oct 2026 15:20:53 +1100 Subject: [PATCH] feat(seo): admit /vs/skills-sh to the index Harlan asked for the comparison to be indexable. It fails the measured volume bar, and the competitor brand rule would exclude it, so the admission records it as an owner-approved exception with the evidence and a review at the 2026-11-11 gate. --- layers/marketing/app/utils/page-admissions.ts | 4 ++++ test/unit/page-admissions.test.ts | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/layers/marketing/app/utils/page-admissions.ts b/layers/marketing/app/utils/page-admissions.ts index ee0b901c..9eb06b93 100644 --- a/layers/marketing/app/utils/page-admissions.ts +++ b/layers/marketing/app/utils/page-admissions.ts @@ -82,6 +82,10 @@ export const PAGE_ADMISSIONS: Readonly> = { targetQuery: 'claude code agent skill', admissionBar: '390 searches a month. The head term "claude skills" is served by the homepage and /skills.', }, + '/vs/skills-sh': { + targetQuery: 'skills.sh alternative', + admissionBar: 'Owner-approved exception, 2026-10-07: the competitor brand rule above would exclude it. No measured volume: the keyword provider holds no data for skills.sh queries, and Search Console shows five queries naming skills.sh at about one impression each over three months, none with "alternative". The homepage hero and Why band link it as the skills.sh alternative. Review at the 2026-11-11 gate: keep only if indexed with relevant query impressions.', + }, '/vs/context7': { targetQuery: 'context7 vs skills', admissionBar: 'The human-written template that experiment C rolls out to concept pages. No measured volume; kept as the control.', diff --git a/test/unit/page-admissions.test.ts b/test/unit/page-admissions.test.ts index d7bab190..59ce0ff1 100644 --- a/test/unit/page-admissions.test.ts +++ b/test/unit/page-admissions.test.ts @@ -5,7 +5,8 @@ describe('freeze audit', () => { it('indexes an admitted page and noindexes an audited page with no admission', () => { expect(pageRobots('/agents/codex')).toBe('index,follow') expect(pageRobots('/agents/windsurf')).toBe('noindex,follow') - expect(pageRobots('/vs/skills-sh')).toBe('noindex,follow') + expect(pageRobots('/verify')).toBe('noindex,follow') + expect(pageRobots('/vs/skills-sh')).toBe('index,follow') }) it('leaves pages outside the audit alone', () => {