서로 다른 링크로 가리키는 페이지에 동일한 내용이 많으면 이런 현상을 '중복 콘텐츠'라고 합니다. 그러므로 우리는 모든 종류의 중복 콘텐츠를 피하도록 노력해야 합니다.
동적 웹사이트의 중복 콘텐츠는 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인 기사이지만, 이 기사는 여러 가지 이유로 인해 여전히 위와 같습니다.
이를 처리하는 방법에는 두 가지가 있습니다. 하나는 로봇 프로토콜을 사용하여 그 중 하나를 "제외"하는 것이고, 다른 하나는 301을 통해 URL 중 하나를 다른 URL로 영구적으로 리디렉션하는 것입니다.
오늘은 먼저 로봇 프로토콜에 대해 이야기하겠습니다. 간단히 말해서 로봇은 검색 엔진을 의미하며 Google에서는 이를 "거미"라고도 부릅니다. 스파이더는 매우 정중하며 귀하의 웹 콘텐츠를 크롤링하기 전에 먼저 귀하의 의견을 묻습니다. 당신과 로봇은 이전에도 로봇 프로토콜을 기반으로 통신한 적이 있습니다. 구현과 관련하여 두 가지 방법이 있습니다.
1. 웹사이트의 루트 디렉터리에 다음과 같은 robots.txt 텍스트를 추가합니다.
#정적 콘텐츠, "관리자" 폴더 아래의 모든 페이지를 금지합니다.
사용자 에이전트: *
허용하지 않음: /관리자
# 줄은 주석을 나타냅니다.
User-agent는 검색 엔진을 나타냅니다. *는 모든 검색 엔진을 의미하며 User-agent: googlebot과 같은 특정 검색 엔진을 지정할 수도 있습니다.
Disallow는 액세스가 허용되지 않는 디렉터리나 페이지를 지정합니다. 참고: 1. 이 텍스트는 대소문자를 구분합니다. 2. 웹 사이트 루트 디렉터리를 나타내는 ""로 시작해야 합니다.
이 시리즈의 목적과 마찬가지로 우리는 ASP.NET 기술에 중점을 둡니다. robots.txt 텍스트에 대한 자세한 내용은 http://www.googlechinawebmaster.com/2008/03/robotstxt.html을 확인하세요.
하지만 이 파일을 어떻게 동적으로 생성합니까(실제로 이에 대한 요구 사항이 꽤 많습니다)? 아마도 우리가 즉시 생각하는 것은 루트 디렉터리에 txt 파일을 작성하는 I/O 작업이지만 실제로는 다른 방법이 있습니다. 일반 처리 프로그램(.ashx 파일)을 사용하면 코드는 다음과 같습니다.
암호
<%@ WebHandler Language="C#" 클래스="핸들러" %>
시스템 사용;
System.Web 사용;
공용 클래스 핸들러: IHttpHandler {
공공 무효 ProcessRequest (HttpContext 컨텍스트) {
HttpResponse 응답 = context.Response;
응답.지우기();
//response.ContentType = "text/plain"; IE6을 사용하여 페이지를 보려면 알 수 없는 이유로 이 문을 만들 수 없습니다.
//다음 두 문장은 실제 사용시 데이터베이스에 의해 동적으로 생성되어야 합니다.
response.Write("사용자 에이전트: * n");
response.Write("허용하지 않음: /news/231.html n");
//변경되지 않는 보호된 콘텐츠를 저장하는 정적 로봇 파일 콘텐츠를 참조합니다.
response.WriteFile("~/static-robots.txt");
응답.플러시();
}
공공 bool IsReusable {
얻다 {
거짓을 반환;
}
}
}
일반적으로 핸들러는 IHttpHandler를 구현합니다. 이전 UrlRewrite 섹션에서 HttpModule에 대해 이야기했습니다. 실제로 ASP.NET 응용 프로그램 수명 주기에는 "파이프라인"이라는 개념이 있습니다. HttpModule의 /processing"은 결국 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");
}
}
이런 식으로 스파이더는 웹사이트의 루트 디렉터리에 실제로 robots.txt 파일이 있다고 생각하게 됩니다.
2. 차단해야 하는 페이지에 META 태그를 추가합니다.
<meta id="meta" name="robots" content="noindex,nofollow" />
noindex는 페이지의 색인을 생성할 수 없음을 의미합니다.
nofollow는 페이지를 "팔로우"할 수 없음을 의미합니다. (자세한 내용은 SEO Hack에서 설명됩니다.)
이는 정적 페이지의 효과입니다. 이를 동적으로 생성해야 하는 경우 매우 간단합니다.
암호
protected void Page_Load(개체 전송자, EventArgs e)
{
HtmlMeta 메타 = 새로운 HtmlMeta();
Meta.Name = "로봇";
Meta.Content = "noindex,nofollow";
this.Header.Controls.Add(meta);
}
설명, 키워드 등도 메타로 지정할 수 있으며 기술적 구현은 동일합니다.
그렇다면 두 가지 방법 중에서 어떻게 선택합니까? 내 제안 중 일부:
1. 웹사이트의 로드를 줄일 수 있는 robots.txt를 사용해 보십시오(비록 매우 작기는 하지만, 하하). 왜냐하면 스파이더가 robots.txt 파일을 본 후에는 더 이상 차단된 관련 페이지를 요청하지 않기 때문입니다. 메타 메소드를 사용하면 스파이더는 먼저 페이지를 요청한 다음 이를 검색하지 않기로 결정해야 하며, 이때 Http 요청이 전송되었으며, 추가로 너무 많은 경우 서버측 리소스가 낭비되었습니다. 메타가 차단되면 스파이더가 웹사이트에 부정적인 영향을 미치고 웹사이트 검색 및 포함을 줄이거나 포기하게 됩니다.
2. robots.txt 텍스트의 일치는 왼쪽에서 오른쪽으로 이루어지므로 여기서는 일반적인 일치가 없습니다! 그래서 때로는 메타 방식을 사용해야 할 때도 있습니다. 기사 시작 부분의 URL은 다음과 같습니다.
http://www.freeflying.com/blog/231.html
http://www.freeflying.com/news/231.html
마지막으로 몇 가지 참고 사항:
1. 모든 페이지에 동일한 키워드와 설명을 사용하지 마십시오. Articles.aspx는 한 페이지이지만 URL 매개변수를 추가하면 수천 페이지가 됩니다. 페이지에서 수천 개의 페이지가 동일한 키워드와 설명을 갖게 됩니다!
2. URL 기반 SessionID 사용을 피하십시오. ASP.NET이 클라이언트에서 쿠키를 비활성화하면 비슷한 효과로 URL 기반 SessionID를 설정할 수 있습니다.
http://www.freeflying.com/(S(c3hvob55wirrndfd564))/articles.aspx