From 7d50b1018f35ea6272e839d69cc34903f498f31d Mon Sep 17 00:00:00 2001 From: Rooh Afza <96720500+r0ohafza@users.noreply.github.com> Date: Mon, 14 Sep 2026 13:36:03 -0700 Subject: [PATCH 1/4] fix(seo): page descriptions, canonical og tags and sitemap cleanup - theme.config.tsx: build og:image on splits.org instead of the per-deploy Vercel hostname; emit og/twitter tags through next-seo with property= and per-page og:url; drop duplicate viewport/theme-color, bogus twitter tags and the static app tagline description; descriptive index title; GitHub icon without an SVG - pages/**/*.mdx: description frontmatter on all 29 pages - pages/_document.tsx: html lang=en - next-sitemap.config.js: no build-timestamp lastmod, no inert robots.txt - next.config.js: sdk-info redirects permanent, straight to /sdk/ --- next-sitemap.config.js | 13 +++- next.config.js | 12 +-- pages/_document.tsx | 14 ++++ pages/core.mdx | 4 + pages/core/oracle.mdx | 4 + pages/core/pass-through.mdx | 4 + pages/core/split-v2.mdx | 4 + pages/core/split.mdx | 4 + pages/core/swapper.mdx | 4 + pages/core/vesting.mdx | 4 + pages/core/warehouse.mdx | 4 + pages/core/waterfall.mdx | 4 + pages/flow.mdx | 4 + pages/index.mdx | 4 + pages/react.mdx | 4 + pages/sdk.mdx | 4 + pages/sdk/data.mdx | 4 + pages/sdk/liquid.mdx | 4 + pages/sdk/multicall.mdx | 4 + pages/sdk/splits-v1.mdx | 4 + pages/sdk/splits-v2.mdx | 4 + pages/sdk/swapper.mdx | 4 + pages/sdk/templates.mdx | 4 + pages/sdk/utils.mdx | 4 + pages/sdk/vesting.mdx | 4 + pages/sdk/warehouse.mdx | 4 + pages/sdk/waterfall.mdx | 4 + pages/splits-kit.mdx | 4 + pages/templates.mdx | 4 + pages/templates/diversifier.mdx | 4 + pages/templates/liquid.mdx | 4 + pages/templates/recoup.mdx | 4 + theme.config.tsx | 128 ++++++++++++++------------------ 33 files changed, 202 insertions(+), 81 deletions(-) create mode 100644 pages/_document.tsx diff --git a/next-sitemap.config.js b/next-sitemap.config.js index b9a92e3..c98c1bb 100644 --- a/next-sitemap.config.js +++ b/next-sitemap.config.js @@ -4,10 +4,15 @@ module.exports = { // siteUrl to each route path (route paths do NOT include basePath), so the // '/protocol/docs' segment lives on siteUrl here. siteUrl: - process.env.NEXT_PUBLIC_VERCEL_ENV === 'production' ? - 'https://splits.org/protocol/docs' : - `https://${process.env.NEXT_PUBLIC_VERCEL_URL}/protocol/docs`, - generateRobotsTxt: true, + process.env.NEXT_PUBLIC_VERCEL_ENV === 'production' + ? 'https://splits.org/protocol/docs' + : `https://${process.env.NEXT_PUBLIC_VERCEL_URL}/protocol/docs`, + // Crawlers only read robots.txt at the host root, so one under basePath is + // inert; splits.org's own sitemap index already lists this sitemap. + generateRobotsTxt: false, + // The default lastmod is the build timestamp, which Google ignores as not + // verifiably accurate. Omit it rather than lie. + autoLastmod: false, generateIndexSitemap: false, // splits.org enforces trailing slashes (slash-less URLs 308 to the slashed // form), so list the final URLs directly. diff --git a/next.config.js b/next.config.js index 5882f47..3372f04 100644 --- a/next.config.js +++ b/next.config.js @@ -19,24 +19,26 @@ module.exports = withNextra({ source: '/(.*)', headers: [ // Prevents the page from being loaded in an iframe (clickjacking prevention) - { key: 'Content-Security-Policy', value: `frame-ancestors 'none';`} + { key: 'Content-Security-Policy', value: `frame-ancestors 'none';` }, ], }, ] }, async redirects() { return [ + // Trailing slash on the destination avoids a second hop through the + // splits.org 308. { source: '/sdk-info', - destination: '/sdk', - permanent: false, + destination: '/sdk/', + permanent: true, }, // Just redirect any slug to the main page for now, not sure if they map // the same { source: '/sdk-info/:slug*', - destination: '/sdk', - permanent: false, + destination: '/sdk/', + permanent: true, }, ] }, diff --git a/pages/_document.tsx b/pages/_document.tsx new file mode 100644 index 0000000..fa199f1 --- /dev/null +++ b/pages/_document.tsx @@ -0,0 +1,14 @@ +import React from 'react' +import { Head, Html, Main, NextScript } from 'next/document' + +export default function Document() { + return ( + <Html lang="en"> + <Head /> + <body> + <Main /> + <NextScript /> + </body> + </Html> + ) +} diff --git a/pages/core.mdx b/pages/core.mdx index 3c4a35a..2417488 100644 --- a/pages/core.mdx +++ b/pages/core.mdx @@ -1,3 +1,7 @@ +--- +description: "Architecture of the Splits core contracts and how funds flow between the Warehouse, Split, Waterfall, Swapper and Vesting building blocks." +--- + # Core contracts This section describes the various smart contract building blocks upon which all diff --git a/pages/core/oracle.mdx b/pages/core/oracle.mdx index 7e4167d..e6317c2 100644 --- a/pages/core/oracle.mdx +++ b/pages/core/oracle.mdx @@ -1,3 +1,7 @@ +--- +description: "The price oracle contracts used by Swapper to value token conversions, including the Uniswap v3 TWAP oracle." +--- + import { Toggle } from '../../components/toggle' import { Tab, Tabs } from 'nextra-theme-docs' diff --git a/pages/core/pass-through.mdx b/pages/core/pass-through.mdx index 580e6b9..c9c9ca6 100644 --- a/pages/core/pass-through.mdx +++ b/pages/core/pass-through.mdx @@ -1,3 +1,7 @@ +--- +description: "The Pass-Through Wallet contract forwards funds through an intermediary address whose owner can pause or retarget it." +--- + import { Toggle } from '../../components/toggle' import { Tab, Tabs } from 'nextra-theme-docs' diff --git a/pages/core/split-v2.mdx b/pages/core/split-v2.mdx index 9b3c267..f399059 100644 --- a/pages/core/split-v2.mdx +++ b/pages/core/split-v2.mdx @@ -1,3 +1,7 @@ +--- +description: "SplitV2, the latest Splits contract: push and pull variants, deterministic deployment and how distributions and withdrawals work." +--- + import { Toggle } from '../../components/toggle' import { Callout, Tab, Tabs } from 'nextra-theme-docs' diff --git a/pages/core/split.mdx b/pages/core/split.mdx index a409542..11f024e 100644 --- a/pages/core/split.mdx +++ b/pages/core/split.mdx @@ -1,3 +1,7 @@ +--- +description: "The original Split contract deployed through SplitMain: how V1 splits receive, distribute and withdraw funds." +--- + import { Toggle } from '../../components/toggle' import { Callout, Tab, Tabs } from 'nextra-theme-docs' diff --git a/pages/core/swapper.mdx b/pages/core/swapper.mdx index 328a6e3..9b73cc7 100644 --- a/pages/core/swapper.mdx +++ b/pages/core/swapper.mdx @@ -1,3 +1,7 @@ +--- +description: "The Swapper contract converts incoming tokens to a target token on distribution using oracle-based pricing." +--- + import { Toggle } from '../../components/toggle' import { Callout, Tab, Tabs } from 'nextra-theme-docs' diff --git a/pages/core/vesting.mdx b/pages/core/vesting.mdx index 0eeeb68..ddae3b0 100644 --- a/pages/core/vesting.mdx +++ b/pages/core/vesting.mdx @@ -1,3 +1,7 @@ +--- +description: "The Vesting contract releases funds to recipients linearly over a shared vesting period." +--- + import { Toggle } from '../../components/toggle' import { Tab, Tabs } from 'nextra-theme-docs' diff --git a/pages/core/warehouse.mdx b/pages/core/warehouse.mdx index fd18c04..ba84b67 100644 --- a/pages/core/warehouse.mdx +++ b/pages/core/warehouse.mdx @@ -1,3 +1,7 @@ +--- +description: "SplitWarehouse, the central balance storage contract that holds tokens for Splits protocol recipients until withdrawal." +--- + import { Toggle } from '../../components/toggle' import { Tab, Tabs } from 'nextra-theme-docs' diff --git a/pages/core/waterfall.mdx b/pages/core/waterfall.mdx index 7c72c7a..bad0aed 100644 --- a/pages/core/waterfall.mdx +++ b/pages/core/waterfall.mdx @@ -1,3 +1,7 @@ +--- +description: "The Waterfall contract pays recipients in sequential tranches, filling each threshold before funds flow to the next." +--- + import { Toggle } from '../../components/toggle' import { Tab, Tabs } from 'nextra-theme-docs' diff --git a/pages/flow.mdx b/pages/flow.mdx index 8cb52e1..f1d0173 100644 --- a/pages/flow.mdx +++ b/pages/flow.mdx @@ -1,3 +1,7 @@ +--- +description: "How funds move through the Splits protocol: receiving payments, distributing balances to recipients and withdrawing from the warehouse." +--- + import { Toggle } from '../components/toggle' # Flow of funds diff --git a/pages/index.mdx b/pages/index.mdx index e0b7e38..63af1fa 100644 --- a/pages/index.mdx +++ b/pages/index.mdx @@ -1,3 +1,7 @@ +--- +description: "Documentation for the Splits protocol: open-source, audited Split, Waterfall and Swapper smart contracts for managing onchain revenue, with a TypeScript SDK and React hooks." +--- + # Docs <div className="text-xl text-gray-500"> diff --git a/pages/react.mdx b/pages/react.mdx index ce97745..1a9db04 100644 --- a/pages/react.mdx +++ b/pages/react.mdx @@ -1,3 +1,7 @@ +--- +description: "React hooks for the Splits protocol from @0xsplits/splits-sdk-react: read and write splits, waterfalls, swappers and vesting from React apps." +--- + import { Tab, Tabs } from 'nextra-theme-docs' # React SDK diff --git a/pages/sdk.mdx b/pages/sdk.mdx index bed92f3..1b0a8d4 100644 --- a/pages/sdk.mdx +++ b/pages/sdk.mdx @@ -1,3 +1,7 @@ +--- +description: "Install and configure @0xsplits/splits-sdk, the TypeScript SDK for creating and managing splits, waterfalls, swappers and vesting contracts." +--- + import { Callout, Tab, Tabs } from 'nextra-theme-docs' # Splits Development Kit diff --git a/pages/sdk/data.mdx b/pages/sdk/data.mdx index cada776..5d725d3 100644 --- a/pages/sdk/data.mdx +++ b/pages/sdk/data.mdx @@ -1,3 +1,7 @@ +--- +description: "Query split metadata, balances and activity through the Splits GraphQL API with the DataClient in the Splits TypeScript SDK." +--- + # Splits Data Client The Splits Data client offers a comprehensive suite of functionalities for diff --git a/pages/sdk/liquid.mdx b/pages/sdk/liquid.mdx index b7be2c9..19d8657 100644 --- a/pages/sdk/liquid.mdx +++ b/pages/sdk/liquid.mdx @@ -1,3 +1,7 @@ +--- +description: "Create and manage NFT-governed liquid splits with the LiquidSplitClient in the Splits TypeScript SDK." +--- + # Liquid Splits Begin by importing `LiquidSplitClient` into your app. If you are using the diff --git a/pages/sdk/multicall.mdx b/pages/sdk/multicall.mdx index 496ae2b..6ae7aa2 100644 --- a/pages/sdk/multicall.mdx +++ b/pages/sdk/multicall.mdx @@ -1,3 +1,7 @@ +--- +description: "Batch multiple Splits SDK calls into a single multicall transaction." +--- + # Multicall Batch transactions together into a single multicall transaction. This multicall function can be accessed diff --git a/pages/sdk/splits-v1.mdx b/pages/sdk/splits-v1.mdx index b08e877..94bd374 100644 --- a/pages/sdk/splits-v1.mdx +++ b/pages/sdk/splits-v1.mdx @@ -1,3 +1,7 @@ +--- +description: "Manage legacy V1 splits with the SplitsClient in the Splits TypeScript SDK." +--- + # Splits V1 Begin by importing `SplitsClient` into your app. diff --git a/pages/sdk/splits-v2.mdx b/pages/sdk/splits-v2.mdx index f484fd2..f2819b8 100644 --- a/pages/sdk/splits-v2.mdx +++ b/pages/sdk/splits-v2.mdx @@ -1,3 +1,7 @@ +--- +description: "Create, update, distribute and withdraw from SplitV2 contracts with the SplitV2Client in the Splits TypeScript SDK." +--- + # Splits V2 Begin by importing `SplitV2Client` into your app. diff --git a/pages/sdk/swapper.mdx b/pages/sdk/swapper.mdx index 7a00003..1e618b6 100644 --- a/pages/sdk/swapper.mdx +++ b/pages/sdk/swapper.mdx @@ -1,3 +1,7 @@ +--- +description: "Create and manage swappers that convert incoming tokens on distribution with the SwapperClient in the Splits TypeScript SDK." +--- + # Swapper Begin by importing `SwapperClient` into your app. If you are using the diff --git a/pages/sdk/templates.mdx b/pages/sdk/templates.mdx index 85862df..16b4059 100644 --- a/pages/sdk/templates.mdx +++ b/pages/sdk/templates.mdx @@ -1,3 +1,7 @@ +--- +description: "Deploy recoup, diversifier and other composed payment flows with the TemplatesClient in the Splits TypeScript SDK." +--- + # Templates Begin by importing `TemplatesClient` into your app. If you are using the diff --git a/pages/sdk/utils.mdx b/pages/sdk/utils.mdx index 903372e..32a8d55 100644 --- a/pages/sdk/utils.mdx +++ b/pages/sdk/utils.mdx @@ -1,3 +1,7 @@ +--- +description: "Helper functions and constants exposed by the Splits TypeScript SDK for formatting, validation and calculations." +--- + # Utilities The SDK exposes some of the utility functions and constants to make development with it easier. diff --git a/pages/sdk/vesting.mdx b/pages/sdk/vesting.mdx index 95c25f4..5dbc164 100644 --- a/pages/sdk/vesting.mdx +++ b/pages/sdk/vesting.mdx @@ -1,3 +1,7 @@ +--- +description: "Create and manage time-locked vesting streams with the VestingClient in the Splits TypeScript SDK." +--- + # Vesting Begin by importing `VestingClient` into your app. If you are using the diff --git a/pages/sdk/warehouse.mdx b/pages/sdk/warehouse.mdx index 6187b22..6647514 100644 --- a/pages/sdk/warehouse.mdx +++ b/pages/sdk/warehouse.mdx @@ -1,3 +1,7 @@ +--- +description: "Read and withdraw balances held in the SplitWarehouse contract with the WarehouseClient in the Splits TypeScript SDK." +--- + # Warehouse Begin by importing `WarehouseClient` into your app. diff --git a/pages/sdk/waterfall.mdx b/pages/sdk/waterfall.mdx index 49adbfd..043d068 100644 --- a/pages/sdk/waterfall.mdx +++ b/pages/sdk/waterfall.mdx @@ -1,3 +1,7 @@ +--- +description: "Create and manage waterfall payment flows with the WaterfallClient in the Splits TypeScript SDK." +--- + # Waterfall Begin by importing `WaterfallClient` into your app. If you are using the diff --git a/pages/splits-kit.mdx b/pages/splits-kit.mdx index 3fccadb..9143a57 100644 --- a/pages/splits-kit.mdx +++ b/pages/splits-kit.mdx @@ -1,3 +1,7 @@ +--- +description: "SplitsKit, the pre-built React component library for displaying and creating splits, with Storybook examples." +--- + import { Tab, Tabs, Callout } from 'nextra-theme-docs' # SplitsKit diff --git a/pages/templates.mdx b/pages/templates.mdx index aab88be..580c8ea 100644 --- a/pages/templates.mdx +++ b/pages/templates.mdx @@ -1,3 +1,7 @@ +--- +description: "Composed payment flows such as Recoup, Liquid Split and Diversifier, built by combining Splits core contracts." +--- + # Templates This section describes more complicated payment flows that are built by composing multiple building blocks. diff --git a/pages/templates/diversifier.mdx b/pages/templates/diversifier.mdx index 055e839..ca9e885 100644 --- a/pages/templates/diversifier.mdx +++ b/pages/templates/diversifier.mdx @@ -1,3 +1,7 @@ +--- +description: "The Diversifier template automatically swaps and splits incoming tokens across a diversified set of assets." +--- + import { Toggle } from '../../components/toggle' import { Tab, Tabs } from 'nextra-theme-docs' diff --git a/pages/templates/liquid.mdx b/pages/templates/liquid.mdx index bf10bb9..669f553 100644 --- a/pages/templates/liquid.mdx +++ b/pages/templates/liquid.mdx @@ -1,3 +1,7 @@ +--- +description: "The Liquid Split template is a mutable split whose recipients are governed by NFT ownership." +--- + import { Toggle } from '../../components/toggle' import { Tab, Tabs } from 'nextra-theme-docs' import { Callout } from 'nextra-theme-docs' diff --git a/pages/templates/recoup.mdx b/pages/templates/recoup.mdx index fe5667f..438fc71 100644 --- a/pages/templates/recoup.mdx +++ b/pages/templates/recoup.mdx @@ -1,3 +1,7 @@ +--- +description: "The Recoup template repays an initial investment through a waterfall before splitting remaining funds among recipients." +--- + import { Toggle } from '../../components/toggle' import { Tab, Tabs } from 'nextra-theme-docs' diff --git a/theme.config.tsx b/theme.config.tsx index 89dfb13..d9b63f7 100644 --- a/theme.config.tsx +++ b/theme.config.tsx @@ -3,7 +3,6 @@ import type { DocsThemeConfig } from 'nextra-theme-docs' import { useConfig } from 'nextra-theme-docs' import { useRouter } from 'next/router' import Image from 'next/image' -import { CLIENT_ORIGIN } from './util/requests' const logo = ( <> @@ -20,13 +19,30 @@ const logo = ( </> ) +// Nextra's default icon carries an SVG <title>, which site auditors count as a +// second document title. +const githubIcon = ( + <svg + role="img" + aria-label="GitHub" + width="24" + height="24" + viewBox="0 0 16 16" + fill="currentColor" + > + <path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z" /> + </svg> +) + const config: DocsThemeConfig = { project: { link: 'https://github.com/0xSplits', + icon: githubIcon, }, docsRepositoryBase: 'https://github.com/0xSplits/docs', useNextSeoProps() { const { asPath } = useRouter() + const { title } = useConfig() // The docs are reverse-proxied to splits.org/protocol/docs but the origin // deployment is also directly reachable, so declare the splits.org URL as // canonical. splits.org serves the trailing-slash form (308 otherwise), so @@ -36,80 +52,48 @@ const config: DocsThemeConfig = { const canonical = `https://splits.org/protocol/docs${ path === '/' ? '' : path }/` - if (asPath !== '/') { - return { - titleTemplate: '%s | Protocol', - canonical, - } - } - return { canonical } - }, - logo, - head: function useHead() { - const { title } = useConfig() - // basePath ('/protocol/docs') moves the OG route handler under that prefix, - // and OG scrapers need an absolute URL, so include it explicitly. - const ogImage = `${CLIENT_ORIGIN}/protocol/docs/api/og?title=${encodeURIComponent( + // The OG route lives under basePath and scrapers need an absolute URL on + // the public host, not the per-deploy Vercel hostname (which is noindexed). + const ogImage = `https://splits.org/protocol/docs/api/og/?title=${encodeURIComponent( title, )}` - - return ( - <> - {/* Basic metadata */} - <meta charSet="utf-8" /> - <meta - name="viewport" - content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" - /> - <meta name="msapplication-TileColor" content="#fff" /> - <meta name="theme-color" content="#fff" /> - <meta httpEquiv="Content-Language" content="en" /> - {/* Page description */} - <meta - name="description" - content="Software to manage onchain earnings" - /> - <meta - name="og:description" - content="Software to manage onchain earnings" - /> - {/* Twitter */} - <meta name="twitter:card" content="summary_large_image" /> - <meta name="twitter:image" content={ogImage} /> - <meta name="twitter:site" content="@0xsplits" /> - <meta name="twitter:site:domain" content="splits.org" /> - <meta name="twitter:url" content="https://www.splits.org/" /> - <meta - name="twitter:title" - content={title ? title + ' | Protocol' : 'Protocol'} - /> - <meta - name="twitter:description" - content="Software to manage onchain earnings" - /> - {/* Title */} - <meta - name="og:title" - content={title ? title + ' | Protocol' : 'Protocol'} - /> - <meta name="og:image" content={ogImage} /> - {/* Open Graph */} - <meta property="og:image:width" content="1200" /> - <meta property="og:image:height" content="630" /> - <meta property="og:type" content="website" /> - <meta property="og:url" content="https://splits.org/protocol/docs" /> - <meta property="og:site_name" content="splits.org/protocol/docs" /> - <meta name="apple-mobile-web-app-title" content="Protocol" /> - {/* Raw <link> tags are not basePath-prefixed automatically, so the - '/protocol/docs' prefix is included explicitly. */} - <link - rel="icon" - href="/protocol/docs/logo_compressed.svg" - type="image/svg+xml" - /> - </> - ) + const shared = { + canonical, + openGraph: { + url: canonical, + siteName: 'Splits', + images: [{ url: ogImage, width: 1200, height: 630, alt: title }], + }, + twitter: { site: '@0xsplits', cardType: 'summary_large_image' }, + } + if (path !== '/') { + return { ...shared, titleTemplate: '%s | Protocol' } + } + // The index H1 is "Docs"; keep it short on the page and in the OG image + // but give search results a descriptive title. next-seo remembers the last + // titleTemplate it saw across prerenders, so reset it explicitly. + return { + ...shared, + title: 'Splits Protocol docs: Split, Waterfall and Swapper contracts', + titleTemplate: '%s', + } }, + logo, + head: ( + <> + <meta charSet="utf-8" /> + <meta name="msapplication-TileColor" content="#fff" /> + <meta httpEquiv="Content-Language" content="en" /> + <meta name="apple-mobile-web-app-title" content="Protocol" /> + {/* Raw <link> tags are not basePath-prefixed automatically, so the + '/protocol/docs' prefix is included explicitly. */} + <link + rel="icon" + href="/protocol/docs/logo_compressed.svg" + type="image/svg+xml" + /> + </> + ), primaryHue: 215, editLink: { text: 'Edit this page on GitHub', From b6f4aaf289b2e404496a04ac46866768becded90 Mon Sep 17 00:00:00 2001 From: Rooh Afza <96720500+r0ohafza@users.noreply.github.com> Date: Mon, 14 Sep 2026 15:37:33 -0700 Subject: [PATCH 2/4] fix(seo): shorten index description to fit search snippets Review nit: the description was 173 characters and Google truncates around 160. --- pages/index.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/index.mdx b/pages/index.mdx index 63af1fa..4e099de 100644 --- a/pages/index.mdx +++ b/pages/index.mdx @@ -1,5 +1,5 @@ --- -description: "Documentation for the Splits protocol: open-source, audited Split, Waterfall and Swapper smart contracts for managing onchain revenue, with a TypeScript SDK and React hooks." +description: "Documentation for the Splits protocol: open-source, audited Split, Waterfall and Swapper contracts for onchain revenue, plus a TypeScript SDK and React hooks." --- # Docs From 28e412ae8647dc9ffdc738fcf447b896b9f8c302 Mon Sep 17 00:00:00 2001 From: Rooh Afza <96720500+r0ohafza@users.noreply.github.com> Date: Mon, 14 Sep 2026 15:37:33 -0700 Subject: [PATCH 3/4] docs(sdk): say V2 splits instead of SplitV2 contracts in description Review nit: plain wording matches the V1 page's "legacy V1 splits". --- pages/sdk/splits-v2.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/sdk/splits-v2.mdx b/pages/sdk/splits-v2.mdx index f2819b8..6207fe0 100644 --- a/pages/sdk/splits-v2.mdx +++ b/pages/sdk/splits-v2.mdx @@ -1,5 +1,5 @@ --- -description: "Create, update, distribute and withdraw from SplitV2 contracts with the SplitV2Client in the Splits TypeScript SDK." +description: "Create, update, distribute and withdraw from V2 splits with the SplitV2Client in the Splits TypeScript SDK." --- # Splits V2 From 39c01551aa7fd38203d21e76af9175dff557ab05 Mon Sep 17 00:00:00 2001 From: Rooh Afza <96720500+r0ohafza@users.noreply.github.com> Date: Mon, 14 Sep 2026 15:37:33 -0700 Subject: [PATCH 4/4] fix(seo): set og:type on every page Review nit: next-seo only emits og:type when given one, so scrapers saw no type. --- theme.config.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/theme.config.tsx b/theme.config.tsx index d9b63f7..adb1de4 100644 --- a/theme.config.tsx +++ b/theme.config.tsx @@ -61,6 +61,7 @@ const config: DocsThemeConfig = { canonical, openGraph: { url: canonical, + type: 'website', siteName: 'Splits', images: [{ url: ogImage, width: 1200, height: 630, alt: title }], },