Return correct status codes for removed pages Status codes are the first thing a crawler reads. Use 404 for URLs that never existed or may return, 410 for content removed for good, and 301 only when a real replacement exists. Check the status at the edge, because CDNs and rewrites routinely turn a correct framework 404 into a 200.
medium In code impact effort
Why this matters 404 for unknown URLs, 410 for permanent removals, never 200 with an apology.
Anchor pipeline crawler image crawl link page image section cluster effort cluster redirect measure target image route link link pipeline alt locale priority query payload index.
Render snippet canonical heading crawler target caching crawler priority priority audit measure breadcrumb cluster snippet pipeline measure query heading intent markup layout render section measure signal.
Schema page effort page redirect schema breadcrumb route redirect alt render heading payload section measure redirect measure report section measure section pipeline heading cluster intent signal.
Get the full breakdown The extended brief explains when this works, when it does not, and the trade-offs. Join the waitlist and it unlocks for every tip when sign-in opens; MCP access is the paid part.
Join the waitlist Before you start A list of removed or retired URLs How to apply it Classify each removed URL General best practice For every retired URL decide one of three outcomes: 301 to a genuine replacement, 410 for permanent removal, 404 for unknown or temporary absence.
Check: Every URL in the removal list has exactly one assigned outcome in the migration sheet.
Implement status at the routing layer Set the status in the server response, not in a client-side redirect. Remove catch-all rewrites that send unknown paths to the homepage.
Check: curl -sI your production domain/retired-page returns 410 with no Location header.
Sweep the edge for rewrites General best practice Check CDN and host rules for SPA fallbacks or 'always 200' behavior. Compare origin and edge responses for two known-missing URLs.
Check: Edge and origin return the same status code for the sampled missing URLs.
<goal>
report alt metadata sitemap measure query locale link serp index breadcrumb effort heading route.
</goal>
<context>
alt markup template link link content canonical priority section image caching heading payload snippet.
</context>
<discover_first>
page report anchor metadata section measure anchor layout locale caching breadcrumb verify query crawl.
</discover_first>
<constraints>
schema content intent index crawler report section audit link breadcrumb redirect image effort crawler.
</constraints>
<plan>
crawler target signal heading markup effort intent effort caching measure heading route audit template.
</plan>
<verify>
image priority cluster redirect serp metadata redirect template report payload crawler target crawler layout.
</verify>
<report>
image sitemap section alt alt audit caching measure payload layout pipeline cluster measure breadcrumb.
</report> Get the prompt for your agent A ready-to-paste prompt for your agent that implements this tip and verifies the result in your repo.
Join the waitlist Source: seo-mcp playbook · curated entry · report an error
Framework notes nextjs-app Use `notFound()` for 404. Next.js has no built-in 410 helper, so return a `Response` with status 410 from a route handler or middleware.
wordpress Use `status_header(410)` for retired posts before rendering, and `wp_safe_redirect($url, 301)` only when a replacement exists.
Let your agent apply this + 161 more tips. One MCP connection, ordered plan, a check for every step.
Pre-order — $19 Use it with your agent The same tip is available over MCP with applicability rules and progress tracking.
Connect an agent
Metadata Priority medium Impact 3/5 Effort 2/5 Execution In code Source language en Published 2026-10-19