Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

docs: added information on sitemap generation #1145

Merged
merged 6 commits into from May 31, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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