import type { SitemapEntry } from './buildSitemapEntries.js'; type BuildSitemapXmlOptions = { /** * URL of a CSS stylesheet to make the sitemap readable in the browser, e.g. * '/sitemap.css'. Uses `type="text/css"` — the W3C "Associating Style Sheets * with XML" mechanism, which is NOT deprecated (unlike XSLT / type="text/xsl", * which Chrome/WebKit are removing). CSS on XML shows no warning, styles the * raw tags directly (e.g. `url { display: block }` turns the wall of text into * cards), and crawlers ignore the directive entirely. */ cssUrl?: string; }; /** * Serializes sitemap entries to a clean, indented XML STRING — valid for crawlers * and (with `cssUrl`) styled in the browser via plain CSS. * * Two viewing modes: * - No cssUrl → the browser's native formatted XML tree (indented, collapsible). * - With cssUrl → a `` directive; the project's * CSS styles the XML tags (cards, labels via ::before). NOT XSLT — that's being * removed from browsers and shows a deprecation warning. CSS is safe and * W3C-standard. * * // app/sitemap.xml/route.ts * import { buildSitemapXml } from '@intecion/ipal-kit' * import { sitemap } from '@/lib/content' * export const dynamic = 'force-dynamic' * export async function GET() { * const entries = await sitemap() * const xml = buildSitemapXml(entries, { cssUrl: '/sitemap.css' }) * return new Response(xml, { * headers: { 'Content-Type': 'application/xml; charset=utf-8' }, * }) * } * * Put sitemap.css in the project's /public and style the tags (see docs/seo.md * for a starter). Note: is an XML tag, not — CSS can't make it a * clickable link (some browsers auto-detect URLs); the win is readability, not * clickability. * * NOTE: if you use this custom route, DON'T also keep app/sitemap.ts — pick one. * Two sitemaps confuse crawlers. */ export declare function buildSitemapXml(entries: SitemapEntry[], opts?: BuildSitemapXmlOptions): string; export {};