Created: 2013-08-07 15:57
Updated: 2019-02-28 07:09
License: bsd-3-clause


Java sitemap generator

This library generates a web sitemap and can ping Google that it has changed. This project has been inspired by sitemapgen4j, but is much more focused on traditional web sitemap and ease of use.

Typical usage:

First add this library to classpath:


If you want to use "ping google / bing" functionality, also add this library to classpath:

    <version>3.12.1</version> <!-- latest version should be fine -->

Typical usage (web sitemap):

String sitemap = SitemapGenerator.of("https://example.com")
    .addPage("foo2.html") // simplest way how to add page - shorthand for addPage(WebPage.of("foo2.html"))
    .addPage(WebPage.of("foo1.html")) // same as addPage("foo1.html")
    .addPage(WebPage.builder().name("bar.html").build()) // builder is more complex
    .addPage(WebPage.builder().maxPriorityRoot().build()) // builder has lots of useful methods

or sitemap in gzip format:

byte[] sitemap = SitemapGenerator.of("https://example.com")

you can set default settings (for the subsequent WebPages):

String sitemap = SitemapGenerator.of("https://example.com")
    .addPage(WebPage.builder().maxPriorityRoot().build()) // URL will be: "/"
    .addPage("foo") // URL will be: "dir1/foo.html"
    .addPage("bar") // URL will be: "dir1/bar.html"
    .addPage("hello") // URL will be: "dir2/hello.html"
    .addPage("yello") // URL will be: "dir2/yello.html"
    // btw. specifying dir and / or extension on WebPage overrides default settings
    .addPage(WebPage.builder().dir("dir3").extension(null).name("test").build()) // "dir3/test"
    .resetDefaultDir() // resets default dir
    .resetDefaultExtension() // resets default extension
    .addPage(WebPage.of("mypage")) // URL will be: "mypage"

or with list of pages:

List<String> pages = Arrays.asList("firstPage", "secondPage", "otherPage");
String sitemap = SitemapGenerator.of("http://example.com")
        .addPages(pages, page -> WebPage.of(page))

or list of pages in complex data type:

class News {
    private String name;
    public News(String name) { this.name = name; }
    public String getName() { return name; }
List<News> newsList = Arrays.asList(new News("a"), new News("b"), new News("c"));
String sitemap = SitemapGenerator.of("http://example.com")
        .addPages(newsList, news -> WebPage.of(news::getName))

or to store it to file & ping google:

// create web sitemap for web http://www.javavids.com
SitemapGenerator sg = SitemapGenerator.of("https://example.com");
// add some URLs
// generate sitemap and save it to file ./sitemap.xml
// inform Google that this sitemap has changed
sg.pingGoogle(); // this requires okhttp in classpath!!!

How to create sitemap index:

String sitemapIndex = SitemapIndexGenerator.of("https://javalibs.com")

How to create RSS channel:

... RSS ISN'T sitemap :-), but it's basically just a list of links (like sitemap) and if you need sitemap, then probably you also need RSS

String rss = RssGenerator.of("https://topjavablogs.com", "Top Java Blogs", "Best Java Blogs")
        .title("News Title")
        .description("News Description")

How to create robots.txt:

... robots.txt ISN'T sitemap :-), but inside it you reference your sitemap and if you need sitemap, then you probably need robots.txt as well :-)

String robotsTxt = RobotsTxtGenerator.of("https://example.com")

My other projects:

What I used to upload jsitemapgenerator to Maven Central:

Cookies help us deliver our services. By using our services, you agree to our use of cookies Learn more