Webアプリ用のサイトマップ生成

Googleの検索結果への表示を促進するためにGoogleに対してサイトマップを提供する必要がある。
WordPressでは様々なプラグインを使ってサイトマップを作成できるが、Webアプリの場合は独自に提供する必要がある。
ここでは、Webアプリでサイトマップを生成するためのサーブレットについて説明します。

前提

  • JavaEEを使ったWebアプリを想定しています。ここでは、Javaでサイトマップを生成するためのライブラリであるsitemapgen4jを使用します。
  • Googleに提供するサイトマップファイルには、通常当該サイトで公開対象のURLが複数含まれる単一ファイルになりますが、このファイルのサイズが 50 MB(圧縮しない状態で)を超過する場合や、URL数 が5万件を超える場合、ファイルを分割する必要があります。(サイトマップファイルと、これらのファイルへの参照を定義するサイトマップインデックスファイル)
  • サイトマップの詳細については、Googleのヘルプを参照のこと。

仕様

  • Webアプリで検索して見つかったディレクトリやファイルからサイトマップに含めるURLを構成します。
  • 例えば、ベースのURLが”https://example.com/example-web/”、見つかったファイルが/pages/index.xthml”だった場合、これらを結合した”https://example.com/example-web/pages/index.xthml”というURLをサイトマップファイルに追加します。
  • ベースURLやディレクトリ・ファイルの定義はプロパティファイルに定義します。プロパティファイルの配置場所はクラスパス上の任意の場所を想定します。
    プロパティ名説明値の例
    sitemap.baseurlベースとなるURLhttps://example.com/example-web/
    sitemap.scanMM.path検索ディレクトリであり、このディレクトリを再帰的に検索する。コンテキストからのパスです。MMは任意の整数です。/testdir1
    sitemap.scanMM.patternNN上記のscanMM.pathを検索する際のファイル名(正規表現)。NNは整数であり、NNの値を01, 02,…等のように変更することで複数指定可能。.*\\.xhtml$
    sitemap.exclude.patternZZ上記の検索から除外するディレクトリ・ファイル名であり、ZZを変更することで複数指定が可能。^\\/WEB-INF\\/.*
  • JavaEEベースのWebアプリに組み込みやすいよう、サーブレット単体で実現します。
  • sitemapgen4jの仕様上、ファイルシステムへの出力が必要となります。本プログラムでは一時ディレクトリを作成(Files#createTempDirectory)してサイトマップファイルを出力し、その内容をHTTP応答として返却後に一時ディレクトリとサイトマップファイルを削除しています。

モジュール

関連するファイルは下記の通り。

SimpleSitemapGenerator.javaサイトマップ作成サーブレット
sitemap-config.propertiesプロパティファイル
web.xmlWebアプリの構成ファイル
pom.xmlmavenファイル

サーブレットプログラム

メインとなるサーブレットのソースコード(抜粋)です。

プロパティファイル

上記のサーブレットで使用するプロパティファイルです。

Web.xml

上記のサーブレットをWebアプリに登録します。

pom.xml

mavenを使ってライブラリを指定する場合は次のようにpom.xmlを定義します。
mavenを使わない場合は、/WEB-INF/lib等のクラスパス上にsitemapgen4jのjarを配置します。

動作確認

web.xmlで定義したURLをブラウザで開きます。
Googleのサイトマップとして登録する場合は、Google Search ConsoleのサイトマップでURLを登録します。

下記はブラウザで開いた場合の応答結果です。