LaunchFast Logo LaunchFast

Integrated Dynamic Streaming-First Sitemap

// ...
import { SitemapStream, streamToPromise } from 'sitemap'

export async function GET() {
  const hostname = 'https://www.launchfa.st'
  const smStream = new SitemapStream({ hostname })
  const slugs = [/* static slugs */]
  try {
    slugs.forEach((url) => {
      smStream.write({ /* url config */ })
    })
    // ...
    smStream.end()
    const sitemap = await streamToPromise(smStream)
    return webResponse(sitemap, 200, {
      'Content-Type': 'text/xml',
    })
  } catch (e: any) {
    // handle errors
  }
}

LaunchFa.st comes with a sitemap.xml.ts Astro endpoint that creates a sitemap as a streaming response, making it available to crawlers such as Google as soon as they request the page. This was quickly done with the help of sitemap package on npm: https://npmjs.com/package/sitemap.

With Astro’s prerender configuration flag per page or endpoint, the sitemaps can also be pre-rendered and also later be statically re-generated using ISR.

Learn More Using Firebase Realtime Database in Astro with Vue: A Step-by-Step Guide → Authenticating users in Astro with Clerk and React: A Step-by-Step Guide → Deploy Astro to AWS Elasic Beanstalk: A Step-by-Step Guide →