Repository navigation
fix(registry): return 404 for missing skill pages - #317
Merged
Merged
Conversation
Any made-up /gh/<owner>/<repo>/<skill> URL answered 200 with a thin page and a canonical to the homepage. Google filed 2,621 of them as soft 404s, and the open URL space wastes a small crawl budget. A missing Skill now answers 404 with noindex and no canonical. A page with no Skill never canonicalises to the homepage.
Contributor
🤖 MERGED
GitHub merged this pull request.
c2dfa9ee-4f18-4422-9126-b3765697f500 Selected findings run after merge and open separate pull requests. |
1 task done
harlan-zw
added this pull request to stack #319
September 30, 2026 04:43
This was referenced Sep 30, 2026
`nuxi preview --port 5678` starts wrangler on 8787 for the Cloudflare preset, so Playwright timed out waiting for 5678. The Worker also read an empty D1 under .output, so every Skill API call failed with 500 and a missing Skill page rendered its error state with status 200. The script now applies local migrations and runs wrangler dev against the same local D1 that `pnpm dev` uses. A fresh checkout gets a migrated, empty D1.
The page sets no canonical for a missing Skill, but nuxt-seo-utils adds a self canonical to every page that is not a Nuxt error. That is harmless on a 404. The spec now fails only when a canonical names another URL, which is the homepage bug the PR fixes.
Collaborator
Author
|
🤖 Harlan Agent Kit Agent: checked by hand on head 43da1e4, since CI does not run e2e. Built with
|
A transient API error rendered a real Skill page as 200 noindex, which could drop it from Google. The failed state now answers 503 with Retry-After and emits no robots directive, so Google retries.
Collaborator
Author
|
🤖 Harlan Agent Kit Agent: checked by hand on head 544034d, since CI cannot cover it.
|
harlan-zw
removed this pull request from stack #319
September 30, 2026 09:09
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
❓ Type of change
📚 Description
Search Console (2026-09-30) lists 2,621 soft 404 pages. Any made-up
/gh/<owner>/<repo>/<skill>URL answered 200 with a thin page,noindex, and a canonical to the homepage. The URL space is unbounded, so it also wastes a small crawl budget. The page already said "Skill not found"; only the status and canonical were wrong.A pure
resolveSkillPageState(_tagunion) now decides status, robots, and canonical, andSkillDetail.vueapplies it during SSR.source_resolved = 0)Retry-After: 300Decisions:
source_resolved = 0, and the existing middleware already sets 410. The page now agrees./gh/some-nonexistent-ownerand/gh/some-nonexistent-owner/repo. No change there.The Playwright harness never started locally.
nuxi preview --port 5678runs wrangler on 8787 for the Cloudflare preset, and the Worker read an empty D1 under.output.start:playwright:webservernow applies local migrations and runswrangler devon 5678 against the D1 thatpnpm devuses.Loose ends:
noindex,follow, so a transient error (about 290 "D1 DB is overloaded" in September) could drop a real page. It now answers 503 withRetry-After: 300and no robots directive, so Google retries and keeps the URL.sourceGoneanswers 410, as before.