シングルページアプリの場合、大きなsitemap.xmlファイルをウェブクローラーに提供する適切な方法は何ですか?

2
2022.01.04

Angularでシングルページアプリ(SPA)を構築しています。アプリ内で表示されるデータは、RESTコールを使ってバックエンドから取得します。これはソーシャルメディアのウェブサイトに関するもので、多くのユーザー生成ページがあることを意味します。

これは、sitemapsが非常に大きくなる可能性があることを意味しており、Angularアプリ自体にパッケージ化することは不可能です。また、ユーザーは常にユーザー生成コンテンツを追加、更新、削除するため、サイトマップのコンテンツはすぐに古くなってしまいます。

今はamazonのs3 bucketにサイトマップを保存していますが、この質問に答えてくれた人によると、googleはクロスドメインのサイトマップを無視するそうです。

では、どのようにしてSPAに大きなサイトマップを提供すればよいのでしょうか?バックエンドには、RESTコールを受信するEC2インスタンスがあります。このインスタンスは、定期的にサイトマップを自動生成し、インターネットに公開されているstatic/sitemapsというフォルダに置いています。EC2インスタンスを使用してサイトマップを提供することはできますか?それはs3バケットを使用するのと同じことです。EC2のストレージはs3よりも高価なので、EC2からサイトマップを提供することは避けたいと思っています。

最後にできることは、サイトマップ用のサブドメインを作ることです。例えば、example.comドメインの隣にsitemaps.example.comがあります。おそらく、sitemaps.example.comを訪れたクローラーを、私のs3バケットに保存されているサイトマップのインデックスファイルにリダイレクトすることができるでしょう。しかし、それがうまくいくかどうかはわかりません。

そこで質問ですが、シングルページアプリの場合、大きなsitemap.xmlファイルをウェブクローラーに提供する適切な方法は何でしょうか?

よろしくお願いします。

回答
2
2022.01.04

一つの解決策として、CloudFrontを使って様々なサービスを一つのドメインの下に結びつけることができます。CloudFrontは、Amazonのコンテンツ配信ネットワーク(CDN)です。お客様のDNSをCloudFrontに向けると、CloudFrontは、動作ルーティングルールに基づいて、さまざまなオリジンサーバーからコンテンツを取得します。また、必要に応じてエッジノードにコンテンツをキャッシュし、パフォーマンスを向上させることもできます。

サイトマップをS3バケットに置いたまま、サイトを現在の場所(EC2インスタンスやロードバランサーなど)でホストすることができます。メインサイトのオリジンからはhttps://example.com/を提供し、バケットからはhttps://example.com/sitemapsを提供するように動作を設定します。

Use a CloudFront web distribution to serve content from multiple originsを参照してください。

1
2022.01.04

XMLサイトマップの目的を明確にすることが重要です。XMLサイトマップ自体は、あなたにとって重要で、すべてのクローリング・ボットに到達させたいURLのリストであり、できるだけ早くクロールされ、インデックスされるようにします。これにより、プロジェクト全体のクローリングが非常に容易になります。ただし、このサイトマップは最新の状態に保つ必要があり、Googleが定義している上限である5万URL以内でなければなりません。

私は少し違った戦略を提案します。コンテンツは定期的に更新され、サイトマップを最新の状態に保つことはできませんが、主要なページのURLを追加します。例えば、仮設ページがカテゴリに分かれている場合、利用可能なすべてのカテゴリをsitemap.xmlに追加します。これにより、ボットが仮設ページのあるカテゴリに到達しやすくなります。また、仮設ページを迅速にクロールしてインデックス化するために、Core Web Vitalsを導入します。この2つの方法で、すべてのプロセスがよりスムーズになります。