web-dev-qa-db-ja.com

非常に動的なWebサイトでサイトマップを生成する方法は?

常に新しいページを生成している非常に動的なWebサイトは sitemap を使用する必要がありますか?もしそうなら、stackoverflow.comのようなサイトはどのようにサイトマップを再生成しますか?誰かが質問を追加するたびにサイトマップを常に再生成しているとしたら、それは貴重なサーバーリソースの浪費となるでしょう。設定された間隔(4時間ごとなど)で新しいサイトマップを生成しますか?動的で大規模なWebサイトがどのように機能するか非常に興味があります。

45
Andrew Garrison

Stackoverflow(およびすべてのStack Exchangeサイト)では、システムに投稿されたすべての質問へのリンクを含むsitemap.xmlファイルが作成されます。新しい質問が投稿されると、サイトマップファイルの最後に別のエントリを追加するだけです。ファイルの最後に追加するのはそれほどリソースを消費しませんが、ファイルは非常に大きくなります。

これが、Googleなどの検索エンジンがサイトを効果的にクロールできる唯一の方法です。

Jeff Atwoodがブログ投稿でそれについて語っているサイトマップの重要性

これは サイトマップ のGoogleのウェブマスターヘルプページからです:

サイトマップは、次の場合に特に役立ちます。

  • サイトに動的なコンテンツがあります。
  • サイトに、クロールプロセス中にGooglebotによって簡単に検出されないページがあります-たとえば、リッチAJAXまたはFlashを特徴とするページ)。
  • あなたのサイトは新しく、リンクがほとんどありません。 (Googlebotは、あるページから別のページへのリンクをたどってWebをクロールするため、サイトが適切にリンクされていない場合、サイトを見つけにくい場合があります。)
  • あなたのサイトには、相互に適切にリンクされていないか、まったくリンクされていないコンテンツページの大規模なアーカイブがあります。
45
Robert Cartaino

質問が投稿されるたびにGoogleサイトマップXMLを再生成する必要はありません。 XMLファイルをデータベースから直接オンデマンドで生成する(そして少しキャッシュする)だけのほうがはるかに簡単です。

負荷を軽減するために、サイトマップは多くのサイトマップに分割できます。日/月ごとに分割すると、今日のサイトマップを頻繁に取得するようにGoogleに指示できますが、時々6か月前のサイトマップのみを取得します。

13
ceejayoz

それが誰かにも役立つ場合に備えて、ここで私のソリューションを共有したいと思います。何をすべきかを決めるのに、私はこの質問と他の多くの質問を読んだ。

私のサイト構造。

静的ページ

  • ホーム(非常に動的。30分間キャッシュされる)
  • アーティスト、アルバム、曲、プレイリスト、アルバム(ページ番号付きリスト)
  • 法務(規約などの静的ページ)

...等

動的ページ

  • アーティスト、アルバム、曲、プレイリスト、アルバムの詳細ページ

私のアプローチ。

sitemap.xml:このURLは<sitemapindex />を生成し、最初のアイテムは/sitemap-main.xmlです。 ArtistsAlbumsSongsなどの数がカウントされ、1,000で除算されます(各サイトマップに必要なURLの数。上限は50,000です)。この数値を切り上げます。

たとえば、1900曲= 1.9 = 2の場合、生成します。 URL /sitemap-songs-0.xmlおよび/sitemap-songs-1.xmlをインデックスに追加します。これを他のすべてのアイテムについて繰り返します。基本的に、私はページネーションをしています。

出力はキャッシュされずに返されます。いつも新鮮にしてほしい。


sitemap-main.xml:これはすべての静的ページをリストします。たまに更新するだけでよいので、実際には静的ファイルを使用できます。


sitemap-songs-0.xml、sitemap-albums-0.xmlなど:SlimPhp 2では、これに単一のルートを使用しています。

$app->get('/sitemap-:type-:page.xml', function ($type, $page) use ($app) {...

単純なswitchステートメントを使用して、関連するファイルを生成します。このページで、上記の制限である1,000アイテムを取得した場合、ファイルを2週間キャッシュします。そうでなければ、私はそれを数時間だけキャッシュします。

これは他の誰かが自分のシステムを実装するのに役立つと思います。

4
frostymarvelous

StackOverflowのようなものでさえ、一定量の静的編成があります。 FAQ、タグページ、質問ページ、ユーザーページ、バッジページなどがあります。非常に動的なサイトでは、サイトマップにアプローチする最善の方法は、分類のマップを用意することです。サイトマップの各ノードは、動的に生成されたデータのページ(質問ページのノード、ユーザーページのノードなど)を指すことができます。

もちろん、サイトマップは特定のサイトには適切ではない場合もあります。そこには、ある程度の判断の呼びかけが必要です。

2
Paul Sonier

非常に動的なサイトの場合、毎日実行するcronジョブをサーバーで作成しました。それは毎日私のバックエンドに残りの呼び出しを行い、新しく生成されたすべてのコンテンツに従って新しいサイトマップを生成し、xmlファイルの形式でサイトマップを返します。この新しいサイトマップは以前のサイトマップを上書きし、すべての変更に従って私のウェブサイトを更新し続けます。新しく追加された動的コンテンツごとにサイトマップを変更することは良いアプローチではないと思います

0
Muhammad Ahsan