Rebuilded sitemap generator
This commit is contained in:
+14
-16
@@ -1,33 +1,31 @@
|
||||
import type { SitemapEntry } from './buildSitemapEntries.js';
|
||||
/**
|
||||
* Serializes sitemap entries to an XML STRING with an XSL stylesheet reference,
|
||||
* so /sitemap.xml renders as a readable table in the browser (not raw XML) while
|
||||
* staying a valid sitemap for crawlers.
|
||||
* Serializes sitemap entries to a clean, indented XML STRING — valid for crawlers
|
||||
* and readable in the browser as the native XML tree (indented, collapsible,
|
||||
* syntax-highlighted by the browser itself).
|
||||
*
|
||||
* Why this exists alongside the Next MetadataRoute sitemap: Next's app/sitemap.ts
|
||||
* (returning SitemapEntry[]) does NOT let you inject <?xml-stylesheet?>. To get
|
||||
* the styled table, serve a custom route that returns this string instead:
|
||||
* NO XSLT stylesheet: browsers (Chrome et al.) are REMOVING XSLT support, so a
|
||||
* <?xml-stylesheet?> approach is a dead end — it shows a deprecation warning now
|
||||
* and will break soon. Instead we serve plain XML with the correct Content-Type;
|
||||
* the browser renders its built-in formatted XML view (the "code tree" look) with
|
||||
* no transformation needed.
|
||||
*
|
||||
* // app/sitemap.xml/route.ts
|
||||
* import { buildSitemapXml } from '@intecion/ipal-kit'
|
||||
* import { sitemap } from '@/lib/content' // your entries source
|
||||
* import { sitemap } from '@/lib/content'
|
||||
* export const dynamic = 'force-dynamic'
|
||||
* export async function GET() {
|
||||
* const entries = await sitemap()
|
||||
* const xml = buildSitemapXml(entries, { stylesheetUrl: '/sitemap.xsl' })
|
||||
* const xml = buildSitemapXml(entries)
|
||||
* return new Response(xml, {
|
||||
* headers: { 'Content-Type': 'application/xml; charset=utf-8' },
|
||||
* })
|
||||
* }
|
||||
*
|
||||
* Put sitemap.xsl in the project's /public (copy from the plugin's assets, or
|
||||
* serve it from a route). The <?xml-stylesheet?> points browsers at it; crawlers
|
||||
* ignore it and read the XML. Include hreflang alternates as <xhtml:link>.
|
||||
* The indentation makes the raw XML pleasant to read; the browser's default XML
|
||||
* viewer adds the tree/fold UI. Crawlers read the XML as usual.
|
||||
*
|
||||
* NOTE: if you use this custom route, DON'T also keep app/sitemap.ts — pick one
|
||||
* (the styled route OR the Next MetadataRoute). Two sitemaps at different paths
|
||||
* confuse crawlers.
|
||||
* (this route OR the Next MetadataRoute). Two sitemaps confuse crawlers.
|
||||
*/
|
||||
export declare function buildSitemapXml(entries: SitemapEntry[], opts?: {
|
||||
stylesheetUrl?: string;
|
||||
}): string;
|
||||
export declare function buildSitemapXml(entries: SitemapEntry[]): string;
|
||||
|
||||
Reference in New Issue
Block a user