投稿日:
2019年10月23日
最終更新日:
【Node.js】npmモジュールの「sitemap-generator」でサイトマップの生成を自動化しよう【クローリング】
YouTubeも見てね♪
ねこじゃすり
猫を魅了する魔法の装備品!
Anker PowerCor
旅行には必須の大容量モバイルバッテリー!
[ノースフェイス] THE NORTH FACE メンズ アウター マウンテンライトジャケット
防水暴風で耐久性抜群なので旅行で大活躍です!
ペヤング ソースやきそば 120g×18個
とりあえず保存食として買っておけば間違いなし!
レッドブル エナジードリンク 250ml×24本
翼を授けよう!
モンスターエナジー 355ml×24本 [エナジードリンク]
脳を活性化させるにはこれ!
ドラゴンクエスト メタリックモンスターズギャラリー メタルキング
みんな大好き経験値の塊をデスクに常備しておこう!
目次
Sitemapを作りたい
静的サイトを作成している際に、複数ページにまたがる場合はSitemapを作成する必要があります。
サイトマップを使うと、ウェブマスターはサイト内のクロールされるページを検索エンジンに簡単に知らせることができます。 サイトマップは、最終アップロード日、通常の更新頻度、サイト内の他の URL との相対的な URL 優先度など、各 URL の詳細メタデータのほか、サイトの URL がリストされている簡単な形式の XML ファイルであるため、検索エンジンでより正確にサイトをクロールできます。
sitemaps.org – プロトコル
このサイトマップですが、URLが少ない場合は手作業で作っても良いかもしれませんが、ページ数が増えたり動的にページが生成される場合は手動で管理するのは到底無理かつ無駄な作業といっても過言ではありません。
そこで、今回はsitemap-generator
を使って自動生成してみようと思います。
Generates a sitemap by crawling your site. Uses streams to efficiently write the sitemap to your drive and runs asynchronously to avoid blocking the thread. Is cappable of creating multiple sitemaps if threshold is reached. Respects robots.txt and meta tags.sitemap-generator – npm
手順
モジュールのインストール
まずは例のごとく、モジュールをyarnにてインストールします。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
yarn add v1.17.3
[1/4] 🔍 Resolving packages...
[2/4] 🚚 Fetching packages...
[3/4] 🔗 Linking dependencies...
[4/4] 🔨 Building fresh packages...
success Saved lockfile.
success Saved 12 new dependencies.
info Direct dependencies
└─ sitemap-generator@8.4.1
info All dependencies
├─ async@2.6.1
├─ cheerio@1.0.0-rc.2
├─ cp-file@6.0.0
├─ crypto-random-string@1.0.0
├─ date-fns@1.29.0
├─ mitt@1.1.3
├─ nested-error-stacks@2.1.0
├─ parse5@3.0.3
├─ robots-parser@2.1.1
├─ simplecrawler@1.1.8
├─ sitemap-generator@8.4.1
└─ urijs@1.19.2
✨ Done in 4.71s.
|
生成
まずはシンプルなsitemap.xml
を生成してみましょう。
実行用のsitemap.js
を用意してみます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
const SitemapGenerator = require("sitemap-generator");
// option
const option = {};
// create generator
const generator = SitemapGenerator("https://blogenist.com", option);
// register event listeners
generator.on("done", () => {
// sitemaps created
});
// start the crawler
generator.start();
|
実行
node sitemap.js
を実行すると、以下のようなファイルが生成されると思います。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://blogenist.jp/</loc>
</url>
<url>
<loc>https://blogenist.jp/2019/10/19/9569/</loc>
</url>
<url>
<loc>https://blogenist.jp/2019/10/11/9457/</loc>
</url>
...
(略)
...
</urlset>
|
SitemapGenerator
を生成する際に指定したURLを自動クローリングしてサイトマップを生成しているようですね。
存在しないURLを指定するとエラー
存在しないURLを指定すると以下のようになります。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
/Users/blogenist/node_modules/sitemap-generator/src/index.js:88
throw new Error(`Site "${parsedUrl.href}" could not be found.`);
^
Error: Site "https://hoge.blogenist.jp" could not be found.
at Crawler.SitemapGenerator.crawler.on (/Users/blogenist/node_modules/sitemap-generator/src/index.js:88:13)
at emitTwo (events.js:126:13)
at Crawler.emit (events.js:214:7)
at /Users/blogenist/node_modules/simplecrawler/lib/crawler.js:1282:25
at FetchQueue.update (/Users/blogenist/node_modules/simplecrawler/lib/queue.js:227:9)
at ClientRequest.<anonymous> (/Users/blogenist/node_modules/simplecrawler/lib/crawler.js:1265:27)
at emitOne (events.js:116:13)
at ClientRequest.emit (events.js:211:7)
at TLSSocket.socketErrorListener (_http_client.js:401:9)
at emitOne (events.js:116:13)
|
オプション
出力先の指定
sitemap.xml
はデフォルトでは実行ディレクトリに生成されます。
今回はpublic
配下に出力するように変えてみようと思います。
オプションにfilepath
を追加します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
const SitemapGenerator = require("sitemap-generator");
// option
const option = {
filepath: "./public/sitemap.xml" // 追加
};
// create generator
const generator = SitemapGenerator("https://blogenist.com", option);
// register event listeners
generator.on("done", () => {
// sitemaps created
});
// start the crawler
generator.start();
|
確認
正しく出力先が変わっていることが確認出来ます。
1
2
3
4
5
6
7
8
9
10
|
.
├── README.md
├── node_modules
├── package.json
├── public
│ ├── favicon.ico
│ ├── index.html
│ └── sitemap.xml
├── sitemap.js
└── yarn.lock
|
最終更新日時の追加
sitemap.xml
に最終更新日
も入れてみましょう。
オプションにlastMod
を追加します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
const SitemapGenerator = require("sitemap-generator");
// option
const option = {
filepath: "./public/sitemap.xml",
lastMod: true // 追加
};
// create generator
const generator = SitemapGenerator("https://blogenist.com", option);
// register event listeners
generator.on("done", () => {
// sitemaps created
});
// start the crawler
generator.start();
|
確認
こちらも正しくlastmod
が追加されました。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://blogenist.jp/</loc>
<lastmod>2019-10-20</loc>
</url>
<url>
<loc>https://blogenist.jp/2019/10/19/9569/</loc>
<lastmod>2019-10-19</loc>
</url>
<url>
<loc>https://blogenist.jp/2019/10/11/9457/</loc>
<lastmod>2019-10-11</loc>
</url>
...
(略)
...
</urlset>
|
ドキュメントによるとこの値は、http-equiv="Last-Modified"
があればその値、なければ実行日が入るようです。
終わりに
Sitemapを作成する場合、手作業でやるのは大変なのでツールによる自動化はマストだと思います。
今回はGoogleが推奨するタグのみを出力してみましたが、他にも様々なオプションがありますので、興味のある方はぜひ試して見てください♪