第7章 搜索引擎优化.docx

上传人:b****3 文档编号:26407973 上传时间:2023-06-19 格式:DOCX 页数:31 大小:2MB
下载 相关 举报
第7章 搜索引擎优化.docx_第1页
第1页 / 共31页
第7章 搜索引擎优化.docx_第2页
第2页 / 共31页
第7章 搜索引擎优化.docx_第3页
第3页 / 共31页
第7章 搜索引擎优化.docx_第4页
第4页 / 共31页
第7章 搜索引擎优化.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

第7章 搜索引擎优化.docx

《第7章 搜索引擎优化.docx》由会员分享,可在线阅读,更多相关《第7章 搜索引擎优化.docx(31页珍藏版)》请在冰豆网上搜索。

第7章 搜索引擎优化.docx

第7章搜索引擎优化

第7章 搜索引擎优化

在增加了产品属性后,你可能急着增加一些新的特性,例如接受用户付款,产品搜索或者购物篮等,我们将在以后增加这些。

在这之前,我们需要为Web站点增加搜索引擎优化。

这是一个重要的话题,因为它直接影响一个Web站点的效益。

搜索引擎优化(Searchengineoptimization),或者说SEO,指的是通过非盈利的搜索引擎来提高访问站点的访问者数量,通过相关的关键字来提高站点的搜索排名。

当然SEO是一个复杂的话题,本章中我们将修改BalloonShop站点,以便它的核心架构是搜索引擎友好的。

7.1 优化BalloonShop(OptimizingBalloonShop)

下面看看为了BalloonShop更搜索引擎友好,我们能够做些什么?

本章中我们将:

•通过URL重写在URL中包含关键字,不是通过各种查询字符串来请求default.aspx或者catalog.aspx,我们的站点将支持URL,该URL对用户和搜索引擎都更友好,例如

•适当地重定向到老的URL或者误写的URL到正确的URL。

若你的老的URL在线有一段时间并且它们有分页控制是这是很重要的。

这个转换各种不同格式的URL到一个标准形式的过程称为URL规范。

•重定向请求到default.aspx以及index.html到/。

因为我们不想同样的内容在站点的不同的URL中复制。

这可能导致搜索引擎处罚。

•使用404(pagenotfound)和500(servererror)状态代码来反映站点的问题。

我们将创建更SEO相关(SEO-related)努力在本章中,但是我们可能只涉及到一些基本的知识。

下面的有关SEO相关(SEO-related)的内容将讨论。

•我们正确使用页标题和其他标记,以便搜索引擎能够标识页面的重要的拷贝。

•我们没有重复的内容。

类别不包含同样的页面或页面框架,这将引起搜索引擎处罚。

•产品,部门和类别页面很容易访问。

•每一个页面有自己的标题来反映它的内容。

•产品列表通过分页可访问其所有的子页面,不仅仅是Previous和Next链接。

这将使得产品分页很容易被搜索引擎和访问者访问。

•产品图片有相关的alt属性。

•我们不使用诸如Flash和Ajax技术,它们的内容不会被搜索引擎读取。

本章的后面,你将看到一个使用Ajax的例子,它不会影响搜索引擎的可见性。

7.2 支持URL包含关键字(SupportingKeyword-RichURLs)

先看看如下的URL,选择你喜欢的一个:

自然的,你可能喜欢第二个,不仅仅它包含了相关页面内容的关键字,它可能影响搜索引擎的排名,更重要的是它更吸引访问者。

我们称第一个URL为动态URL,第二个为包含关键字的URL。

包含关键字的URL和动态URL的差别是包含关键字的URL不是指向一个已存在的物理文件或文件夹,另外,动态URL指向一个实际的文件,该文件能够被服务器执行或加载—例如前面例子中的Catalog.aspx页面。

实际中,为支持包含关键字的URL,你需要书写拦截URL的代码,遵循一定的模式并重写请求到另外一个可以被应用处理的URL。

这个过程称为URL重写。

图Figure7-1显示了一个简单的URL重写的例子。

正如你所看到的,URL重写拦截了访问者的URL请求并将其重写到一个动态的应用能够理解的URL。

ASP.NET脚本执行后,结果被发送到用户。

Figure7-1.AURLrewritingexample

7.2.1 UrlRewriter.NET和ISAPI_Rewrite

编写你自己的URL重写代码是一个复杂的任务,不值得提倡,除非你要创建你自定义的URL重写解决方案。

在典型的URL重写场合,使用已存在的UR重写产品是有意义的—例如HeliconTech(的ISAPI_Rewrite或者UrlRewriter.NET()。

这两个产品,以及创建你自己的URL重写代码的技术,在ProfessionalSearchEngineOptimizationwithASP.NET(WroxPress,2007)中有涉及。

对于开发BalloonShop站点,我们使用UrlRewriter.NET。

该工具是ASP.NET的实现URL重写的开源组件,所以它能够方便地整合到你的项目中。

而ISAPI_Rewrite,是作为一个ISAPI过滤器来实现的,它在IIS级别上来完成URL重写。

7.2.2 包含URL关键字的BalloonShop站点

有几种方式进行URL关键字的包含。

在BalloonShop中,我们使用的技术既有效又简单。

我们将在URL关键字中隐藏相关ID值,例如

本章中,我们将按照Table7-1来进行URL的支持。

其中,“X”用来表示department,category和productID值的占位符,“P”是一个页号。

7.2.3 为BalloonShop添加包含关键字的URL

下面的练习将实现包含关键字URL的支持。

练一练:

支持包含关键字的URL

1.访问,点击下载按钮,下载产品的最新版本。

2.产品包包含一个名称为UrlRewriterV2的文件夹。

解压到硬盘中不同于BalloonShop站点的文件夹中,例如可以解压到C:

\目录中。

3.在VisualWebDeveloper中打开项目。

4.增加一个到Intelligencia.UrlRewriter程序集的引用。

方法是,在项目解决方案中右键点击项目的根文件夹,选择AddReference....,点击Browsetab,选择UrlRewriterV2\bin\Release\Intelligencia.UrlRewriter.dll,选择该文件并点击OK。

5.打开项目配置文件web.config,增加如下的配置节,使得UrlRewriter.NET可以从名称为rewriter的配置节点中读取配置。

xmlversion="1.0"?

>

type="Intelligencia.UrlRewriter.Configuration.➥

RewriterConfigurationSectionHandler,Intelligencia.UrlRewriter"/>

...

...

注意:

元素必须是元素的第一个子元素。

6.现在配置UrlRewriterHTTP模块,它允许UrlRewriter.NET来拦截进入的请求:

...

System.Web.Extensions,Version=3.5.0.0,Culture=neutral,➥

PublicKeyToken=31BF3856AD364E35"/>

Intelligencia.UrlRewriter"name="UrlRewriter"/>

...

7.最后,你必须确认UrlRewriter.NET被配置来接收到不存在的文件或文件夹的所有请求。

如果你使用IIS7(inWindowsVista),你必须在web.config文件增加如下的配置:

RewriterHttpModule"/>

对于老版本的IIS(inWindowsXP,Windows2000Server,orWindows2003Server),你必须打开IIS管理工具,并导航到Web站点属性窗口的Home目录标签,然后选择Configuration,并点击AddorInsert,来增加路径到aspnetisapi.dll(应该是C:

\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnetisapi.dll)。

在WindowsXP和Windows2000Server,还需要为文件扩展名书写.*,并取消fileexistscheckbox的选择。

最后,点击OK来关闭所有对话框。

8.好了,现在UrlRewriter.NET可以使用了。

第一个测试中,我们为请求/my-super-product.aspx重定向到/Product.aspx?

ProductID=1。

增加如下的配置到web.config文件的配置节:

...

...

9.加载如图Figure7-2所示。

Figure7-2.AURLrewritingexample

10.既然你已经测试了你的URL重写特性工作得很好,为products,categories和departments增加实际的URL重写规则如下:

--Rewritedepartmentpages-->

$"to="~/Catalog.aspx?

DepartmentID=$1"➥

processing="stop"/>

$"➥

to="~/Catalog.aspx?

DepartmentID=$1&Page=$2"processing="stop"/>

--Rewritecategorypages-->

$"➥

to="~/Catalog.aspx?

DepartmentId=$1&CategoryId=$2"processing="stop"/>

$"➥

to="~/Catalog.aspx?

DepartmentId=$1&CategoryId=$2&Page=$3"➥

processing="stop"/>

--Rewriteproductdetailspages-->

$"to="~/Product.aspx?

ProductId=$1"➥

processing="stop"/>

11.此时,你的站点能够正确支持包含关键字的URL。

例如,加载7-3所示。

Figure7-3.Testingkeyword-richURLs

解释该例是如何工作的:

支持包含关键字的URL

此时,你能够测试所有包含关键字的URL:

department页面和subpages,category页面和subpages,前端页面(frontpage)和subpages,和产品细节页面链接。

注意,当前站点产生的链接仍然是老的动态URL。

修改站点产生的链接是下一个练习的话题。

你刚刚实现的功能的核心是在web.config中增加了元素。

第一个重写规则是最简单的:

$"to="~/Catalog.aspx?

DepartmentID=$1"processing="stop"/>

正如你看到的,规则是由带有三个属性的元素组成的:

•url表示需要重写的请求URL。

•to表示重写的URL。

•processing是一个可选的参数,该参数使得假如有一个规则匹配时编译停止读取进一步的重写规则。

url属性包含了一个规则表达式,描述了重写规则将要匹配的URL。

我们在后面将讨论规则表达式。

—现在,假设上面的规则表达式—^.*-d([0-9]+)/?

$—匹配下面形式的字符串,而N是一个数字:

Some-text-here-dN/。

你可以看到这个字符串和包含关键字URL的部门页面之间的相似性:

重写规则抽取匹配的数字N并将其存到变量$1中,该变量将被应用到表示重写的URL的to部分中,to部分看上去如下:

to="~/Catalog.aspx?

DepartmentID=$1"

当$1被BalloonsforChildren部门的ID号替换后,该ID号为2,to部分变成了如下动态URL的形式:

~/Catalog.aspx?

DepartmentID=2

ASP.NET拦截~作为项目的根,所以这个链接将指向Catalog.aspx文件。

下面我们将谈谈规则表达式。

7.3 URL重写和规则表达式(URLRewritingandRegularExpressions)

规则表达式是程序员既爱又恨得话题。

一个规则表达式,通常称为regex,是一个使用特殊格式来描述文本模式的文本字符串。

规则表达式用来定义匹配或转换字符串组的规则。

关于它的细节可参考Wikipedia页面http:

//en.wikipedia.org/wiki/Regularexpression。

规则表达式在你需要操作没有良好定义格式的字符串时特别有用(例如XML文档)。

例如,规则表达式能够被用来抽取或验证电子邮件地址,找出字符串中的有效日期,删除文本中的重复行,找出一个段落中单词或字母出现的次数,找出或验证一个IP地址等等。

在前面的练习中,我们使用了URL重写规则,使用了规则表达式,来匹配进入的包含关键字的URL,并获得其重写的动态URL。

本章的后面,我们将使用规则表达式来准备一个字符串,通过反斜杠来替换不支持的字符并消除重复的风格字符。

规则表达式支持多种语言和工具,包含.NET语言和URL重写工具。

工作于C#上的规则表达式多数情况下不需要修改就可以工作于Java或PHP中。

当基于规则表达式来工作时,通常至少需要提供三个关键元素:

•需要解析或操作的源字符串

•将应用到源字符串的规则表达式

•需要完成的操作种类,可以是获得匹配的子串或用其它的来替换

规则表达式使用基于文字字符的特殊语法,通过字面上进行解析,以及特殊字符,有特殊的匹配属性。

特殊字符有特殊的属性,这就使得规则表达式很有用。

例如,问好标记(?

)特殊字符指定前面的字符时可选的。

所以,如果想匹配“color”和“colour,”规则表达式可以是colou?

r。

若要探究规则表达式的细节,规则表达式可能会非常复杂。

本节中我们将解释我们使用的规则表达式。

表Table7-2包含了大多数规则表达式特殊字符的描述。

为了理解这些特殊字符是如何使用的,我们来分析BalloonShop站点中的重写规则。

重写类别页面需要两个规则—一个处理分页的类别,另一个处理未分页的类别。

下面的规则重写带有分页的类别:

url="^.*-d([0-9]+)/.*-c([0-9]+)/page-([0-9]+)/?

$"

to="/Catalog.aspx?

DepartmentId=$1&CategoryId=$2&Page=$3"

processing="stop"/>

这个规则表达式用来匹配URL诸如其它一些字符,-c,和另外一个数字(表示类别ID号);接着是/page-和一个数字,表示页号。

使用表Table7-2作为参考,我们来分析规则表达式的技术。

表达式以^字符开始,匹配请求URL的开始(URL不包括域名)。

字符.*匹配零个或多个字符的任意字符串,因为.(dot)表示任意单个字符,*(asterisk)表示前面的字符或表达式(这里是.)可能重复零次或多次。

下面的字符组,-d([0-9]+),将抽取部门ID号。

-d部分进行字面上解释—字符串必须包含一个破折号,接着是字母d。

[0-9]匹配0和9之间的任意字符(也就是说,是任意的数字),而紧接着的+号表示该模式可以重复一次或多次,所以我们可以有一个多个数字字符的数,而不是仅仅是一个数字字符的数。

围绕[0-9]+的封闭括号表示规则表达式应该将匹配的字符串(这里将是部门ID号)存储到一个变量$1中。

我们需要该变量来撰写重写的URL。

同样的原则应用在保存类别ID号和页号到变量$2和$3中。

最后,?

表示指定的URL可能以反斜杠(slash)结尾,但是反斜杠(slash)是可选的。

规则表达式以$结束,它匹配字符串的结束。

注意,当你需要使用有特殊字符含义的符号作为其字面值解释时,你必须使用反斜杠进行转义。

例如,如果你想匹配Catalog.aspx,规则表达式应该读取Catalog\.aspx。

反斜杠\是转义字符,表示.(dot)应该被认为是一个字面上的.,而不是指特殊字符。

重写规则的第二个参数将使用规则表达式抽取的变量放入重写的URL中:

/Catalog.aspx?

DepartmentId=$1&CategoryId=$2&Page=$3

变量$1,$2,和$3由规则表达式提供的值来替换,这样URL被应用加载。

注意ampersand字符(&)被写成&,这是因为XML格式的约定。

当使用不遵循XML文件重写规则的URL重写工具时,你就不需要编码&字符。

重写规则是按照它们在配置文件中的书写顺序进行处理的。

如果你想当一个匹配找到时,该规则是最后一个处理,你必须使用processing="stop"属性。

这个属性的可选值是continue(缺省)和restart。

这个属性在有很长的重写规则列表时很有用;将其值设置为stop有助于提高效率,并避免重写引擎来处理一旦一个匹配找到时随后的所有规则。

7.3.1 .NET规则表达式(.NETRegularExpressions)

我们刚刚添加到web.config中的重写规则不是在BalloonShop中使用规则表达式的惟一场合。

在下面的练习中,我们将通过编程的方式,通过使用其名称和ID来为department,category和product名称创建包含关键字的URL。

有department,category和product名称的问题是它们通常不能被包含在URL中。

这些名称包含了特殊的字符(例如空格,逗号等等),这些都需要进行转义。

幸运地是,.NET框架包含了非常有用的方法HttpUtility.UrlEncode,它可以为一个URL字符串来转义这些特殊的字符。

使用这个方法,我们能够为位于AnniversaryBalloons部门的Love&Romance类别创建下面的URL:

这个URL在两个方面不是很理想。

首先,它看上去很丑陋。

第二,依赖于安全设置,IIS可能拒绝这个请求,带有错误信息如下:

Therequestfilteringmoduleisconfiguredtodenyarequestthatcontainsadoubleescapesequence.

正如你猜测的,我们将利用规则表达式—这次用C#—来产生友好的URL。

我们将使用规则表达式从名称中来排除所有的特殊字符,并使用破折号来替换它们。

这样对于类别Love&Romance来说,我们将产生一个更友好的URL:

你可以在http:

//www.regular-expressions.info/dotnet.html发现一个快速和有用的关于规则表达式的介绍,在AndrewWatt’sBeginningRegularExpressions也包含了.NET规则表达式实现的细节介绍。

Microsoft.NET将所有的规则表达式的功能封装在六个类和一个代理中,中,由表Table7-3所描述。

这些类是System.Text.RegularExpressions名称空间的一部分。

当实例化Regex类时,就得到一个表示规则表达式的对象。

该对象能够完成匹配和字符串替换等操作。

下面是一个简单的使用Regex,Match和Group的例子:

Regexregex=newRegex("^/(.*)-d([0-9]+)/.*-c([0-9]+)/?

$");

Matchmatch=regex.Match("/Anniversary-Ball

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 其它语言学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1