常に新しいページを生成している非常に動的なWebサイトは sitemap を使用する必要がありますか?もしそうなら、stackoverflow.comのようなサイトはどのようにサイトマップを再生成しますか?誰かが質問を追加するたびにサイトマップを常に再生成しているとしたら、それは貴重なサーバーリソースの浪費となるでしょう。設定された間隔(4時間ごとなど)で新しいサイトマップを生成しますか?動的で大規模なWebサイトがどのように機能するか非常に興味があります。
Stackoverflow(およびすべてのStack Exchangeサイト)では、システムに投稿されたすべての質問へのリンクを含むsitemap.xmlファイルが作成されます。新しい質問が投稿されると、サイトマップファイルの最後に別のエントリを追加するだけです。ファイルの最後に追加するのはそれほどリソースを消費しませんが、ファイルは非常に大きくなります。
これが、Googleなどの検索エンジンがサイトを効果的にクロールできる唯一の方法です。
Jeff Atwoodがブログ投稿でそれについて語っている: サイトマップの重要性
これは サイトマップ のGoogleのウェブマスターヘルプページからです:
サイトマップは、次の場合に特に役立ちます。
- サイトに動的なコンテンツがあります。
- サイトに、クロールプロセス中にGooglebotによって簡単に検出されないページがあります-たとえば、リッチAJAXまたはFlashを特徴とするページ)。
- あなたのサイトは新しく、リンクがほとんどありません。 (Googlebotは、あるページから別のページへのリンクをたどってWebをクロールするため、サイトが適切にリンクされていない場合、サイトを見つけにくい場合があります。)
- あなたのサイトには、相互に適切にリンクされていないか、まったくリンクされていないコンテンツページの大規模なアーカイブがあります。
質問が投稿されるたびにGoogleサイトマップXMLを再生成する必要はありません。 XMLファイルをデータベースから直接オンデマンドで生成する(そして少しキャッシュする)だけのほうがはるかに簡単です。
負荷を軽減するために、サイトマップは多くのサイトマップに分割できます。日/月ごとに分割すると、今日のサイトマップを頻繁に取得するようにGoogleに指示できますが、時々6か月前のサイトマップのみを取得します。
それが誰かにも役立つ場合に備えて、ここで私のソリューションを共有したいと思います。何をすべきかを決めるのに、私はこの質問と他の多くの質問を読んだ。
私のサイト構造。
静的ページ
...等
動的ページ
私のアプローチ。
sitemap.xml:このURLは<sitemapindex />
を生成し、最初のアイテムは/sitemap-main.xml
です。 Artists
、Albums
、Songs
などの数がカウントされ、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週間キャッシュします。そうでなければ、私はそれを数時間だけキャッシュします。
これは他の誰かが自分のシステムを実装するのに役立つと思います。
StackOverflowのようなものでさえ、一定量の静的編成があります。 FAQ、タグページ、質問ページ、ユーザーページ、バッジページなどがあります。非常に動的なサイトでは、サイトマップにアプローチする最善の方法は、分類のマップを用意することです。サイトマップの各ノードは、動的に生成されたデータのページ(質問ページのノード、ユーザーページのノードなど)を指すことができます。
もちろん、サイトマップは特定のサイトには適切ではない場合もあります。そこには、ある程度の判断の呼びかけが必要です。
非常に動的なサイトの場合、毎日実行するcronジョブをサーバーで作成しました。それは毎日私のバックエンドに残りの呼び出しを行い、新しく生成されたすべてのコンテンツに従って新しいサイトマップを生成し、xmlファイルの形式でサイトマップを返します。この新しいサイトマップは以前のサイトマップを上書きし、すべての変更に従って私のウェブサイトを更新し続けます。新しく追加された動的コンテンツごとにサイトマップを変更することは良いアプローチではないと思います