Repository navigation
seo: redirects + product-specific titles for 157 docs pages - #927
Merged
Merged
Conversation
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.
|
Preview deployment for your docs. Learn more about Mintlify Previews.
💡 Tip: Enable Automations to automatically generate PRs for you. |
Contributor
|
Docs7 for upstash.com
Commit |
context7
Bot
temporarily deployed
to
Docs7 Preview: seo/weekly-2026-10-19
October 19, 2026 06:32
Destroyed
…#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).
This was referenced Oct 19, 2026
context7
Bot
temporarily deployed
to
Docs7 Preview: seo/weekly-2026-10-19
October 19, 2026 08:03
Destroyed
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.
context7
Bot
temporarily deployed
to
Docs7 Preview: seo/weekly-2026-10-19
October 19, 2026 11:03
Destroyed
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
context7
Bot
temporarily deployed
to
Docs7 Preview: seo/weekly-2026-10-19
October 21, 2026 09:43
Destroyed
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
context7
Bot
temporarily deployed
to
Docs7 Preview: seo/weekly-2026-10-19
October 22, 2026 05:21
Destroyed
context7
Bot
temporarily deployed
to
Docs7 Preview: seo/weekly-2026-10-19
October 22, 2026 11:01
Destroyed
Contributor
There was a problem hiding this comment.
🟡 Changes recommended
The landing-page title still collides with another published page, leaving the PR’s title-uniqueness objective incomplete.
1 open issue
What changed in this PR
This PR improves documentation discoverability by consolidating legacy redirects from earlier SEO fixes and replacing generic page titles while preserving sidebar labels.
Changes:
- Adds 32 redirects for legacy documentation URLs.
- Retitles 49 pages, preserves their sidebar labels, and adds a Redis comparison meta description.
- Repairs the Terraform API-key link and synchronizes the LLM documentation exports.
| File | Description |
|---|---|
| workflow/steps.mdx | Gives the steps overview a Workflow-specific title. |
| workflow/getstarted.mdx | Gives the Workflow landing page a descriptive title. |
| workflow/features/wait-for-event.mdx | Adds a feature-specific overview title. |
| workflow/features/retries.mdx | Adds a retries-specific overview title. |
| workflow/features/invoke.mdx | Adds an invoke-specific overview title. |
| workflow/features/flow-control.mdx | Adds a flow-control-specific overview title. |
| workflow/features/failure-callback.mdx | Adds a failure-callback-specific overview title. |
| workflow/features/dlq.mdx | Adds a Workflow DLQ overview title. |
| workflow/basics/serve.mdx | Identifies Workflow Serve in the title. |
| workflow/basics/client.mdx | Identifies Workflow Client in the title. |
| workflow/agents/overview.mdx | Adds a Workflow Agents overview title. |
| workflow/agents/getting-started.mdx | Adds a Workflow Agents getting-started title. |
| vector/sdks/ts/getting-started.mdx | Identifies the Vector TypeScript SDK. |
| vector/sdks/py/gettingstarted.mdx | Identifies the Vector Python SDK. |
| vector/sdks/php/getting-started.mdx | Identifies the Vector PHP SDK. |
| vector/overall/getstarted.mdx | Adds a Vector-specific getting-started title. |
| vector/api/get-started.mdx | Identifies the Vector REST API. |
| search/sdks/ts/getting-started.mdx | Identifies the Search TypeScript SDK. |
| search/sdks/py/gettingstarted.mdx | Identifies the Search Python SDK. |
| search/overall/getstarted.mdx | Adds a Search-specific getting-started title. |
| redis/search/recipes/overview.mdx | Identifies Redis Search recipes. |
| redis/search/query-operators/field-operators/overview.mdx | Identifies field operators in the title. |
| redis/search/query-operators/boolean-operators/overview.mdx | Identifies Boolean operators in the title. |
| redis/search/aggregation-operators/metric-aggregations/overview.mdx | Identifies metric aggregations in the title. |
| redis/search/aggregation-operators/bucket-aggregations/overview.mdx | Identifies bucket aggregations in the title. |
| redis/sdks/ts/overview.mdx | Identifies the Redis TypeScript SDK. |
| redis/sdks/ts/commands/overview.mdx | Identifies Redis TypeScript SDK commands. |
| redis/sdks/ratelimit-ts/overview.mdx | Identifies the Ratelimit TypeScript SDK. |
| redis/sdks/ratelimit-ts/gettingstarted.mdx | Adds a SDK-specific getting-started title. |
| redis/sdks/ratelimit-py/overview.mdx | Identifies the Ratelimit Python SDK. |
| redis/sdks/ratelimit-py/gettingstarted.mdx | Adds a SDK-specific getting-started title. |
| redis/sdks/py/overview.mdx | Identifies the Redis Python SDK. |
| redis/sdks/py/gettingstarted.mdx | Adds a Redis Python getting-started title. |
| redis/sdks/py/commands/overview.mdx | Identifies Redis Python SDK commands. |
| redis/overall/getstarted.mdx | Adds a Redis-specific getting-started title. |
| redis/overall/compare.mdx | Adds a descriptive comparison title and meta description. |
| qstash/sdks/ts/overview.mdx | Identifies the QStash TypeScript SDK. |
| qstash/sdks/ts/gettingstarted.mdx | Adds a QStash TypeScript getting-started title. |
| qstash/sdks/ts/examples/overview.mdx | Identifies QStash TypeScript examples. |
| qstash/sdks/py/overview.mdx | Identifies the QStash Python SDK. |
| qstash/sdks/py/gettingstarted.mdx | Adds a QStash Python getting-started title. |
| qstash/sdks/py/examples/overview.mdx | Identifies QStash Python examples. |
| qstash/overall/getstarted.mdx | Adds a QStash-specific getting-started title. |
| qstash/overall/compare.mdx | Adds a descriptive QStash comparison title. |
| llms.txt | Synchronizes index labels and comparison metadata. |
| llms-full.txt | Synchronizes exported titles and the Terraform link. |
| introduction.mdx | Retitles the landing page while preserving its sidebar label. |
| docs.json | Adds legacy documentation redirects. |
| devops/terraform/overview.mdx | Retitles the overview and repairs the API-key link. |
| devops/pulumi/overview.mdx | Adds a Pulumi-specific overview title. |
| devops/developer-api/introduction.mdx | Adds a Developer API getting-started title. |
| blob/recipes/overview.mdx | Adds a Blob Recipes overview title. |
Review effort: Balanced
…ages
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
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
context7
Bot
temporarily deployed
to
Docs7 Preview: seo/weekly-2026-10-19
October 23, 2026 07:35
Destroyed
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
context7
Bot
temporarily deployed
to
Docs7 Preview: seo/weekly-2026-10-19
October 23, 2026 09:17
Destroyed
…view 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
context7
Bot
temporarily deployed
to
Docs7 Preview: seo/weekly-2026-10-19
October 23, 2026 09:29
Destroyed
CahidArda
marked this pull request as ready for review
October 23, 2026 09:31
This branch was successfully deployed
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.

Summary
SEO fixes from Ahrefs (Site Audit project 9854245, crawls 2026-10-18 and 2026-10-20; Site Explorer 2026-10-22):
1. Redirects for legacy
/docs/*paths with dofollow backlinks from DR75-94 domains (Cloudflare docs, StackOverflow, Medium, Habr, Go pkg docs, DeepWiki) that currently 404. This also consolidates 3 older open draft PRs from earlier weekly runs of this routine (#889, #903, #914), which were still open and unmerged and overlapped with each other and with this PR — folded their entries in and closed all three as superseded. See the commit message onc225c96for the full consolidation notes (what was deduped, what was corrected, what was added).2. 46 duplicate page titles. Ahrefs flags
duplicate_titleon exactly 17 pages titled literally "Getting Started" and 30 pages titled literally "Overview" — a repo-wide search confirms these counts are the complete set, not a sample. Every product's SDK/getstarted/overview landing page has the same copy-pasted placeholder title with no product or SDK name, so Google sees an identical<title>for e.g. Redis, QStash, Vector and Search's getting-started pages. Several of these carry real traffic:redis/overall/getstarted(862 visits/mo),qstash/overall/getstarted(534),workflow/getstarted(312). Renamed each to a unique, descriptive title (e.g. "Overview" → "Redis TypeScript SDK Overview"); no body copy or URLs changed. The docs landing page (introduction.mdx) keeps its title "Overview" per review (7554981). It's the only page left with that title, so it's no longer a duplicate.3. The two "Compare" pages (commit
eb0044f).redis/overall/compare(247 visits/mo) andqstash/overall/compare(26) share the literal title "Compare" (duplicate_titlegroup of 2). Retitled to "Compare Upstash Redis to Alternatives" / "Compare QStash to Alternatives", and added the missing meta description on the Redis page (it had none).4. Quickstarts and other pages missing their product name (commits
1a708c4,84d7149,ac39594).redis/help/faq: "Frequently Asked Questions" → "Upstash Redis FAQ". It ranks feat: qstash docs #4 for "upstash redis" (2,500/mo).redis/features/globaldatabase→ "Upstash Redis Global Database"redis/howto/connect-client→ "Connect Any Redis Client to Upstash Redis"redis/features/restapi→ "Upstash Redis REST API"redis/search/introduction: "Introduction" → "Redis Search Introduction"qstash/features/queues/dlq/flowcontrol/schedules→ "QStash Queues", "QStash Dead Letter Queue (DLQ)", …qstash/howto/local-tunnel→ "Local Tunnel for QStash Development" (ranks feat: rename auth fields to email:apikey #10 for "localtunnel", 350/mo)qstash/overall/usecases→ "QStash Use Cases"description:and start with the "If you are an AI agent…"<Tip>, so Docs7 used that tip as their meta description (Ahrefsduplicate_descriptiongroup of 24). Added a real description to each, covering the 21 Redis quickstarts,redis/features/globaldatabaseand the Redis TS/Python SDK getting-started pages.Sidebar labels unchanged. Every retitled page has
sidebarTitleset to its previous label, so the sidebar matchesmainexactly. Only the<title>, H1, JSON-LD andllms.txtuse the new titles. Verified on the Docs7 preview of1a708c4:redis/quickstarts/nextjs-app-router,laravelandcloudflareworkers,redis/features/globaldatabase,redis/help/faq,qstash/features/queues,qstash/quickstarts/vercel-nextjsandworkflow/quickstarts/fastapiall show the new<title>and the old sidebar label.Self-review (
ac39594). Four parallel reviewers checked all 156 changed pages against their content anddocs.json. They confirmed:main;They found four quickstart descriptions that overstated their page, now fixed:
The same commit adds the product name to a few remaining titles, e.g. "Upstash Redis Getting Started", "Upstash Search Getting Started", "Upstash Terraform Provider Overview", and "Redis Search Field Operators".
Deliberately not changed: Redis command-reference pages (~725).
redis/commands/*(333),redis/sdks/ts/commands/*(196) andredis/sdks/py/commands/*(196) are titled with just the command ("ZRANK", "TTL"). The same title repeats across the three sets, and the pages rank individually for non-brand queries like "zrank", "hget", "redis ttl" (positions 2-10, low volume each). That's better handled as one templated decision, e.g. "ZRANK - Redis Python SDK", or a Docs7 title template per section, in its own PR.Evidence — redirects
c225c96Evidence — titles
Full before/after list is in the diff (
title:change plussidebarTitle:each). Top-traffic examples:<title>)Expected effect
<title>s mainly help people pick the right page from results for brand searches.Notes for reviewer
Left Kafka-related broken backlinks (
/docs/kafka/*,/pricing/kafka) out of scope per the standing Kafka-paused exclusion.Please double check the 3 corrected redirect destinations (ratelimit × 2, redis/overview) since they're based on file-tree inference, not a live crawl of the rendered site.
qstash/features/queues.mdx,qstash/features/background-jobs.mdxandqstash/quickstarts/python-vercel.mdxuse CRLF line endings; they were edited with CRLF preserved, so their diff is the frontmatter lines only.The one body change in the diff (
devops/terraform/overview.mdx, theapi_keylink) comes from docs: 2 review fixes for #927 (broken links, docs conventions) #933, a broken-link fix merged into this branch, not from the title changes.redis/quickstarts/digitalocean.mdxstill says the integration "will be" shut down on August 31, 2026, a date that has passed. That body text is outside this PR.Mintlify Validation - link-rotfails with 52 broken links. All of them are in files this PR doesn't touch, mostly links to generatedqstash/api-reference/*andworkflow/api-reference/*pages. Docs are served by Docs7, not Mintlify.Breadcrumbs (separate, Docs7-side, not fixed here): Google shows the Terraform page as "upstash.com › API Reference › Developer API". That comes from Docs7's JSON-LD
BreadcrumbList, which on the live page isAPI Reference > Developer API > Overview. Two causes:docs.json, Terraform and Pulumi sit underAPI Reference > Developer API > DevOps > Terraform.devops/terraform/overview, so they're dropped, while the visible breadcrumb on the page does show "Developer API / DevOps / Terraform". Mintlify behaves the same way.Fixing this means either changing Docs7's breadcrumb generation or moving DevOps out of the "Developer API" group in
docs.json; neither is in this PR.🤖 Generated with Claude Code
https://claude.ai/code/session_01RAhS4rWaMVuMCaTUJKgz3P