異なるリンク先のページに同じコンテンツが多数ある場合、この現象を「コンテンツの重複」と呼びます。Web サイトに同じコンテンツが多数ある場合、検索エンジンは Web サイトの価値が高くないと判断します。したがって、あらゆる種類の重複コンテンツを避けるように努める必要があります。
動的 Web サイト上の重複コンテンツは URL パラメーターによって引き起こされることが多く、URL の書き換えによってこの現象が悪化します (これは非常に興味深いことです、笑)。元の URL パラメータが使用されている場合、検索エンジンは適切な判断を下し、重複したコンテンツが URL パラメータによって引き起こされたことを学習し、それに応じて自動的に処理する可能性があるため、URL の書き換えによって URL パラメータが隠蔽され、検索エンジンが混乱する可能性があります。 URL パラメータを認識できません。例えば:
元の URL:
http://www.freeflying.com/articles.aspx?id=231&catelog=blog
http://www.freeflying.com/articles.aspx?id=231&catelog=news
URL書き換え後のURL:
http://www.freeflying.com/blog/231.html
http://www.freeflying.com/news/231.html
これらの URL が指すページの内容は実際には同じで、どちらも id=231 の記事ですが、この記事はブログとニュース欄で参照されています。さまざまな理由により、最終的な URL は上記のままです。
これに対処するには 2 つの方法があります。1 つはロボット プロトコルを使用してそのうちの 1 つを「除外」する方法で、もう 1 つは 301 を通じて URL の 1 つを別の URL に永続的にリダイレクトする方法です。
今日はまずロボットプロトコルについて話します。簡単に言うと、ロボットとは検索エンジンのことを指し、Google では「スパイダー」とも呼びます。スパイダーは非常に礼儀正しく、Web コンテンツをクロールする前にまず意見を求めます。あなたとロボットは、ロボット プロトコルに基づいて以前に通信したことがあります。実装に特有の方法は 2 つあります。
1. 次のような robots.txt テキストを Web サイトのルート ディレクトリに追加します。
#静的コンテンツ、「Admin」フォルダー内のすべてのページを禁止します
ユーザーエージェント: *
許可しない: /Admin
# 行はコメントを示します。
User-agent は検索エンジンを指します。* はすべての検索エンジンを意味します。User-agent: googlebot; のように特定の検索エンジンを指定することもできます。
Disallow は、アクセスを許可しないディレクトリまたはページを指定します。 注: 1. このテキストは大文字と小文字が区別されます。 2. Web サイトのルート ディレクトリを示す「」で始まる必要があります。
このシリーズの目的と同様に、私たちは ASP.NET テクノロジに焦点を当てます。 robots.txt テキストの詳細については、 http://www.googlechinawebmaster.com/2008/03/robotstxt.htmlを参照してください。
しかし、このファイルを動的に生成するにはどうすればよいでしょうか (実際、これに対するニーズはかなり多くあります)。おそらく私たちがすぐに思いつくのは、ルート ディレクトリに txt ファイルを書き込む I/O 操作だと思いますが、実際には別の方法があります。一般的な処理プログラム (.ashx ファイル) を使用するコードは次のとおりです。
コード
<%@ WebHandler 言語="C#" クラス="ハンドラー" %>
システムを使用する;
System.Web を使用します。
パブリック クラス ハンドラー : IHttpHandler {
public void ProcessRequest (HttpContext コンテキスト) {
HttpResponse 応答 = context.Response;
応答.Clear();
//response.ContentType = "text/plain"; IE6 を使用してページを表示したい場合は、理由は不明ですが、このステートメントを実行できません。
//以下の 2 つの文は、実際の使用ではデータベースによって動的に生成されるはずです。
response.Write("ユーザーエージェント: * n");
response.Write("許可しない: /news/231.html n");
//変更されないシールドされたコンテンツを保存する静的ロボット ファイル コンテンツを参照します。
response.WriteFile("~/static-robots.txt");
応答.Flush();
}
public bool IsReusable {
得る {
false を返します。
}
}
}
一般に、ハンドラーは IHttpHandler を実装します。前の UrlRewrite セクションでは、HttpModule について説明しました。実際、ASP.NET アプリケーションのライフ サイクルには、HTTP リクエストが「フィルター処理」を通過します。これは最終的に HttpHandle の「プロセッサ」部分に到達します。HttpModule と HttpHandle は「パイプライン」を形成します。
これに慣れていない場合は、Page のソース コードを確認すると、Page も IHttpHandler を実装していることがわかります。そのため、*.aspx ファイルが最も一般的に使用される HttpHandle です。ただし、Page は HttpHandler であるだけでなく、複雑なページ ライフ サイクル イベントも埋め込まれているため、リソースを節約するという観点から、いくつかの単純なタスクを実行するために、より軽量なカスタムの *.ashx ファイル () を使用することもできます。 txt ファイルの生成と同様に、検証コード (jpg ファイル)、xml ファイルなども生成できます。
次に、URLRewrite を実行します。
コード
void Application_BeginRequest(オブジェクト送信者、EventArgs e)
{
// アプリケーションの起動時に実行されるコード
HttpContext コンテキスト = HttpContext.Current;
文字列 currentLocation = context.Request.Url.LocalPath;
if (currentLocation.ToLower() == "/website1/robots.txt")
{
context.RewritePath("~/Handler.ashx");
}
}
このようにして、スパイダーは、Web サイトのルート ディレクトリに robots.txt ファイルが実際に存在すると認識します。
2. ブロックする必要があるページに META タグを追加します。
<meta id="meta" name="ロボット" content="noindex,nofollow" />
noindex はページにインデックスを作成できないことを意味します
nofollowはページを「フォロー」できないことを意味します(詳しくはSEOハックで説明します)
これは静的ページの効果です。動的に生成する必要がある場合は、非常に簡単です。
コード
protected void Page_Load(オブジェクト送信者, EventArgs e)
{
HtmlMeta メタ = new HtmlMeta();
meta.Name = "ロボット";
meta.Content = "noindex,nofollow";
this.Header.Controls.Add(メタ);
}
説明やキーワードなどもメタで指定でき、技術的な実装は同じです。
では、2 つの方法からどのように選択すればよいのでしょうか?私の提案のいくつか:
1. ウェブサイトの負荷を軽減できる robots.txt を使用してみてください (非常に小さいですが、笑)。スパイダーが robots.txt ファイルを閲覧すると、ブロックされた関連ページを要求しなくなります。メタ メソッドを使用する場合、スパイダーはまずページをリクエストしてから、そのページを取得しないことを決定する必要があります。この時点で、HTTP リクエストが送信され、サーバー側のリソースが過剰に浪費されます。メタがブロックされると、スパイダーが Web サイトの印象に悪影響を及ぼし、Web サイトの検索や組み込みが減少したり放棄されたりする可能性があります。
2. robots.txt テキストの一致は左から右に行われるため、ここでは通常の一致はありません。したがって、場合によっては、メタメソッドを使用する必要があります。記事の冒頭にある URL など:
http://www.freeflying.com/blog/231.html
http://www.freeflying.com/news/231.html
最後に、いくつかの注意事項を記載します。
1. すべてのページで同じキーワードと説明を使用しないでください。これは陥りやすい間違いです。articles.aspx は 1 ページですが、URL パラメーターを追加すると、数千ページになります。そのページでは、何千ものページに同じキーワードと説明が含まれることになります。
2. URL ベースの SessionID の使用は避けてください。 ASP.NET がクライアントで Cookie を無効にすると、同様の効果を持つ URL ベースの SessionID を設定できます。
http://www.freeflying.com/(S(c3hvob55wirrndfd564))/articles.aspx