Asp.Net程序員與SEO – .Net基於SEO友好數據分頁

Asp.Net有很多用來顯示數據的控件都是拖出來就可以用的,很簡單,很方便,代碼量也很少。象GridViews和DataGrids就屬於這樣的控件,但這兩個控件分頁機制采用的是javascript來與本頁交互實現的,分頁後url不會有新的改變。這樣的話對SEO不是很友好的,因為當搜索引擎爬蟲(或成為蜘蛛)從你的網頁上得到這個這個連接時,點擊進入發現是屬於同一頁面,將不會將分頁後的結果錄入搜索引擎的編制結果。

從SEO角度來講,這種分頁顯示方法對搜索引擎爬蟲是不友好的。這裡我將用另外一中對搜索引擎更友好的分頁方法來代替上的分頁方法。我們可以使用DataList或則Repeater控件,通過PagedDataSource來進行分頁。

我這裡將用Repeater控件來實現,為什麼不用DataList呢?個人覺得DataList雖然功能強大於Repeater,但是DataList在生成HTML代碼的時候會有少量多餘的代碼出現例如:span,table之類的。而Repeater更能讓我們控制代碼的結構。分頁的方法很多,網上搜索一下大把,下面我們來看下我的分頁函數代碼。

以下為引用的內容:
///<summary>
///分頁函數
///</summary>
///<param name=pagesStr>作為輸出分頁HTML文本</param>
///<param name=list>需要分野數據源</param>
///<param name=page>默認頁</param>
///<param name=path>URL地址</param>
///<param name=pagesize>每頁的分佈數據條數</param>
///<returns>返回PagedDataSource數據源</returns>
public static PagedDataSource pds(out string pagesStr, IList list, string page, string path, int pagesize)
{
PagedDataSource pds = new PagedDataSource();
pds.DataSource = list;
pds.AllowPaging = true;
pds.PageSize = pagesize;

pagesStr = ;

int CurPage = 0;
if (page != null page.ToString() != )
{
CurPage = int.Parse(page);
}
else
{
CurPage = 0;
}

pds.CurrentPageIndex = CurPage;

int startpage = CurPage;
int pageNum = 5;
int j = 0;

if (pds.PageCount – CurPage < pageNum)
{
startpage = (pds.PageCount – CurPage) + (CurPage – pageNum) > 0 ? (pds.PageCount – CurPage) + (CurPage – pageNum) : 0;
}

if (!pds.IsFirstPage)
{
pagesStr += <a href=’ + path + ?Page=0′ class=’pagecode’> << </a>;
pagesStr += <a href=’ + path + ?Page= + Convert.ToString(CurPage – 1) + ‘ class=’pagecode’> < </a>;
}

for (int i = startpage; i < pds.PageCount; i++)
{
if (pds.PageCount == 1)
break;

pagesStr += <a href=’ + path + ?Page= + i.ToString() + ‘;
if (CurPage == i)
{
pagesStr += class=’pagecodeActive’;
}
else
{
pagesStr += class=’pagecode’;
}
pagesStr += > + (i + 1).ToString() + </a>;

j++;
if (j == pageNum)
break;

}

if (!pds.IsLastPage)
{
pagesStr += <a href=’ + path + ?Page= + Convert.ToString(CurPage + 1) + ‘ class=’pagecode’> > </a>;
pagesStr += <a href=’ + path + ?Page= + Convert.ToString(pds.PageCount – 1) + ‘ class=’pagecode’> >> </a>;
}

pagesStr += 總記錄數 + list.Count + 條nbsp;;

return pds;
}
#endregion
上面是函數,頁面調用部分:
string page;
if (Request.QueryString[page] != null Request.QueryString[page].ToString() != )
page = Request.QueryString[page].ToString();
else
page = 0;

string pagestr;
this.R_ModuleType.DataSource = Pagination.pds(out pagestr, ResourceSrv.GetAllResource(), page, Request.CurrentExecutionFilePath.ToString(), 20);
this.R_ModuleType.DataBind();

this.lb_total.Text = pagestr; //可以放一個div來專門放

.aspx部分
<asp:Repeater runat=server ID=R_ModuleType>
<HeaderTemplate>
頭部代碼
</HeaderTemplate>
<ItemTemplate>
內容代碼
</ItemTemplate>
<FooterTemplate>
底部代碼部分
</FooterTemplate>
</asp:Repeater>
<asp:Literal ID= lb_total runat=server></asp:Literal>

CSS部分
/*分頁數字*/
.pagecode,.pagecodeActive{margin:0 2px; padding:0 5px; border:1px solid #ccc; float:left; text-align:center; }
.pagecode{ background-color:White;}
.pagecodeActive{ background-color:#fffccc;}

原文鏈接:/post/aspdotnet-seo-page.html