diff --git a/.gitignore b/.gitignore index a3ef750..2ebc802 100644 --- a/.gitignore +++ b/.gitignore @@ -30,3 +30,7 @@ next-env.d.ts # pagefind search index (generated at build) /public/_pagefind + +# agent files (generated at build from content/) +/public/*.md +/public/llms-full.txt diff --git a/app/[[...mdxPath]]/page.jsx b/app/[[...mdxPath]]/page.jsx index da021c8..e63c35c 100644 --- a/app/[[...mdxPath]]/page.jsx +++ b/app/[[...mdxPath]]/page.jsx @@ -1,12 +1,23 @@ import { generateStaticParamsFor, importPage } from 'nextra/pages' import { useMDXComponents as getMDXComponents } from '../../mdx-components.js' +import { structuredData } from '../structured-data.js' export const generateStaticParams = generateStaticParamsFor('mdxPath') +// The page's name in content/: `index` for the home page. +function pageName(params) { + return params.mdxPath?.length ? params.mdxPath.join('/') : 'index' +} + export async function generateMetadata(props) { const params = await props.params const { metadata } = await importPage(params.mdxPath) - return metadata + // Every page has a plain Markdown twin, generated at build from the same + // source, for agents and answer engines that would rather not parse HTML. + return { + ...metadata, + alternates: { types: { 'text/markdown': `/${pageName(params)}.md` } }, + } } const Wrapper = getMDXComponents().wrapper @@ -15,8 +26,12 @@ export default async function Page(props) { const params = await props.params const result = await importPage(params.mdxPath) const { default: MDXContent, toc, metadata } = result + const data = structuredData(pageName(params)) return ( + {data && ( +