15
2007
08

Flash站的SEO优化整理(四)

关于这个全FLASH站的SEO专题,这篇文章应该是最后的一篇了,总共只有四篇文章发布,但是真正的SEO对于FLASH来说,还是具有相当的难度过,最重要的是搜索引擎对于FLASH文件读取的困难,导致这种虽然很炫的WEB文件却不能很好地运用起来。
这一篇是来自于蓝色理想的SEO教程。

前言:

核桃决定要在SEO策划里整理一篇关于FALSH站如何优化的文章,所以一直在收集与此相关的资料,现在看起来资料相当的少,其实FLASH站与视频站的优化几乎差不多,者属于文字比较少而且不好做SEO的类型。

Flash 网站的 SEO

作者:HBrO

目前,全FLASH站里头的文字很难给一般的搜索引擎捕捉到(可能以后GOOGLE会有改善吧),因为搜索引擎只分析HTML页面里头的文字(动态页面如ASP,PHP那些也行,不过优先级会比较低),所以,FLASH在这方面是很吃亏的。之前也有人在这里发过关于FLASH的SEO问题,是通过XHTML实现的,今天我要给大家介绍的是另一种方法:通过网页重定向以及我上一篇教程的FLASH站定位技术。

PS:这两种方法在搜索引擎眼里,都是作弊的行为。一个不小心,服务器给封了也不知道。所以建议大家如果真要用这些办法时得小心。我现在用的服务器不是自己的,所以我比较谨慎,在把页面提交给百度之前,我先联系了百度站长,直到他回复我才敢开始行动。
定位技术http://www.blueidea.com/tech/multimedia/2006/3948.asp

还算成功的效果演示:
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.blueidea.com/tech/multimedia/2006/3948.asp

接下来,我会做一个简单的演示文档,结合实例把上面的步骤具体化。

演示文档完成了,但是由于涉及的文件比较多,直接给大家测试不方便,所以,先把整个制作过程跟大家描述下:

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//把地址作为参数传到 _fcksavedurl=""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的格式:

保存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的关键字标签的合理使用,会对提高排名有一定的作用。

附:测试地址
http://hbro.cincn.com/hbro/course/FlashWebSEO/index.html
http://hbro.cincn.com/hbro/course/FlashWebSEO/page1.html

经典论坛讨论
http://bbs.blueidea.com/viewthread.php?tid=2668685

Flash全站的技术应用系列
(一)AS+JS的Flash网站无刷新定位技术 
(二)Flash网站的SEO (本文)
(三)Flash网站的流量统计
(四)让Flash网站具有IE前进后退的功能
(五)图片轮换效果

来自:蓝色理想

 

<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截取。
}
};

« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。