目錄
Lucene.net站內搜索—1、SEO優化
Lucene.net站內搜索—2、Lucene.Net簡介和分詞
Lucene.net站內搜索—3、最簡單搜索引擎代碼
Lucene.net站內搜索—4、搜索引擎第一版技術儲備(簡單介紹Log4Net、生產者消費者模式)
Lucene.net站內搜索—5、搜索引擎第一版實現
Lucene.net站內搜索—6、站內搜索第二版
聲明:在這里,所談的一切關於SEO的技術主要針對於我們開發人員。
SEO (搜索引擎優化)
SEO(搜索引擎優化)的目的(很多人都是通過搜索引擎找到我們的網站)是讓搜索引擎更多的收錄網站的頁面,讓被收錄頁面的權重更靠前,讓更多的人能夠通過搜索引擎進入這個網站
原理:蜘蛛會定時抓取網站的內容,發現網站內容變化、發現新增內容就反映到搜索引擎中
蜘蛛(spider) 爬網站:就是向網站發http get請求的客戶端。
SEO(搜索引擎優化*):讓網站排名靠前,讓網站更多的頁面被搜索引擎收錄。鏈接(外鏈、內鏈)、原創、關鍵詞的數量、權重,小偷網站(站群),降權(PR PageRank),K站(Kill站,作弊)、偽原創:
爬網站的過程:發現網站。百度把csdn當成關鍵網站,順着已知的網站鏈接找到新的網站或者新的頁面。
SEO的第一個手段:建外鏈(外部鏈接)。新網站吸引蜘蛛。對於非新網站,搜索引擎考慮一個“權重”,重點考察 外鏈數量。權重越高搜索結果越靠前,“權重”的一個重要因素就是“外鏈”數量,外鏈質量(外鏈網站的PR值,PageRank,決定一個網站的質量的 值,PR值越高網站越重要,原創、創建時間等等),Alexa 排名(全球網站排名)
(*)robots.txt是公約,搜索引擎都建議遵守,相當於一個指路牌:想讓那些搜索引擎搜索,想讓那些頁面搜索 Search engine optimization
開發時要考慮SEO
搜索引擎蜘蛛(Spider):向網站發出Get請求,獲得頁面內容,分析頁面中的超鏈接,進一步的向頁面中的超鏈接發Get請求,獲得鏈接的頁面內容。搜索引擎只認識<ahref=“”>,並且不能是JavaScript、超鏈接不能是js動態生成的
網站的SEO基本原則:所有希望搜索引擎抓取的內容都應該是通過超鏈接(Get請求)獲得的,Post獲得的內容、js腳本打開的頁面是無法被搜索引擎抓取的,所以盡量不要JS、Post來進行頁面導航、內容的生成。搜索引擎一般不會執行JS、不會發Post請求、不會提交表單。
動態菜單應該是把菜單內容靜態的寫到html中,然后通過隱藏、顯示來切換,而不是動態繪制菜單內容。車品匯的案例:在保證動態效果的前提下,考慮SEO。反例:某些校園網站
因為LinkButton是執行JavaScript向服務器發請求來進行Redirect,而蜘蛛不會執行JS,所以盡量不要用LinkButton。
內嵌js生成的超鏈接是搜索引擎看不到的。服務器端動態生成的內容是可以被蜘蛛看到的,客戶端瀏覽器(蜘蛛)不知道服務器是動態生成的還是靜態文 件,只有Response。蜘蛛只分析靜態的HTML內容,不會去執行JS。蜘蛛就是相當於發出Get請求的WebClient。禁用JS以后獲得的東西 就是蜘蛛能看到的東西。
SEO友好的AJAX:做一個簡單的根據參數來獲得1、2、3三個文章的AJAX效果,如下示例:
html代碼:
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <title></title>
- <script src="jquery-1.4.1.js" type="text/javascript"></script>
- <script type="text/javascript">
- function getart(id) {
- $.post("GetMsg.ashx", { "id": id }, function (data) {
- $("#div1").html(data);
- });
- }
- </script>
- </head>
- <body>
- <ul>
- <li><a href="GetMsg.ashx?id=1" onclick="getart(1);return false;">1</a></li>
- <li><a href="GetMsg.ashx?id=2" onclick="getart(2);return false;">2</a></li>
- <li><a href="GetMsg.ashx?id=3" onclick="getart(3);return false;">3</a></li>
- </ul>
- <div id="div1">
- </div>
- </body>
- </html>
一般處理程序代碼:
- /// <summary>
- /// GetMsg 的摘要說明
- /// </summary>
- public class GetMsg : IHttpHandler
- {
- public void ProcessRequest(HttpContext context)
- {
- context.Response.ContentType = "text/plain";
- int id = Convert.ToInt32(context.Request["id"]);
- if (id == 1)
- {
- context.Response.Write(@"搜索引擎蜘蛛(Spider):向網站發出Get請求,獲得頁面內容,分析頁面中的超鏈接,
- 進一步的向頁面中的超鏈接發Get請求,獲得鏈接的頁面內容。");
- }
- else if(id==2)
- {
- context.Response.Write(@"因為LinkButton是執行JavaScript向服務器發請求來進行Redirect,而蜘蛛不會執行JS,所以盡量不要用LinkButton。");
- }
- else if (id == 3)
- {
- context.Response.Write(@"SEO友好的AJAX:做一個簡單的根據參數來獲得1、2、3三個文章的AJAX效果");
- }
- }
- public bool IsReusable
- {
- get
- {
- return false;
- }
- }
- }
效果:

這樣就可以既實現ajax效果,又利於SEO優化了。
WebClient是下載Get請求的結果,而不是下載aspx源碼。
聊SEO的時候說的一個很牛的技巧:<a href=“GetArticle.ashx?Id=1” onclick=“ShowArticle(1);return false;”>文章1</a>,也對不支持JavaScript的瀏覽器提供友好的使用。
糗事百科的“評論”也是同時考慮AJAX和SEO的例子。
蜘蛛爬網原理代碼:
- WebClient wc = new WebClient();
- string html = wc.DownloadString("http://www.baidu.com");
- //把html放入“數據庫”
- //分析html中的超鏈接 links
- //foreach(string link in links)
- //string html2 = wc.DownloadString(link);
聊到SEO的話!!!
對於開發人員來講:搜索引擎只認get請求獲得的原始源代碼;只認頁面中的a標簽,並且不能是href=“javascript:”;
案例:不要是<ahref="javascript:document.location='http://www.baidu.com'" >百度</a>
不要用LinkButton的Onclick中來做Response.Redirect,因為生成的是js,請看如下代碼:
- <asp:LinkButton ID="LinkButton1" runat="server" onclick="LinkButton1_Click">LinkButton</asp:LinkButton>
生成的html源碼如下:
- <a id="LinkButton1" href="javascript:__doPostBack('LinkButton1','')">LinkButton</a>
不要在頁面中動態通過js生成超鏈接菜單,而應該像“車品匯”一樣先把鏈接都生成到頁面中,只是隱藏,然后通過js來控制不同層的顯示
實現AJAX,同時制定onclick和href,讓普通用戶走onclick的ajax效果,搜索引擎蜘蛛走href
關於搜索
開發百度用的是通用搜索,咱們主要做站內搜索。
有一定訪問量的互聯網站都有站內搜索功能,比如verycd、優酷、豆瓣、cnblogs、mop、淘寶、大眾點評網等。
msg like '%.net視頻教程%':模糊程度太低,無法匹配幾個關鍵詞不挨着的;造成全表掃描,效率低。
為什么不用數據庫全文檢索?數據庫全文檢索很傻瓜化,和普通SQL一樣。數據全文檢索靈活性不強。注意:要sqlserver的專業版才支持全文檢索功能。
使用sqlserver全文檢索步驟:
1、設置需要檢索的列屬性

2、全文檢索的查詢語法:select * from T where contains(msg,’你好’)
為什么不用百度、google的站內搜索(site:cnblogs.com):受制於人,會被K;索引不及時、不全面、不精准;用戶體驗感差
這里主要講解最有廣泛應用價值的站內搜索技術,像開發百度、google那種站外搜索相關的技術不講。
a、 搜索引擎 site:www.cnblogs.com 站內搜索
b、 查看網站收錄。site:www.verycd.com
當我們新建一個網站后,要想讓搜索引擎能夠收錄,我們要先將我們網址提交到各搜索引擎入口,一般提交2~3天后,你就可以在各搜索引擎中輸入關鍵字進行搜索了。

