Skip to content

SEO weekly: redirect 10 legacy doc paths with broken backlinks - #889

Closed
CahidArda wants to merge 1 commit into
mainfrom
seo/weekly-2026-10-05
Closed

CahidArda wants to merge 1 commit into
mainfrom
seo/weekly-2026-10-05

Conversation

@CahidArda

Copy link
Copy Markdown
Contributor

Ahrefs evidence

Site Audit (crawl 2026-10-04, project "Upstash" 9854245) confirms these 10 paths return 404. Site Explorer's broken-backlinks report (target upstash.com, same date) shows each still carries a live external backlink from a pre-reorg doc URL structure:

Path (404) Referring page (DR)
/howto/developerapi pkg.go.dev/github.com/upstash/terraform-provider-upstash/v2 (DR91)
/overall/durability habr.com/en/articles/568872 (DR88)
/overall/consistency habr.com/en/articles/568872 (DR88)
/redis/sdks/javascriptsdk/developing-or-testing zenn.dev/kunimasu/articles/3b9ea52cf330ad (DR84)
/vector/sdks/rag-chat codesandbox.io/examples/package/@upstash/rag-chat (DR87)
/vector/sdks/ts/semantic-cache ithub.global.ssl.fastly.net/ankitvirdi4/awesome-llm-cost (DR81)
/vector/features/metadatafiltering pkg.go.dev/github.com/upstash/vector-go (DR91)
/ratelimit/overview ithub.global.ssl.fastly.net/gladw-in/online-ide (DR81)
/redis/ratelimit (no live backlink at Lite-plan sample depth; included since /redis/overview and /ratelimit/overview siblings confirm the renumbering pattern)
/redis/overview ithub.global.ssl.fastly.net/gladw-in/online-ide (DR81, anchor "@upstash/redis")
/docs/overall/getstarted (double-/docs typo URL) medium.com/upstash/express-session-with-serverless-redis-6da068c0b4c8 (DR94)

docs.json's redirects array already has ~85 entries mapping old doc paths to their current pages (e.g. /features/restapi → /redis/features/restapi, /qstash/pricing → /qstash/overall/pricing), confirming the mechanism works. These 10 paths were gaps in that list, not new breakage.

Note: last week's PR (#875) attempted one of these (/howto/developerapi) but was closed without merging — it's included again here along with 9 more found this week.

Change

Add 10 entries to docs.json's redirects array, each mapping a 404'ing legacy path to its current page (verified to exist on disk):

  • /howto/developerapi → /common/account/developerapi
  • /overall/durability → /redis/features/durability
  • /overall/consistency → /redis/features/consistency
  • /redis/sdks/javascriptsdk/developing-or-testing → /redis/sdks/ts/developing
  • /vector/sdks/rag-chat → /vector/integrations/ai-sdk
  • /vector/sdks/ts/semantic-cache → /vector/sdk/semantic-cache-js
  • /vector/features/metadatafiltering → /vector/features/metadata
  • /ratelimit/overview → /redis/sdks/ratelimit-ts/overview
  • /redis/ratelimit → /redis/overall/ratelimit
  • /redis/overview → /redis/overall/getstarted
  • /docs/overall/getstarted → /redis/overall/getstarted

No body copy changed, no pages deleted, no existing URLs changed.

Expected effect

Removes 10 confirmed 404s from Site Audit's error count and recovers the backlink equity (several DR85+) currently pointing at dead pages onto their live equivalents.


🤖 Generated with Claude Code

https://claude.ai/code/session_01TwKppSTytW5dxHYBexKi2n


Generated by Claude Code

Ahrefs Site Audit (crawl 2026-10-04, project "Upstash" 9854245) and
Site Explorer's broken-backlinks report show these 10 paths 404ing
while still carrying high-DR backlinks (github.com DR97, pkg.go.dev
DR91, medium.com DR94, among others) from pre-reorg doc URLs. Each
now redirects to its current equivalent page, following the existing
pattern already used for ~85 other legacy paths in this file.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TwKppSTytW5dxHYBexKi2n
@mintlify

mintlify Bot commented Oct 5, 2026 •

Copy link
Copy Markdown

Preview deployment for your docs. Learn more about Mintlify Previews.

Project Status Preview Updated
upstash 🟢 Ready View Preview Oct 5, 2026, 6:23 AM

💡 Tip: Enable Automations to automatically generate PRs for you.

@context7

context7 Bot commented Oct 5, 2026 •

Copy link
Copy Markdown
Contributor

Docs7 for upstash.com

Result Status Action
Deployment ✅ Ready Open preview
Content review ✅ Passed. No problems found. View findings

Commit a7d9315 · Updated 2026-10-05 06:25 UTC · View build details

@context7
context7 Bot temporarily deployed to Docs7 Preview: seo/weekly-2026-10-05 October 5, 2026 06:25 Destroyed

Copy link
Copy Markdown
Contributor Author

Mintlify Validation (upstash) - link-rot is failing with "Found 52 broken links" — all 52 are pre-existing links to qstash/api-reference/* and workflow/api-reference/* pages that don't exist in this repo (e.g. qstash/api-reference/messages/publish-a-message, workflow/api-reference/runs/cancel-workflow-run), none of which this PR touches (this PR only adds 10 entries to docs.json's redirects array).

This is not caused by this PR: the same check fails identically on the base branch. The most recent merge to main, #879 (commit 675aaa9), shows this exact check (Mintlify Validation (upstash) - link-rot, run 111538355203) also failing, with no changes to the qstash/workflow API reference pages in that PR either.

No fix for the missing API-reference pages exists yet that I'm aware of — generating them is a larger, unrelated piece of work (an entire OpenAPI reference section), out of scope for this redirect-only PR. Leaving this PR as-is; happy to pick up the API-reference gap as a separate ticket if useful.


Generated by Claude Code

CahidArda pushed a commit that referenced this pull request Oct 7, 2026
The previous commit on this branch used the wrong source-path
convention (prepending /docs instead of matching it): browser URL
upstash.com/docs/<X> maps to a docs.json source of exactly <X>, not
/docs/<X>. Verified against last week's (still-open, unmerged)
#889, which used this same convention for the identical
/howto/developerapi and /docs/overall/getstarted paths.

Also drops the /docs/docs/howto/connectwithtls entry: the existing
/docs/howto/connectwithtls entry (added in a8b013a) already covers
that exact broken URL, so Ahrefs is most likely reporting a stale
backlink-recrawl date rather than a live 404.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UHLV9Qgnt4vX8F5qTC7fXd
CahidArda pushed a commit that referenced this pull request Oct 19, 2026
…#914)

These three PRs are from earlier weekly runs of the same routine and
were still open/unmerged, each adding overlapping or complementary
legacy-docs redirects. Folded their entries into this PR instead of
leaving four separate overlapping PRs open:

- Deduplicated exact-match sources already covered here (/howto/developerapi,
  /overall/durability, /overall/consistency, /docs/overall/getstarted).
- Added the bare (no /docs prefix) variants #889 had that this PR was
  missing (metadatafiltering, semantic-cache, ratelimit/overview,
  ratelimit, redis/ratelimit, redis/overview).
- Corrected 3 destinations where this PR's guess and #889's guess
  disagreed, verified against the actual file tree:
  - /ratelimit, /redis/ratelimit -> /redis/overall/ratelimit (a real
    file, redis/overall/ratelimit.mdx, missed earlier - not the
    TS-specific SDK overview page).
  - /redis/overview -> /redis/overall/getstarted (generic "overview"
    with no SDK named shouldn't default to the TS SDK).
  - metadatafiltering kept pointing at /vector/features/filtering
    (titled "Metadata Filtering") rather than #889's
    /vector/features/metadata (titled "Metadata and Data" - a
    different, more general page).
- Added #889's 2 fully-unique entries (redis/sdks/javascriptsdk/..,
  vector/sdks/rag-chat) and #914's 5 fully-unique entries
  (realtime/box getstarted->quickstart renames, qstash/features/topics,
  and 2 qstash API-reference redirects verified against qstash/openapi.yaml's
  endpoint summaries, which are not backed by static files so a plain
  file-existence check missed them).

#889 and #903 will be closed as superseded. #914 will be closed as
superseded (it was reported "shipped" in last week's ticket but never
merged).

Copy link
Copy Markdown
Contributor Author

Closing as superseded — this was output from an earlier weekly run of the automated SEO review routine. All 10 redirects from this PR (plus corrections to 3 of them, verified against the file tree) have been folded into #927, along with #903 and #914, to avoid 4 overlapping open PRs doing the same kind of fix. See #927's description for the full consolidation notes, including what changed.


Generated by Claude Code

@CahidArda CahidArda closed this Oct 19, 2026
CahidArda added a commit that referenced this pull request Oct 23, 2026
* seo: add redirects for legacy docs paths with high-DR backlinks

Ahrefs Site Explorer (upstash.com, broken-backlinks, 2026-10-18) found
dofollow backlinks from DR75-94 domains (Cloudflare docs, StackOverflow,
Medium, Habr, Go pkg docs, DeepWiki) pointing at legacy /docs/* paths
that now 404. /docs/howto/developerapi is also in the current internal
404 crawl (0 traffic, but 2 external backlinks at DR79/91). Added
redirects from each legacy path to its current canonical page, plus
the bare (no /docs prefix) variant for each, following the existing
dual-entry convention already used in this file (e.g. "/box/overall/stream"
and "/docs/box/overall/stream" -> "/box/overall/agent").

Two of the reported broken paths (/docs/howto/connectwithtls and
/docs/features/restapi) already had matching redirects in this file,
so no new entries were added for those - Ahrefs' backlink index just
hasn't recrawled since the fix shipped.

* seo: consolidate redirects from older open seo-weekly PRs (#889, #903, #914)

These three PRs are from earlier weekly runs of the same routine and
were still open/unmerged, each adding overlapping or complementary
legacy-docs redirects. Folded their entries into this PR instead of
leaving four separate overlapping PRs open:

- Deduplicated exact-match sources already covered here (/howto/developerapi,
  /overall/durability, /overall/consistency, /docs/overall/getstarted).
- Added the bare (no /docs prefix) variants #889 had that this PR was
  missing (metadatafiltering, semantic-cache, ratelimit/overview,
  ratelimit, redis/ratelimit, redis/overview).
- Corrected 3 destinations where this PR's guess and #889's guess
  disagreed, verified against the actual file tree:
  - /ratelimit, /redis/ratelimit -> /redis/overall/ratelimit (a real
    file, redis/overall/ratelimit.mdx, missed earlier - not the
    TS-specific SDK overview page).
  - /redis/overview -> /redis/overall/getstarted (generic "overview"
    with no SDK named shouldn't default to the TS SDK).
  - metadatafiltering kept pointing at /vector/features/filtering
    (titled "Metadata Filtering") rather than #889's
    /vector/features/metadata (titled "Metadata and Data" - a
    different, more general page).
- Added #889's 2 fully-unique entries (redis/sdks/javascriptsdk/..,
  vector/sdks/rag-chat) and #914's 5 fully-unique entries
  (realtime/box getstarted->quickstart renames, qstash/features/topics,
  and 2 qstash API-reference redirects verified against qstash/openapi.yaml's
  endpoint summaries, which are not backed by static files so a plain
  file-existence check missed them).

#889 and #903 will be closed as superseded. #914 will be closed as
superseded (it was reported "shipped" in last week's ticket but never
merged).

* seo: give product/SDK name to 47 pages sharing a generic title

Ahrefs Site Audit flags duplicate_title on exactly 17 pages titled
"Getting Started" and 30 pages titled "Overview" (project 9854245,
crawl 2026-10-18) - these counts match a full repo search exactly, so
this is the complete set, not a sample.

These are each-product's SDK/getstarted/overview landing pages with a
copy-pasted placeholder title and no product or SDK name, so Google
sees the same <title> for e.g. Redis, QStash, Vector and Search's
getting-started pages, and separately for their SDK overview pages -
including several with real traffic (redis/overall/getstarted: 862
visits/mo, qstash/overall/getstarted: 534, workflow/getstarted: 312,
introduction: 215, redis/overall/compare: 247).

Renamed each page's title to include its product/SDK/feature name
(e.g. "Overview" -> "Redis TypeScript SDK Overview", "Getting Started"
-> "QStash Getting Started"), so every page now has a unique,
descriptive <title>. No body copy, URLs, or nav structure changed -
only the `title` frontmatter field on each page.

* chore(llms): regenerate llms.txt and llms-full.txt

* seo: give unique titles to the two "Compare" pages

Ahrefs Site Audit (project 9854245) flags duplicate_title on
redis/overall/compare (247 visits/mo) and qstash/overall/compare (26),
which both use the literal title "Compare". Give each a product-specific
title, keep the sidebar label as "Compare" via sidebarTitle, and add the
missing meta description on the Redis page.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RAhS4rWaMVuMCaTUJKgz3P

* chore(llms): regenerate llms.txt and llms-full.txt

* seo: keep short sidebar labels on retitled pages via sidebarTitle

The longer, product-specific titles from aa3ed8e (e.g. "QStash Python
SDK Examples Overview") also showed up as sidebar labels, which is
redundant inside an already-scoped nav group. Add sidebarTitle with each
page's previous label ("Overview", "Getting Started") to all 47 pages, so
the sidebar is unchanged vs main while <title> and JSON-LD keep the
unique titles. Verified on the Docs7 preview that sidebarTitle is honored:
the two Compare pages (eb0044f) render "Compare" in the sidebar and the
full title in <title> and BreadcrumbList.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RAhS4rWaMVuMCaTUJKgz3P

* docs: 1 review fix for #927 (broken links) (#933)

* chore(llms): regenerate llms.txt and llms-full.txt

* seo: product-specific titles for quickstarts and other generic docs pages

Quickstart pages were titled with only the framework or platform name
("App Router", "Laravel", "Next.js"), so search results showed e.g.
"App Router - Upstash Documentation" with neither Redis nor Next.js in
it, and the same title was reused across products (three "Cloudflare
Workers", two "Next.js", two "App Router", ...). Retitle them to
"<Product> with <Framework>" (e.g. "Upstash Redis with Next.js (App
Router)", "QStash with Next.js", "Upstash Workflow with FastAPI").

Also retitle feature/help pages that have search traffic or rankings but
generic titles, per Ahrefs Site Explorer (2026-10-22): Redis FAQ ("upstash
redis" #4, 2.5k/mo), Global Database, Connect Your Client, REST API,
Search Queries, QStash Queues / Use Cases / DLQ / Flow Control / Schedules
/ Local Tunnel ("localtunnel" #10), and the remaining cross-product
duplicate titles (Changelog, Quickstart, FAQ, Features, Security, Pricing,
Read-only Token, ...). Fix the Workflow Datadog and Prometheus pages,
which were titled as QStash integrations.

All pages keep their previous label as sidebarTitle, so the sidebar is
unchanged. Add meta descriptions to the 24 Redis pages whose generated
description was the "If you are an AI agent..." tip (Ahrefs Site Audit,
crawl 2026-10-20).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RAhS4rWaMVuMCaTUJKgz3P

* seo: title Workflow monitoring pages as Workflow & QStash integrations

The Workflow Datadog and Prometheus pages document the shared QStash
metrics integration, so name both products instead of only Workflow.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RAhS4rWaMVuMCaTUJKgz3P

* seo: keep the docs landing page titled Overview

Per review on #927: leave the landing page title unchanged. The duplicate
the rename was meant to fix is resolved by redis/search/introduction now
being titled "Redis Search Introduction", and no other page uses
"Overview" anymore.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RAhS4rWaMVuMCaTUJKgz3P

* seo: fix four quickstart descriptions and tighten titles from self-review

Self-review of #927 (four parallel reviewers covering all 156 changed
pages) confirmed every sidebar label is unchanged vs main, every new
title matches its page and is unique, and only frontmatter changed.

Fixes from the review:
- Descriptions that overstated the page: Koyeb (not a "globally scaled"
  deploy; it deploys from Git or a container), Azure Functions (deploys
  with Functions Core Tools, not the Azure CLI), Next.js App Router (no
  "create a database" step), DigitalOcean (reword around the shutdown
  date instead of a call to migrate before it).
- Name the product in titles that still left it out: Upstash Redis /
  Search / Vector Getting Started, Upstash Redis Keyspace Notifications,
  Upstash Terraform / Pulumi Provider Overview, Upstash Developer API
  Getting Started, and the four Redis Search operator overviews.
- Match Google's casing: "Google Cloud Run functions".

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RAhS4rWaMVuMCaTUJKgz3P

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: context7[bot] <236830434+context7[bot]@users.noreply.github.com>

This branch was successfully deployed

1 active deployment
Docs7 Preview: seo/weekly-2026-10-05 — a7d93157 Deployed Oct 5, 2026 by context7[bot]
staging — a7d93157 Deployed Oct 5, 2026 by mintlify[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants