技巧:Flash 網站的 SEO

來源:互聯網
上載者:User
seo|技巧

目前,全FLASH站裡頭的文字很難給一般的搜尋引擎捕捉到(可能以後GOOGLE會有改善吧),因為搜尋引擎只分析HTML頁面裡頭的文字(動態網頁面如ASP,PHP那些也行,不過優先順序會比較低),所以,FLASH在這方面是很吃虧的。之前也有人在這裡發過關於FLASH的SEO問題,是通過XHTML實現的,今天我要給大家介紹的是另一種方法:通過網頁重新導向以及我上一篇教程的FLASH站定位技術。

PS:這兩種方法在搜尋引擎眼裡,都是作弊的行為。一個不小心,伺服器給封了也不知道。所以建議大家如果真要用這些辦法時得小心。我現在用的伺服器不是自己的,所以我比較謹慎,在把頁面提交給百度之前,我先聯絡了百度站長,直到他回複我才敢開始行動。
定位技術:http://www.webjx.com/htmldata/2006-08-21/1156119565.html

還算成功的效果示範:
http://www.baidu.com/s?wd=site%3Ahbro.cincn.com&cl=3
此為百度收錄我網站裡頭的頁面,點裡頭的任一連結(最好選擇發布時間比較晚的那些),你會看到一整版比較單調的文字,在1~2秒(時間由網速決定)後,就重新導向至我的FLASH頁面,但是大家可以注意到,文字最後是顯示在SWF裡頭。
本來是可以用META或者JS直接重新導向就免掉那個延遲的,但是我還是比較小心,利用搜尋引擎對FLASH支援性的缺陷,把重新導向代碼寫在了一個FLASH控制項裡,因此,就有個載入FLASH的延遲。所以,我只能說還算成功。
重新導向以後,其實都是定向於同一地址,因為整個站屬於單一HTML頁面的FLASH網站。因此,需要用到我的上一篇文章所介紹的定位技術讓搜尋結果的文字在SWF裡得到正確的顯示,否則,就是欺騙了使用者,我也不需要在這裡介紹我的做法,因為只要拚命造假就可以了。

下面介紹做這個SEO的步驟

1、首先大家要認識到,搜尋引擎捕捉不了FLASH裡的文字,因此,FLASH裡的文本需要在外部讀取。這裡,每一則新聞做成一個HTML檔案,既讓FLASH可以讀取,也讓搜尋引擎可以抓到。如page1.html,page2.html,page3.html

2、在給搜尋引擎提交頁面的時候,一般都只提交首頁,然後根據首頁的連結等去捕捉其它頁面。如果提交的是一個純FLASH頁面,所有連結,外部讀取的檔案都通過AS實現的話,搜尋引擎將無法擷取其它分頁的地址。因此,我們需要製作一個HTML檔案,放置相關的連結,如果希望使用者一開始看到的是FLASH頁面,就用一次重新導向代碼,到FLASH頁去,並且不帶參數。所以把FLASH首頁檔案命名為index_flash.htm,HTML版的頁面命名為index.html,接著,在index.html裡加入重新導向代碼。建議不要用META,很容易給搜尋引擎槍斃。這裡,可以採用JS:

<script language="javascript">
location.href="index_flash.html"
</script>

最保險的還是放在FLASH裡,用getURL來重新導向,但這會造成延遲,影響使用者體驗。

3、捕捉到的分頁也需要重新導向至FLASH頁面,此時需要把參數傳到FLASH中,因此重新導向的地址必須是一個帶參數的,並且能區分不同頁面,最好的參數就莫過於當前HTML頁面的地址了。比如說在page1.html裡加上:

<script language="javascript">
location.href="index_flash.html#page1.html
</script>

4、讓JS把location.hash值傳給Flash,讓Flash讀回page1.html裡的內容。在JS裡用setVariable來設定:index_flash.setVariable("link",document.location.hash.slice(1))
在Flash擷取到link值以後,用LoadVars讀出來:

var lv=new LoadVars()
lv.load(link)
lv.onData=function(src){
  textBox.text=src
}

關於第3、4點的一些細節,在我的第一篇文章裡有提及:
http://www.webjx.com/htmldata/2006-08-21/1156119565.html

接下來,我會做一個簡單的示範文檔,結合執行個體把上面的步驟具體化。

示文檔完成了,但是由於涉及的檔案比較多,直接給大家測試不方便,所以,先把整個製作過程跟大家描述下:

1、 在你的網站放入幾個HTML檔案,page1.html,page2.html,page3.html,請注意,為了處理的方便,格式不要太複雜。最好使用如下格式:

<title>新聞標題</title><script language="javascript" src="toNews.js"></script><body>本文內容</body>

toNews.js是每個分頁都重用的重新導向代碼,故獨立出來一個檔案
location.href="index_flash.html#"+document.location//把地址作為參數傳到 Flash頁面中識別。

2 、製作向搜尋引擎提交的首頁index.html,該頁不能是FLASH版的,必須包含page1.html,page2.html,page3.html這些連結,或者通過層數不多的HTML分析,可以擷取這些地址。
index.html範例:
然後index.html裡再加上代碼:

<script language="javascript">
location.href="index_flash.html"
</script>

以讓你的HTML版網頁重新導向至FLASH版網頁。
附:index.html範例:

<a href="page1.html">news1</a><br>
<a href="page2.html">news2</a><br>
<a href="page3.html">news3</a><br>
<script language="javascript">
location.href="index_flash.html"
</script>

做到這一步,只要向百度提交index.html並被收錄,百度就會把page1.html,page2.html,page3.html列入索引中。

下面實現的就是如何通過重新導向把內容顯示在FLASH中。

3、 建立一個FLASH文檔,在舞台放置兩個多行動態文字框,執行個體名分別為titles和contents,分別放新聞標題及內容。
本來,筆者打算直接把index.html直接讀進titles文字框裡,可惜連結放進去就會跳轉頁面,如果要避免的話,必須通過字串分析把連結改成asfunction協議,此法麻煩,而且容易受內容影響而出錯。所以,還是再建一個XML文檔提供給FLASH去讀取好了。
在index.html所在目錄下,建一XML檔案news.xml

<?xml version="1.0" encoding="GB2312"?>
  <news>
    <a href="page1.html" title="news1"/>
    <a href="page2.html" title="news2"/>
    <a href="page3.html" title="news3"/>
  </news>
在Flash裡建立一圖層,添加幀代碼:
System.useCodepage = true;
titles.html = true;
var titlesLv = new XML();
titlesLv.load("news.xml");
titlesLv.onLoad = function(success) {
       if (success) {
              var titles_arr = new Array();
              var hrefs_arr = new Array();
              titles.htmlText = "";
              for (var i in titlesLv.childNodes[0].childNodes) {
                     titles_arr[i] = titlesLv.childNodes[0].childNodes[i].attributes.title;
                     hrefs_arr[i] = titlesLv.childNodes[0].childNodes[i].attributes.href;
              }
              for (var i in titles_arr) {
                     titles.htmlText += "<br><a href=\"asfunction:loadNews,"+hrefs_arr[i]+"\">"+titles_arr[i]+"</a>";
              }
       }
};

此段代碼是把解析XML檔案的,不屬本教程的重點,故不再贅述。
這其中的loadNews函數是調用新聞的,在下面添加:

var contentsLv = new LoadVars();
function loadNews(href) {
       contentsLv.load(href);
       fscommand("setAddress",href)//讓新聞載入的時候,修改地址欄#後的內容。這將在JS裡定義。
}
contents.html = true;
contentsLv.onData = function(src) {
       fscommand("setTitle",getTitle(src))//setTitle修改頁面的標題,也在JS裡定義。getTitle從html字串裡獲得標題。該函數在AS裡定義
       contents.htmlText = getContents(src);//getContents從html字串裡擷取本文內容,將在AS裡定義。

下面定義這兩個字串分析函數:
分頁html的格式:

<title>新聞標題</title><script language="javascript" src="toNews.js"></script><body>本文內容</body>

function getTitle(str){
       var beginIndex=str.indexOf("<title>")+7//標題符從<title>標籤開始
       var endIndex=str.indexOf("</title>")//結束於</title>標籤
       return str.slice(beginIndex,endIndex)//標記後用slice函數截得
}
function getContents(str){
       var beginIndex=str.indexOf("</title>")+8//本文可以從</title>開始,也可以選擇<body>標籤
       return str.slice(beginIndex)//標記後用slice截取。
}
};

儲存FLA檔案到index.html所在目錄,檔案名稱為index_flash.fla。然後點“檔案”-“發布設定”,在HTML選項卡裡,模板下拉選擇“帶FSCOMMAND跟蹤的FLASH”,然後點“發布”按鈕。接著在“格式”選項卡裡把HTML勾去掉。

4、 此時用記事本開啟產生的index_flash.html,找到//代碼放在此處(Place your code here)這句,在index_flash_DoFSCommand函數裡寫:

       if(command=="setTitle"){
          theTitle=args
        }
        if(command=="setAddress"){
          document.location.hash=args
        }

然後,在該函數外定義一個設定標題的函數:

function setTitle(){
  document.title=theTitle
  id=setTimeout(setTitle,1000)
}

之所以使用周期回調,不知道是不是BUG的緣故,經常改完標題後,都會自動改回來,或者多個#號什麼的。
現在,還需要在載入後通過JS調用Flash的loadNews函數。在Flash 8控制項裡頭,可以通過CallFunction輕鬆調用函數,AS3甚至通過ExternalInterface可以直接在JS裡寫AS函數,但是目前還有少數使用者的PLAYER處在7的階段,所以就先介紹老方法:setVariable。
該方法可以設FLASH控制項的變數值,但是如何通過改變數觸發Flash的loadNews函數呢?這裡介紹AS裡頭的addProperty方法。
Object.addProperty(proname:String,getter:Function,setter:Function)
proname,屬性名稱。
getter,當讀取變數時調用的函數。
setter,當設定變數時調用的函數。
我們通過添加一個這樣的屬性,讓JS的setVariable執行的時候,調用該函數。
AS裡追加:

this.addProperty("link",getLink,setLink)
function getLink(){
}
function setLink(link){
       loadNews(link)
}

不知道為什麼,如果不定義getLink,這個setLink也不可用,所以只好把這形式弄上去。

所以,此時可以在JS裡添加這麼個函數:

function JS_loadNews(){
  if(document.location.hash.slice(1)!=""){//假如#號後面不帶參數
    index_flash.setVariable("link",document.location.hash.slice(1))//就設定FLASH裡的link值,從而調用裡頭的loadNews函數。
  }
}

然後在body標籤裡加onload=JS_loadNews()
此時,重新導向到FLASH頁面,並且真實反映相關內容的過程已經完成。雖然本質是一種作弊行為,但是已經沒有欺騙使用者了。

最後,往百度提交index.html,就可以給百度收到4個頁面了。當然,內容要合法,否則也會給拒絕收錄。
至於如何提高排名,那是內容的問題了,不是技術層面的東西,就不在這討論了。一般來說,META的關鍵字標籤的合理使用,會對提高排名有一定的作用。



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.