Security News
Oracle Drags Its Feet in the JavaScript Trademark Dispute
Oracle seeks to dismiss fraud claims in the JavaScript trademark dispute, delaying the case and avoiding questions about its right to the name.
contentful-sitemap
Advanced tools
Easily generate a sitemap.xml file that consists of both static routes and dynamic routes generated from Contentful content.
Dynamically generate an array of valid sitemap
routes to enable building a live sitemap based on Contentful content via the Contentful API.
Via npm
npm install contentful-sitemap
Via Yarn
yarn add contentful-sitemap
contentful-sitemap
requires a Contentful client in order to fetch entries from
your Contenful space in order to build your dynamic sitemap entries. So, make sure
you have contentful
as a dependency in your project.
Install contentful
npm i -S contentful
Create Contentful client
const contentful = require('contentful');
const { ContentfulSitemap } = require('contentful-sitemap');
const client = contentful.createClient({
accessToken: '[ACCESS_TOKEN]',
space: '[SPACE_ID]',
});
Next comes setting up the ContentfulSitemap
instance that will be used by your
/sitemap.xml
route to generate and return the sitemap. ContentfulSitemap
requires
a client
instance, so make sure you pass one into the constructor.
Create ContentfulSitemap
instance
const sitemapGenerator = new ContentfulSitemap(client, [routes], {options});
client
- Contentful client that will be used for fetching locales and entries from Contentful.
routes
- Array of route definitions to use to generate sitemap.
options
- Options that you can use to customize how sitemaps are generated.
contentful-sitemap
generates a route array that is compatible with the
sitemap
package for generating your
sitemap.xml
file, so all route
options supported by that package are
also supported within the routes
array you pass in. You can pass in both
static and dynamic Contentful routes within the array. Below are the few
specifics that directly relate to how contentful-sitemap
will process
your routes
entries.
Name | Default | Description |
---|---|---|
url | null | Use this property if the path you are providing does not require any segments to be swapped out dynamically. |
id | null | Contentful entry id to fetch for the specific path. Only used if the dynamicLastmod option is set to true . |
pattern | null | path-to-regexp pattern to use for generating dynamic listings based on Contentful content or setting locale specific paths. |
priority | 1 | Default priority to set for each url . Set to 1 as a default so it can be excluded in your routes definitions. |
params | null | Object used to specify the mapping of pattern parameter to Contentful response data. |
query | null | Query used by the Contentful client for fetching entries. All contentful getEntries query options are supported. |
The following options can be used to customize the way your sitemap is generated.
The one option that you’ll definitely want to set, if not defined in your routes
is the origin
option, which is prefixed before the url
s and pattern
s defined
in your routes.
Name | Default | Description |
---|---|---|
locales | [] | Array of locales to include for all route instances, if not using dynamicLocales . |
dynamicLocales | false | Whether or not to fetch the list of enabled locales from Contentful. |
dynamicLastmod | false | Automatically use the lastmodParam value of each entry to set the lastmod value. |
lastmodParam | sys.updatedAt | Contentful model field to use when populating lastmodISO in route(s). |
localeParam | locale | The param to set within your pattern to replace with a locale . |
defaultLocale | null | The default locale that will be used in the main loc value for a url . |
addRoute(route)
- Method to use for adding additional urls after the initial ContentfulSitemap
instance has been created.
buildRoutes()
- The magic✨ Call this method when you want to generate your Contentful routes to be passed to sitemap
.
toXML((xml, err) => {})
- DEPRECATED - This was the previous method that this class used to build and return the full sitemap.xml
string, but due to changes made to the sitemap
package it seemed like it would be easier to support the current—and future—versions of that package by simplifying this package to do one thing well, while offering more flexibility with how you would like to use sitemap
to generate your sitemap(s).
const express = require('express');
const contentful = require('contentful');
const { SitemapStream, streamToPromise } = require('sitemap');
const { createGzip } = require('zlib');
const { ContentfulSitemap } = require('contentful-sitemap');
const app = express();
const client = contentful.createClient({
accessToken: '[ACCESS_TOKEN]',
space: '[SPACE_ID]',
});
const sitemapGenerator = new ContentfulSitemap(client, [
{
pattern: '/',
id: '[HOME_PAGE_ID]',
},
{
pattern: '/about',
id: '[ABOUT_PAGE_ID]',
priority: 0.7,
},
{
pattern: '/news',
id: '[NEWS_PAGE_ID]',
},
{
pattern: '/news/:slug',
priority: 0.5,
query: {
content_type: '[CONTENTFUL_MODEL_TYPE (e.g. `newsArticlePage`)]',
select: 'fields.slug',
},
params: {
slug: 'fields.slug',
},
},
{
url: '/terms',
priority: 0.3,
},
{
url: '/privacy',
priority: 0.3,
}
]);
let sitemap;
app.get('/sitemap.xml', (req, res) => {
res.header('Content-Type', 'application/xml');
res.header('Content-Encoding', 'gzip');
if (sitemap) {
return res.send(sitemap);
}
try {
const smStream = new SitemapStream({ hostname: 'https://example.com/' });
const pipeline = smStream.pipe(createGzip());
return sitemapGenerator.buildRoutes()
.then(routes => {
// pipe your entries or directly write them.
routes.forEach(route => smStream.write(route));
smStream.end()
// cache the response
streamToPromise(pipeline).then(sm => sitemap = sm)
// stream write the response
pipeline.pipe(res).on('error', (e) => {throw e})
})
.catch(error => {
console.error(error);
res.status(500).end();
});
} catch (e) {
console.error(e)
res.status(500).end()
}
});
...
FAQs
Easily generate a sitemap.xml file that consists of both static routes and dynamic routes generated from Contentful content.
The npm package contentful-sitemap receives a total of 734 weekly downloads. As such, contentful-sitemap popularity was classified as not popular.
We found that contentful-sitemap demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Oracle seeks to dismiss fraud claims in the JavaScript trademark dispute, delaying the case and avoiding questions about its right to the name.
Security News
The Linux Foundation is warning open source developers that compliance with global sanctions is mandatory, highlighting legal risks and restrictions on contributions.
Security News
Maven Central now validates Sigstore signatures, making it easier for developers to verify the provenance of Java packages.