Skip to content

Commit

Permalink
docs: added information on sitemap generation (#1145)
Browse files Browse the repository at this point in the history
Co-authored-by: Sébastien Chopin <seb@nuxtjs.com>
  • Loading branch information
heychazza and Atinux committed May 31, 2022
1 parent ade78bb commit 834f52e
Show file tree
Hide file tree
Showing 4 changed files with 64 additions and 0 deletions.
63 changes: 63 additions & 0 deletions docs/content/3.guide/3.recipes/1.sitemap.md
@@ -0,0 +1,63 @@
---
title: Sitemap
---

# Sitemap Generation

A sitemap file is useful for helping Google to better index your website, ensuring that the content you write can be visible on search results.

This can be created utilising the `sitemap` library, so you'll need to install that which can be done like so:

```bash
yarn add --dev sitemap
```

## Server Route

We will be utilising the [server routes](https://v3.nuxtjs.org/guide/features/server-routes) available within Nuxt, and to do so you'll need to create the `server/` directory within your websites root directly.

Once this is done, create a `routes/` directory inside this, and add a `sitemap.xml.ts` file, this will translate to `/sitemap.xml`.

You'll need to add the following:

```ts [server/routes/sitemap.xml.ts]
import { serverQueryContent } from '#content/server'
import { SitemapStream, streamToPromise } from 'sitemap'

export default defineEventHandler(async (event) => {
// Fetch all documents
const docs = await serverQueryContent(event).find()
const sitemap = new SitemapStream({
hostname: 'https://example.com'
})

for (const doc of docs) {
sitemap.write({
url: doc._path,
changefreq: 'monthly'
})
}
sitemap.end()

return streamToPromise(sitemap)
})
```

Now, once users go to `https://example.com/sitemap.xml`, you'll find the generated XML file with all your pages.

When using `nuxt generate`, you may want to pre-render the sitemap since the server route won't be able to run on a static hosting.

You can do this using the `nitro.prerender` option in your `nuxt.config`:

```ts [nuxt.config.ts]
import { defineNuxtConfig } from 'nuxt'

export default defineNuxtConfig({
// ...
nitro: {
prerender: {
routes: ['/sitemap.xml']
}
}
})
```
1 change: 1 addition & 0 deletions docs/content/3.guide/3.recipes/_dir.yml
@@ -0,0 +1 @@
icon: heroicons-outline:book-open
File renamed without changes.

0 comments on commit 834f52e

Please sign in to comment.