Files
supabase/apps/docs/internals/files/reference-lib.ts
Pamela Chia 232eb921ed fix(docs): omit category sections from reference sitemap (#51069)
The Docs sitemap lists a `/reference/<sdk>/undefined` URL for every
reference category header, on both latest and versioned paths (for
example `/reference/kotlin/v1/undefined`). `generateReferencePages`
turns every flattened section into a link, and category headers never
carry a slug. Search engines get a 404 for the `api/undefined` entries
and a soft 404 for the SDK ones.

I filtered the sections with the same predicate the reference static
params already use (`type !== 'category' && !!slug` in
`Reference.utils.ts`). I ran the generator locally before and after the
change: the only entries it removes are the `/undefined` ones (about 4%
of the sitemap), and it adds none.

**Note:** `getFlattenedSections` stays unchanged because the crawler
route and the reference pages share it.

## To test

Tested on Vercel preview:
- [x] Fetch `/docs/sitemap.xml` on the Docs preview and search for
`/undefined</loc>`: expect no matches
- [x] In the same file, search for `/docs/reference/javascript/select`
and `/docs/reference/kotlin/v1/select`: expect both still listed

## Linear
- fixes GROWTH-1310


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Documentation**
* Reference pages no longer generate links for category sections or
sections without a slug. Existing link paths and priorities remain
unchanged.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-09-30 17:13:52 -07:00

45 lines
1.5 KiB
TypeScript

import { REFERENCES } from '../../content/navigation.references'
import { getFlattenedSections } from '../../features/docs/Reference.generated.singleton'
export async function generateReferencePages() {
return (
await Promise.all(
Object.keys(REFERENCES)
.filter((key) => REFERENCES[key].enabled !== false)
.flatMap((key) => {
if (REFERENCES[key].versions.length === 0) {
return [
{
sdkId: REFERENCES[key].libPath,
version: 'latest',
isLatestVersion: true,
libPath: REFERENCES[key].libPath,
},
]
}
return REFERENCES[key].versions.map((version) => {
return {
sdkId: key,
version: version,
isLatestVersion: version === REFERENCES[key].versions[0],
libPath: REFERENCES[key].libPath,
}
})
})
.map(async ({ sdkId, version, libPath, isLatestVersion }) => {
const flattenedSections = await getFlattenedSections(sdkId, version)
return (
flattenedSections
?.filter((section) => section.type !== 'category' && !!section.slug)
.map((section) => ({
link: isLatestVersion
? `reference/${libPath}/${section.slug}`
: `reference/${libPath}/${version}/${section.slug}`,
priority: 0.8,
})) ?? []
)
})
)
).flat()
}