Silverlight应用的SEO优化-2
Silverlight应用的SEO优化-2
上一次,我讲了一点使一个Sliverlight应用可被搜索引擎收录索引的一般过程。这一次,我将深入到SilverlightStore搜索引擎优化的应用实例。
示例概要
这个SilverlightStore应用是一个超级简单的应用程序,它真正的用意是提供一个清晰的方法如何使SEO化Silverlight的网站。它使用的是Silverlight3 , ASP.NET和新的.NET RIA服务技术。
Figure
1 – screenshot of the SilverlightStore sample application.
这个示例应用程序使用简单的XML文件来存储( “ / App_Data / Products.xml ” )有关微软的产品的信息。他们被用来填充集合POCOProducts (通过LINQ )这个集合被Silverlight的.NET RIA 中的DomainService 使用。
同时DomainService也被ASP.NET控件使用(通过DomainDataSource控件)
Figure
2 – Logical separation of components in the sample application.
这个优美的流程有一个中心就是DomainService 。我们可以使用ADO.NET实体框架, LinqToSQL , nHibernate等来取代这种轻量级的DAL而不需要破环目前的流程。同样,可以使用其它的客户端技术(如AJAX的客户端)来使用DomainService 。
示例中包含一个Silverlight使用DomainService并显示产品和产品的细节代码,在这里我将不会进入讨论这些细节。(*除非有人会发现它很有趣,在这种情况下,请不要让我知道)
生成下级内容
让我们挖掘一下好东西。此应用程序主目录页中的关系在上一次我已经讲过,所以我将不再赘述。我想要强调的是使用了ASP.NET DomainDataSource用来DomainService中的实体对象,并产生相应的内容。 如果您打开的Default.aspx页面,请注意使用DomainDataSource以及如何使用ProductsDomainService.GetProducts ()方法。然后,我们使用此数据源控件与传统的ASP.NET ListView控件,使我们所有的产品在MasterPage页面中定义的Silverlight的<OBJECT>标签中显示出来。
<%@ Register TagPrefix="ria"
Namespace="System.Web.DomainServices.WebControls"
Assembly="System.Web.DomainServices.WebControls" %>
<asp:Content ID="DownLevelContent"
ContentPlaceHolderID="SilverlightDownLevelContent" runat="server">
<h2>Products</h2>
<ria:DomainDataSource runat="server" ID="ProductsDomainDataSource"
DomainServiceTypeName="SilverlightStore.ProductsDomainService"
SelectMethod="GetProducts" />
<asp:ListView runat="server" DataSourceID="ProductsDomainDataSource"
DataKeyNames="Name">
<LayoutTemplate>
<ul class="product-list">
<asp:PlaceHolder id="itemPlaceholder" runat="server" />
</ul>
</LayoutTemplate>
<ItemTemplate>
<li class="product">
<span class="image">
<a href="Product.aspx?Name=<%# Eval("Name")%>">
<img src="<%# Eval("ImageSmall")%>"
alt="<%# Eval("Name")%>" />
</a>
</span>
<br />
<span class="name">
<a href="Product.aspx?Name=<%# Eval("Name")%>">
<%# Eval("Name")%>
</a>
</span>
<span class="summary"><%# Eval("Summary")%></span>
<span class="price"><%# Eval("Price", "{0:c}")%></span>
</li>
</ItemTemplate>
</asp:ListView>
</asp:Content>
在Default.aspx页面显示的产品,包含链接到Product.aspx产品详细资料网页。如果您深入Product.aspx页,您会发现,它同样使用了DomainDataSource控件但显示的是所有的产品细节。
如果您禁用JavaScript (或Silverlight) ,加载Default.aspx页面您将同样看到使用Silverlight时完全相同的产品内容,您也可以查看所有的产品和细节,但是你不能看到一些花式转换效果。这样我们不仅使这一内容可被搜索引擎收录索引,同时我们也扩大我们的客户范围。
Sitemaps and Robots
页面可以索引很好...但你如何让搜索引擎知道页面的存在呢?一个有效的方法是有外部网站链接到您和搜索引擎抓取工具自然会自动抓取您的网站,并收录索引他们。 (事实上,这会发生无论你怎么做。 )如果你想被收索索引的机会更多,那我还需要做些什么呢?
如果你很关注SEO,那您必须添加二个组件到您的网站:
1. Robots.txt file.
2. 1个或多个 XML sitemaps.
Robots.txt
robots.txt文件是用来指示搜索引擎爬虫工具可以获取的内容。 (注:他们不一定完全遵守这些要求,但大多数的是这样的。)您可以定义哪些搜索引擎机器人允许进入哪些您的网站那些目录。您甚至可以告诉它的您的Sitemaps文件位置 。 (下面我们会谈到Sitemaps的。 )
我想建议你看看亚马逊的robots.txt这个真实的例子: http://www.amazon.com/robots.txt。您会发现,它定义了那些网站目录不应该被收录索引,也提供了一些sitemap文件的链接。
XML Sitemap
Sitemaps就好比你的网站为搜索引擎提供的地图。您可以在这里定义所有希望被搜索引擎收录的重要切入点的网址。
在您的Sitemap文件中你一定要提供连结的进入点 ,以及其它资料如更新频率等。这并不是说没有sitemaps文件搜索引擎爬虫将不会抓取您的网站,但是,使用Sitemap文件可以让您向它提供更多信息以方便抓取您的网站。
如果你一下检视SilverlightStore示例应用程序中的“ Sitemap.aspx ”文件会发现,它使用了ASP.NET DomainDataSource和Repeater控件,用于遍历所有的产品然后生成了有连接所有产品信息的网页XML文件 (符合sitemap标准)。
<%@ Register TagPrefix="ria"
Namespace="System.Web.DomainServices.WebControls"
Assembly="System.Web.DomainServices.WebControls" %>
<ria:DomainDataSource runat="server"
ID="ProductsDomainDataSource"
DomainServiceTypeName="SilverlightStore.ProductsDomainService"
SelectMethod="GetProducts" />
<asp:Repeater runat="server" DataSourceID="ProductsDomainDataSource">
<HeaderTemplate>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
</HeaderTemplate>
<ItemTemplate>
<url>
<loc>
<%= new Uri(this.Request.Url,"Product.aspx?Name=").ToString()%><%#
HttpUtility.UrlEncode((string)Eval("Name"))%>
</loc>
<lastmod><%# Eval("LastModified")%></lastmod>
<changefreq><%# Eval("ChangeFrequency")%></changefreq>
<priority><%# Eval("Priority")%></priority>
</url>
</ItemTemplate>
<FooterTemplate>
</urlset>
</FooterTemplate>
</asp:Repeater>
Putting It All Together – Deep Links
现在我们有一个Silverlight的应用程序,以及相应级别HTML内容,一个robots.txt和sitemap文件,它们帮助指导搜索引擎将内容收录索引。接下还需要什么呢?我们需要一个良好的深度连接的故事!
现在,搜索引擎可以索引下层深度连接我们的产品信息网页,如果一个安装了Silverlight的用户访问这些内容,我们怎么响应这些深度链接的内容?我们需要传达深度链接中所载资料的网址到Silverlight的应用程序。
我们在SilverlightStore应用中通过使用InitParams来传递深度链接的信息到我们Silverlight客户端。
如果用户通过链接http://<site>/Product.aspx?ProductID=123到达我们的网站上,我们可以在Products.aspx内部它们将传递这些查询信息到Silverlight的控件。 (在示例应用程序中是通过SeoSilverlightApplication.InitParams属性来实现的---但如果你是修改你的<OBJECT>标签的话,您需要自已处理这一<PARAM>。 )
这些InitParams的值观可以看作是Silverlight的应用程序的一部字典,您可以访问它们在Application.Startup事件中或注册自己的应用服务。 (示例应用程序使用应用服务叫做DeepLinkService 。 )
唯一剩下的就是如何将深度链接信息映射到Silverlight对应的状态。在示例应用程序,我们将产品的名称作为一个深层链接传递给Silverlight的应用程序,然后Silverlight应用必须根据它来加载XAML内容的产品。还可以有许多其它的方法,如利用HttpRequest PathInfo字符串的与Silverlight 3内的UriMapping。
结论
我们再一次看到,在Silverlight的3中,ASP.NET和.NET RIA服务一起提供了一个强大的工具,可用于迅速建立一个优秀的可被搜索引擎发现收录索引的Silverlight的应用程序。
Resources
· Search Engine Optimization for Silverlight Applications – Part 1
· .NET RIA Services (March 2009 Preview)
· .NET RIA Services Sample Applications
· SilverlightStore SEO Example (C#)