diff --git a/examples/pagination/.eleventy.js b/examples/pagination/.eleventy.js
new file mode 100644
index 0000000..ad186f8
--- /dev/null
+++ b/examples/pagination/.eleventy.js
@@ -0,0 +1,11 @@
+"use strict";
+
+const sitemap = require("../../.eleventy");
+
+module.exports = (eleventyConfig) => {
+ eleventyConfig.addPlugin(sitemap, {
+ sitemap: {
+ hostname: "https://example.com",
+ },
+ });
+};
diff --git a/examples/pagination/_data/posts.json b/examples/pagination/_data/posts.json
new file mode 100644
index 0000000..1143570
--- /dev/null
+++ b/examples/pagination/_data/posts.json
@@ -0,0 +1,27 @@
+[
+ {
+ "url": "/post_a",
+ "name": "Post A"
+ },
+ {
+ "url": "/post_b",
+ "name": "Post B"
+ },
+ {
+ "url": "/post_c",
+ "name": "Post C"
+ },
+ {
+ "url": "/post_d",
+ "name": "Post D"
+ },
+ {
+ "url": "/post_sitemap_ignore",
+ "name": "Post sitemap ignore",
+ "data": {
+ "sitemap": {
+ "ignore": true
+ }
+ }
+ }
+]
diff --git a/examples/pagination/posts.njk b/examples/pagination/posts.njk
new file mode 100644
index 0000000..289dd71
--- /dev/null
+++ b/examples/pagination/posts.njk
@@ -0,0 +1,9 @@
+---
+pagination:
+ data: posts
+ size: 1
+ alias: post
+permalink: "{{ post.url }}/"
+---
+
+
{{ post.name }}
diff --git a/examples/pagination/sitemap.njk b/examples/pagination/sitemap.njk
new file mode 100644
index 0000000..ec892a7
--- /dev/null
+++ b/examples/pagination/sitemap.njk
@@ -0,0 +1,6 @@
+---
+permalink: /sitemap.xml
+layout: null
+eleventyExcludeFromCollections: true
+---
+{% sitemap collections.all %}
diff --git a/package.json b/package.json
index 02af931..d71b8e3 100644
--- a/package.json
+++ b/package.json
@@ -15,6 +15,7 @@
"demo:default": "npx @11ty/eleventy --input=examples/default --output=examples/default/_site --config=examples/default/.eleventy.js",
"demo:multilingual": "npx @11ty/eleventy --input=examples/multilingual --output=examples/multilingual/_site --config=examples/multilingual/.eleventy.js",
"demo:data-file": "npx @11ty/eleventy --input=examples/data-file --output=examples/data-file/_site --config=examples/data-file/.eleventy.js",
+ "demo:pagination": "npx @11ty/eleventy --input=examples/pagination --output=examples/pagination/_site --config=examples/pagination/.eleventy.js",
"test": "run-p -c test:*",
"test:eslint": "eslint \"./**/*.js\" --color",
"test:prettier": "prettier --check ./**/*.js",
diff --git a/src/isPagination.js b/src/isPagination.js
new file mode 100644
index 0000000..c92bebf
--- /dev/null
+++ b/src/isPagination.js
@@ -0,0 +1,4 @@
+"use strict";
+
+module.exports = (item) =>
+ item && item.data && item.data.pagination && item.data.pagination.pages;
diff --git a/src/paginationItems.js b/src/paginationItems.js
new file mode 100644
index 0000000..9ae8cc2
--- /dev/null
+++ b/src/paginationItems.js
@@ -0,0 +1,14 @@
+"use strict";
+
+const isPagination = require("./isPagination");
+
+module.exports = (item) => {
+ if (!isPagination(item)) {
+ return [item];
+ }
+
+ return item.data.pagination.pages.map((page) => ({
+ ...item,
+ ...page,
+ }));
+};
diff --git a/src/sitemapItems.js b/src/sitemapItems.js
index 0dc9497..c0034b1 100644
--- a/src/sitemapItems.js
+++ b/src/sitemapItems.js
@@ -1,9 +1,11 @@
"use strict";
+const paginationItems = require("./paginationItems");
const sitemapItem = require("./sitemapItem");
const sitemapProperty = require("./sitemapProperty");
module.exports = (items, options) =>
items
+ .flatMap(paginationItems)
.filter((item) => !sitemapProperty(item, "ignore") && item.url)
.map((item) => sitemapItem(item, options));