Skip to content

DES-17: sitemap, canonical tags, robots.txt and a real 404 [render preview] - #96

Merged
jayeshbhole merged 6 commits into
mainfrom
des-17-sitemap-canonicals
Sep 1, 2026
Merged

DES-17: sitemap, canonical tags, robots.txt and a real 404 [render preview]#96
jayeshbhole merged 6 commits into
mainfrom
des-17-sitemap-canonicals

Conversation

@jayeshbhole

@jayeshbhole jayeshbhole commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Part of DES-17

#95 has merged, so this now targets main. It was rebased rather than merged, because #95 was squash-merged and its commits are not in main's history.

Problem

Google had no correct address for any page on this site.

  • No page carried a canonical tag. The same content is served on docs.zerodev.app and new-docs.zerodev.app, so Google could hold two copies of all 249 pages and split the rank between them.
  • No page carried an og:url.
  • No sitemap and no robots.txt, so nothing told Google which pages are the real ones.
  • 72 of the 135 indexable pages carried no description at all, so Google wrote its own snippet and a shared link previewed bare.
  • Four files that are not pages were built as pages. Vocs routes on any file under docs/pages, extension ignored, so VersionWarning.tsx became a 43 KB page with no text and the three shared/*.mdx snippets became pages of their own.
  • 404s fell back to plain text.

Fix

  1. Canonical tag on every page, absolute, always on docs.zerodev.app. This is what makes the new-docs copy credit the real site instead of competing with it (DES-13 chose to leave that host alone). A path-only canonical would resolve against whichever host served the page and fix nothing.
  2. og:url on every page, following the canonical.
  3. A description on every page, falling back to the site copy where the page has none.
  4. scripts/sitemap.mjs, run from npm run build after vocs build.
  5. robots.txt restored from af0655c, pointing at the sitemap.
  6. 404.html, a standalone styled page. server.mjs already looked for this file and never found it.
  7. The four non-page files moved out of docs/pages into docs/components, and their 86 importers repointed at the existing @components alias.

The head block in vocs.config.tsx never rendered

Worth reading before reviewing the diff, because it explains why tags appear to be deleted.

head was a JSX element. Vocs checks typeof head === "object" before it checks for an element, and a JSX element is an object, so it took the "map of path prefix to element" branch, looked for a key matching the route, found none, and rendered nothing:

// vocs/_lib/vite/utils/html.js
if (typeof config.head === 'function') return await config.head({ path: location });
if (typeof config.head === 'object') {
  const entry = Object.entries(config.head).reverse().find(([key]) => location.startsWith(key));
  return entry?.[1];   // <- a JSX element lands here, and matches nothing
}

So the og:type, og:title, og:url and og:description in that block never reached a single page. The og tags in production today come from vocs itself, generated per page from title, description and ogImageUrl.

Making head a function activates the block. Keeping the old contents would then have given every page two og:title tags, vocs's per-page one and a hardcoded site-wide one, and the same for og:description. They are removed for that reason, not to drop metadata. Only the tags vocs does not emit stay: the canonical, the og:url, and the noindex flag.

Before and after, on /get-started/quickstart:

production today   og:type, og:title, og:image
this branch        canonical, og:url, description, og:description, og:type, og:title, og:image

Descriptions

Vocs emits a description only when the page supplies one, through frontmatter or the bracketed suffix on the H1 (# Social Login [Social login lets users...]). 72 of the 135 indexable pages do neither.

This branch collects the routes that already have one and fills only the gap, so no page ends up with two:

indexable pages: 135
  with their own description: 63
  using the fallback:         72

built pages: 246
  with none:        0
  with duplicates:  0

A stopgap, not a fix. One description across 72 pages is a weak signal and Google may still write its own snippet. Each page needs its own, tracked in DES-24. The fallback uses the copy that was sitting in the dead og:description tag, so this is the first time it ships.

The sitemap reads the build, not the sources

scripts/sitemap.mjs walks docs/dist and lists a page only when the page itself asks to be indexed: no noindex, and a canonical pointing at itself.

That means the sitemap cannot contradict the pages. A sitemap entry says "index this"; a noindex or a canonical elsewhere says the opposite, and Google reports the conflict as an error. Deriving one from the other removes the chance of them disagreeing.

A page with no canonical fails the build rather than being listed. That is the same failure mode as the head bug above: vocs drops the whole head config without a word, and a sitemap that kept working while every canonical vanished would hide it. Verified by stripping the tag from one built page:

1 built page(s) have no canonical tag:
  /get-started/quickstart
check the head() function in vocs.config.tsx
exit=1
sitemap.xml: 135 urls (skipped 22 redirected, 20 noindex, 69 duplicate)

DES-14 predicted 221 URLs. It was written before DES-10 and DES-21 decided the old-version and unmaintained trees, and both of those decisions remove pages from the sitemap. 135 is the number those decisions imply.

The v5.3.x canonical map is derived, not written by hand

DES-10 chose to keep all 70 v5.3.x pages and point each at the current equivalent. Rather than hand-write 70 pairs:

function canonicalPath(path) {
  if (!path.startsWith("/sdk/v5_3_x")) return path;
  const current = resolveRedirect(path.replace("/sdk/v5_3_x", "/sdk"));
  return current?.startsWith("/") ? current : path;
}

/sdk/v5_3_x/x is the old version of /sdk/x, and every /sdk/x already has a target in redirects.config.js that was checked page by page in #95. Reusing it means the canonical map and the redirect table cannot drift apart.

69 of 70 map cleanly. Only /sdk/v5_3_x itself has no equivalent and credits itself.

This corrects a claim I made on DES-10: I guessed that signers/capsule, signers/arcana and signers/web3auth had no successor. All three do (/onboarding/capsule, /onboarding/arcana, /onboarding/web3auth).

npm run check:redirects now fails if a v5.3.x page stops mapping, because the silent failure mode is a page falling back to crediting itself and quietly competing again.

Verification

Against a local npm run build:

built pages: 246                       (was 250; the 4 non-page files are gone)
canonical on 246/246, all absolute on https://docs.zerodev.app
og:url matches canonical on 246/246
noindex pages: 20                      (exactly the react-hooks tree)
v5_3_x pages crediting their current page: 69
/sdk/v5_3_x credits itself
descriptions: 0 missing, 0 duplicated
sitemap urls: 135, no duplicate, no redirected path, no noindex page

On the Render preview for the earlier revision of this branch, which runs server.mjs:

353/353 redirect rules -> 301 to the exact target
200 /sitemap.xml, 135 urls, all 135 return 200 and credit themselves
200 /robots.txt
404 /no-such-page-anywhere
404 /sdk/nope, /meta-infra/nope, /recovery-flow/nope, /react/nope, /smart-wallet/nope
404 /sdk/v5_3_x/VersionWarning, /shared/query-result, /shared/mutation-result, /shared/social-login-setup

npm run check:redirects: 353 redirects ok, 246 routes.

Found while testing production: /global-address takes two hops

Not fixed here, because it cannot be fixed in this repository.

/global-address          301 (Cloudflare)  -> /smart-routing-address
/smart-routing-address   301 (our server)  -> /onramp/smart-routing-address/quickstart

A Cloudflare rule answers /global-address before the request reaches Render, so the rule for it in redirects.config.js never runs. The response carries no x-render-origin-server header, while every rule we own does.

Testing all 353 rules that way found exactly one in this state, so there is no wider hidden layer. DES-25 has the dashboard steps. A comment now records this above the rule, so nobody debugs it twice.

Not in this PR

Step 9, the ten wrong links in zerodevapp/zerodev-website. That is a different repository and needs its own pull request. Split into its own ticket rather than dropped.

Step 6, the Host check in server.mjs. DES-13 decided to change nothing on new-docs.zerodev.app. The canonical tags in step 1 solve the duplicate instead.

Step 10, the link to the v5.3.x set on /advanced/migration. Written, then removed at the author's request; that guide stays as it was. Worth knowing what this costs: the set is now reachable only from the navigation menu and from a direct link, and DES-10 kept those 70 pages on the promise that a reader on the old SDK could still find them. The canonical tags make Google credit the current pages either way, so the ranking side of DES-10 is unaffected. Reopened on DES-10 as a question about reader navigation, not as blocking work.

No sidebar entries were added. The v5.3.x set and the react-hooks tree stay where they are.

Note on the preview

Vercel serves docs/dist statically and never runs npm start. The redirects and the 404 page do not apply on the preview URL. Production is the Render web service. Verify after merge against https://docs.zerodev.app.

@vercel

vercel Bot commented Sep 1, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
docs Error Error Sep 1, 2026 3:44pm UTC

Request Review

@jayeshbhole
jayeshbhole requested a lite review from Copilot September 1, 2026 15:01
@jayeshbhole jayeshbhole changed the title DES-17: sitemap, canonical tags, robots.txt and a real 404 DES-17: sitemap, canonical tags, robots.txt and a real 404 [render preview] Sep 1, 2026

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Pull request overview

This PR addresses SEO/indexing correctness for the docs site by ensuring every rendered page declares the correct canonical URL (always on https://docs.zerodev.app), generating a sitemap/robots.txt from the built output, and providing a styled 404 page for unmatched routes.

Changes:

  • Add per-page canonical + og:url (and noindex for unmaintained React hooks pages) via vocs.config.tsx.
  • Generate docs/dist/sitemap.xml post-build and restore robots.txt; add a standalone 404.html.
  • Move non-page shared MDX/TSX out of docs/pages into docs/components and repoint imports to the @components alias.
File summaries
File Description
vocs.config.tsx Adds canonical + dynamic og:url, derives v5.3.x canonicals, and introduces @components alias.
scripts/sitemap.mjs Adds build-derived sitemap generation based on redirect/noindex/canonical checks.
scripts/check-redirects.mjs Adds validation ensuring v5.3.x pages map to current equivalents via redirects.
package.json Runs sitemap generation after vocs build.
docs/public/robots.txt Restores robots rules and points to the sitemap URL.
docs/public/404.html Adds a styled standalone 404 page served for unmatched routes.
docs/pages/sdk/v5_3_x/signers/web3auth.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/signers/turnkey.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/signers/privy.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/signers/portal.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/signers/particle.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/signers/magic.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/signers/lit-protocol.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/signers/intro.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/signers/fireblocks.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/signers/eoa.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/signers/dynamic.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/signers/dfns.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/signers/custom-signer.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/signers/capsule.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/signers/arcana.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/presets/zerodev.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/presets/intro.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/permissions/transaction-automation.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/permissions/signers/passkeys.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/permissions/signers/multisig.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/permissions/signers/ecdsa.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/permissions/signers/build-your-own.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/permissions/policies/timestamp.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/permissions/policies/sudo.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/permissions/policies/signature.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/permissions/policies/rate-limit.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/permissions/policies/gas.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/permissions/policies/call.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/permissions/policies/build-your-own.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/permissions/intro.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/permissions/actions/build-your-own.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/permissions/1-click-trading.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/infra/zerodev.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/infra/pimlico.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/infra/intro.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/infra/coinbase.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/index.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/getting-started/tutorial.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/getting-started/tutorial-passkeys.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/getting-started/quickstart.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/getting-started/migration.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/faqs/use-with-react-native.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/faqs/use-with-gelato.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/faqs/use-with-ethers.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/faqs/debug-userop.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/faqs/chains.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/faqs/audits.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/core-api/using-plugins.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/core-api/sponsor-gas.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/core-api/sign-and-verify.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/core-api/send-transactions.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/core-api/pay-gas-with-erc20s.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/core-api/deploy-contract.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/core-api/delegatecall.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/core-api/create-account.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/core-api/batch-transactions.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/advanced/wallet-connect.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/advanced/supported-defi-tokens.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/advanced/supported-base-tokens.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/advanced/social-login.mdx Update imports to @components (shared MDX + VersionWarning).
docs/pages/sdk/v5_3_x/advanced/session-keys.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/advanced/recovery.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/advanced/passkeys.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/advanced/parallel-orders.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/advanced/multisig.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/advanced/multi-chain-signing.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/advanced/key-storage.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/advanced/fallback-providers.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/advanced/defi.mdx Update VersionWarning import to @components.
docs/pages/sdk/v5_3_x/advanced/chain-abstraction.mdx Update VersionWarning import to @components.
docs/pages/onboarding/social-login.mdx Update shared MDX import to @components.
docs/pages/advanced/react-hooks/use-switch-chain.mdx Update shared MDX import to @components.
docs/pages/advanced/react-hooks/use-set-kernelclient.mdx Update shared MDX import to @components.
docs/pages/advanced/react-hooks/use-session-kernelclient.mdx Update shared MDX import to @components.
docs/pages/advanced/react-hooks/use-send-useroperation.mdx Update shared MDX import to @components.
docs/pages/advanced/react-hooks/use-send-useroperation-with-session.mdx Update shared MDX import to @components.
docs/pages/advanced/react-hooks/use-send-transaction.mdx Update shared MDX import to @components.
docs/pages/advanced/react-hooks/use-send-transaction-with-session.mdx Update shared MDX import to @components.
docs/pages/advanced/react-hooks/use-kernelclient.mdx Update shared MDX import to @components.
docs/pages/advanced/react-hooks/use-disconnect-kernelclient.mdx Update shared MDX import to @components.
docs/pages/advanced/react-hooks/use-create-session.mdx Update shared MDX import to @components.
docs/pages/advanced/react-hooks/use-create-kernelclient-social.mdx Update shared MDX import to @components.
docs/pages/advanced/react-hooks/use-create-kernelclient-passkey.mdx Update shared MDX import to @components.
docs/pages/advanced/react-hooks/use-create-kernelclient-eoa.mdx Update shared MDX import to @components.
docs/pages/advanced/react-hooks/use-create-basic-session.mdx Update shared MDX import to @components.
docs/pages/advanced/react-hooks/use-balance.mdx Update shared MDX import to @components.
docs/components/VersionWarning.tsx New shared warning component (moved out of pages).
docs/components/shared/social-login-setup.mdx New shared MDX snippet (moved out of pages).
docs/components/shared/query-result.mdx New shared MDX snippet (moved out of pages).
docs/components/shared/mutation-result.mdx New shared MDX snippet (moved out of pages).
Review details
  • Files reviewed: 92/96 changed files
  • Comments generated: 1
  • Review effort level: Lite

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread scripts/sitemap.mjs
@jayeshbhole

Copy link
Copy Markdown
Contributor Author

Tested on the Render preview

https://docs-dynamic-pr-96.onrender.com, which runs server.mjs and so exercises the redirects and the 404 handler for the first time outside a laptop. This preview carries #95 as well, since this branch is stacked on it.

353/353 redirect rules -> 301 to the exact target

sitemap.xml   200, 135 urls
  135/135 return 200
  135/135 credit themselves
  0 redirected, 0 noindex, 0 old-version pages listed
robots.txt    200, points at the sitemap

404 /no-such-page-anywhere

former soft 404 prefixes, all 200 before this stack:
  404 /sdk/nope
  404 /meta-infra/nope
  404 /recovery-flow/nope
  404 /react/nope
  404 /smart-wallet/nope

deliberate 404s:
  404 /modules/offramp
  404 /smart-wallet/offramp
  404 /sdk/v5_3_x/VersionWarning
  404 /shared/query-result
  404 /shared/mutation-result
  404 /shared/social-login-setup

Canonical spot checks:

Path Credits
/ https://docs.zerodev.app/
/get-started/quickstart https://docs.zerodev.app/get-started/quickstart
/sdk/v5_3_x itself, no current equivalent
/sdk/v5_3_x/core-api/create-account https://docs.zerodev.app/onboarding/create-a-smart-account
/sdk/v5_3_x/signers/capsule https://docs.zerodev.app/onboarding/capsule
/sdk/v5_3_x/signers/web3auth https://docs.zerodev.app/onboarding/web3auth

noindex on 4 of 4 sampled react-hooks pages, and absent from /get-started/quickstart. og:url on /get-started/quickstart is now https://docs.zerodev.app/get-started/quickstart, not the old fixed https://zerodev.app.

The last four 404s in that list are the files vocs used to build as pages. Two of them served a 43 KB page with no text.

One note on the preview itself

The preview serves robots.txt with Allow: /, so this host is crawlable in principle. It is harmless here: every page on it declares a canonical on docs.zerodev.app, which is exactly the mechanism that makes the new-docs duplicate safe (DES-13). Worth knowing rather than acting on.

Correction

My first run reported 330 redirects wrong. That was the test, not the site: server.mjs sends the target verbatim, so an internal redirect carries a relative Location, which is valid and which a browser resolves against the host. The test compared against an absolute URL. Fixed, and the rerun is the 353/353 above.

Every page now declares one absolute address on docs.zerodev.app. og:url was
a fixed https://zerodev.app on all 249 pages; it follows the canonical now.

The v5.3.x set credits its current equivalent, derived from the redirect
table rather than a hand-written map, so the two cannot drift. The 20
unmaintained @zerodev/waas pages carry noindex.

scripts/sitemap.mjs runs after the build and reads the built HTML, so the
sitemap can never contradict what a page declares: 135 of 246 pages, with
22 redirected, 20 noindex and 69 old-version duplicates left out.

Moves VersionWarning.tsx and the three shared snippets out of docs/pages,
which vocs was turning into pages of their own.
The head block was a JSX element, and vocs checks typeof head === object
before it checks for an element, so it took the path-prefix-map branch and
rendered nothing. og:type, og:title and og:url never reached a page.

Keeping our own og:type/og:title/og:description now would duplicate the
per-page ones vocs emits, so drop them and keep the canonical, og:url and
the noindex flag.

Also records why /global-address takes two hops: a Cloudflare rule answers
it before the request reaches this server.
72 of the 135 indexable pages carry no description, so Google writes its own
snippet and a shared link previews bare. Vocs only emits one when the page
supplies it, through frontmatter or the bracketed suffix on the H1.

Collects the routes that already have one and fills only the gap, so no page
ends up with two. A stopgap: one description across 72 pages is weak, and
each page still needs its own (DES-25).
@jayeshbhole
jayeshbhole force-pushed the des-17-sitemap-canonicals branch from c4e60a6 to 9f04467 Compare September 1, 2026 15:35
A page with no canonical tag was listed, which contradicts the rule the
script states and hides the exact regression that already happened once:
vocs drops the whole head config silently.

Also trims the comments and drops the ticket numbers.
@a-thomas-22
a-thomas-22 temporarily deployed to des-17-sitemap-canonicals - docs-dynamic PR #96 September 1, 2026 15:42 — with Render Destroyed
@jayeshbhole

Copy link
Copy Markdown
Contributor Author

Retested on the Render preview

https://docs-dynamic-pr-96.onrender.com, rebuilt against 25750b3. This revision is rebased onto main, so it no longer carries #95 separately.

353/353 redirect rules -> 301 to the exact target

sitemap.xml   200, 135 urls
  135/135 return 200
  135/135 credit themselves
  description: 63 own, 72 fallback, 0 missing, 0 duplicated
robots.txt    200
404           /no-such-page-anywhere

former soft 404 prefixes:
  404 /sdk/nope /meta-infra/nope /recovery-flow/nope /react/nope /smart-wallet/nope

deliberate 404s:
  404 /modules/offramp /smart-wallet/offramp
  404 /sdk/v5_3_x/VersionWarning /shared/query-result /shared/mutation-result /shared/social-login-setup
Path Credits
/ https://docs.zerodev.app/
/get-started/quickstart https://docs.zerodev.app/get-started/quickstart
/sdk/v5_3_x itself, no current equivalent
/sdk/v5_3_x/core-api/create-account https://docs.zerodev.app/onboarding/create-a-smart-account
/sdk/v5_3_x/signers/capsule https://docs.zerodev.app/onboarding/capsule
/sdk/v5_3_x/signers/web3auth https://docs.zerodev.app/onboarding/web3auth

noindex on 4 of 4 sampled react-hooks pages, absent from /get-started/quickstart.

The description line is the new one: every indexable page now serves exactly one description and one og:description, where 72 of them served neither before.

@jayeshbhole
jayeshbhole merged commit daa1522 into main Sep 1, 2026
1 of 2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants