1 discuz 的文档服务器(archive) 是否要开启
关于 archive 是否需要开启要根据我们的论坛要做内容页的伪静态或是动态来决定。如果内容页为伪静态,那么 archive 就完全没必要开启,假如开启则会造成更多的麻烦与不稳定(主要是重复页的出现) ; 如果主机不支持伪静态,那么就要用动态的内容页,这时就要开启 archive,启用后当用户从搜索引擎点击时自动转向动态页面,可以为用户提供更好的体验。
2 在做了伪静态后,要注意哪些,需要做哪些优化
(1) 建议不要开启个人资料页面静态化,其他的可以做静态化处理。
(2) 当伪静态 URL 变化导致内容页出现重复时如何解决。
"thread - "后面的第一组数字"44105241"是该帖子的 ID 号,ID 号"- "后面的第一个数字"1"代表该主题的第一页,最后面的数字"1"表示主题在这个版的首页。但是当该版帖子数量不断增加,这个帖子就被后推到第二,三……页上了,对于一个十分活跃的论坛帖子,其数量不断变化,原先帖子所在的"页"也就不断变化,对应的原帖地址在论坛中也不断变化。Discuz 虽然设置了爬虫抓取功能,允许搜索引擎来抓取网站内容,并且帖子地址中最后一位返回的数字设置为"1",这样只是解决了搜索引擎直接到你的网站抓取的网页地址是唯一的问题,方便搜索引擎进行爬读,并不能有效解决地址变化导致内容页出现重复的问题。所以说,如果你的帖子被其他网站引用,则引用的地址链接还是会出现 URL 重复的问题。
要想处理这个问题,我们可以直接修改 Discuz 控制伪静态地址的函数,最后一个数字始终输出为 1,这样可以保证 rewrite 之后的地址是单一的,但是缺点是 URL 不能给 discuz 正确传递参数,所以如果返回版面的时候只能返回到该版的首页而不能返回到该帖所在的页面。
这里我们给出了解决方法:
修改 Rewrite 的格式,最后一个数字统一用 1 代替,以解决 URL 变化和重复的问题。
修改文件 include/global. func. phpfunctionrewrite_thread($ tid,$ page = 0,$ prevpage =0,$ extra = '') {return ' < ahref = " thread - '. $ tid. ' - '. ($ page?
$ page: 1) . '- '. ($ prevpage&&! IS_ROBOT? $ prevpage:
1) . '. html" '. stripslashes($ extra) . '> '; }
改为:
functionrewrite_thread($ tid,$ page = 0,$ prevpage =0,$ extra = '') {return ' < ahref = " thread - '. $ tid. ' - '. ($ page?
$ page: 1) . '- '. '1'. '. html" '. stripslashes($ extra) . '> '; }
有人不理解怎么会出现 URL 变化,例如上面那个网址 1154 代表哪个帖子,后面的数字代表第几页第几个回帖,随着回复的增加会出现后面数字的增加,但是这都是一个帖子,内容相同,标题、关键字相同,这些都不利于seo,为此需要解决。
(3) 做了伪静态化后,一个帖子都会有两个地址: 一个 viewthread. php? 另一个 thread - ,这样也导致了内容页重复,对 seo 不利,解决方法有如下两种。
第一种方法在 robots. txt 中添加:Disallow: /redirect. phpDisallow: /viewthread. phpDisallow: /forumdisplay. php还有的更彻底,直接添加 Disallow: /* ? *第二种方法是直接修改 viewthread. php 代码,告诉搜索引擎有和这个网址对应的静态网址,那个静态网址为首选地址。
(4) Discuz 在网址标准化上出现许多问题,对于一样的内容,出现许多不同的 URL 地址。下面我们来运用 ca-nonical URL TAG 新标准来解决出现的问题。
一是给 viewthread. php 服务端脚本文件添加标准链接(canonical URL) .我们发现,动态的链接形式是多样化的,这样造成了有着不同参数的链接指向,但是内容却是完全一致的。然而,现在的 SE 却能够帮助我们解决问题,但 SE 却无法判定首选显示 URL 地址的形式,或者当它们都有返回链接时,却不能集中权重。为了解决相关的网页重复问题,百度、新浪等知名网站都宣布支持新的标签属性,能够将链接和权重都推到首选的 URL 地址上。
通过给 viewthread. php 脚本文件加标准链接标签,设置帖子首选为静态。修改脚本文件,在 $ page = max($ page,1) 函数所在行的上面加一行语句 $ extrahead. = '< linkrel = " canonical" href = " thread -'. $ tid. '- 1 - 1. html" / > ';通过给打印页添加标准化标签。我们修改 tmplates/default /viewthead_pritable. htm,在 < title > 所在行的下面加入一行: "$ extrahead"语句。
二是给 forumdisplay. php 脚本文件加标准化标签。方法是找到 includetemplate() 函数所在行,在这行的上面加入一行下列语句:$ extrahead. = '< linkrel = " canoncal" href = " forum - '.$ fd. '- '. $ page. '. html" / > ';三是为文档服务器转换页加入 linkcanonical 标准化标签。
我们对 archive/index. php 进行修改: 找到 global $ boa-durl 所在行,在其下面插入一行函数 global $ etrahead; 并修改语句 < methttp - equiv = " Content - Type" content = "text /html; charset = { $ charet} " / > ; 按回车键后添加 $ ex-trahead.修改 archive/include/thread. php: 为第二个 showheader() 函数所在的上面一行添加 $ extrahead. = '< linkrel = "canonical" href = " thread - '. . '- 1 - 1. html" / > '语句。
四是将文档服务器内容页设置为静态链接形式。将语句 archive/include/thread. php 改为"thread - { } - 1 - 1.html" .
如果您是以动态地址形式为首选版本,那么上述对应位置应换成下面的语句:$ extrahead. = ' < linkrel = " canonical" href = " viewt-head. php? tid = '. $ tid. '" / > '
3 对于论坛已删除帖子,google 抓取工具提示 404错误的解决办法。
(1) 自定义 404 错误页,给用户良好体验,实现当访问到错误页时返回 404 错误代码,并提示该页面已删除。
(2) 禁止 discuz 无效页面的收录。
#discuz 会产生什么页面,并出现什么问题?
第一,如果我们删除了之前的帖子、版块与当访问时返回帖子中"不存在"的信息提示页时。
第二,只有设置了权限而能看见的帖子与版块,得到了"没有权限"的提示。
第三,在任何情况下让浏览者看的"提示信息"页面。
而这些页面没有实质性的内容,都应该禁止收录。因为最应该解决的问题是"副本内容"中的问题,在许多 URL 地址中,返回却是同样的内容。如果原帖子被删除之后,应该返回 404 错误信息,如果为了简化,需要加上 metarobots标签,禁止 ES 进行收录。
第四,将提示页面的信息进行修改,解决内容重复的问题。找到全局函数定义文件"global. func. php",修改这个文件中的 showmessage 函数就行了。找到 define() 函数并在后面加上如下的语句:$ extrhcad. = ' < mtname = " robot" cntent = " noindex,nfolow" / > ';上面语句经过修改之后,我们发现: 无权访问的 URL地址与已经删除的帖子与信息等页面,都会重新出现在带有"metarobots"禁止的页面的上面。如果"禁止"收录后,过若干段时间还能够从搜索引擎的"索引"中删除。所以给 SE 的全是有内容的网页,对于提高权重会有着重要意义。
如果文档服务器页面的帖子已经删除了,那么它的提示信息也要设置为禁止收录。
我们可以修改 archve/include/thread. php 路径下的thread. php 文件: 此文件中包含两个 showheader() 函数,在第一个函数的上面加一行: $ extrahead. = '< metaname = "robots" content = " noindex,nofollow" / > '; 就实现禁止收录了。
4 为文档服务器转换页加 linkcanonical 标准化标签
我们通过修改 archve/idex. php: 在 glbal $ boardurl,$_DCAHE,$ chaset,$ nvtitle,$ hederbanner,$ hedernav; 行下加入一行: global $ extahead;在 < meahttp - equiv = "Content - Type"content = "text/html; chaset = { $ chrset} " / > 行下加入一行: $ extrhead这样就可以实现为文档服务器转换页加 linkcanonical标签。
5 将 Discuz 的聚合内容(RSS) 中帖子的地址设置为静态化
在论坛中使用 Discuz 工具,使论坛处于静态化,而此时 RSS 中的链接地址却没有处于静态化,它却处于动态化之状态。如果根据 Discuz 的 robots 文件的默认设置,rss.
php 文件却不能被搜索引擎所索引出现的,同时也不会有重复的 URL 地址出现。而实际情况是: 正常情况之下可以用 RSS 进行调用与聚合,而且 RSS 中的动态地址能够被搜索引擎所索引。下面我们将把 RSS 中显示的链接地址改成静态化。
修改文件: rss. php在 rss. php 中找到:" ; ; ; ; < title > " . dhtmlspecialchars ($ thread['subject']) . " < /title > /n" . " ; ; ; ; < link > { $ boardurl } viewthread. php? tid =$ thread[tid]< /link > /n" ." ; ; ; ; < description > <! [CDATA[$ thread[descrip-tion]]]> < /description > /n" ." ; ; ; ; < category > " . dhtmlspecialchars ($ thread['fo-rum']) . " < /category > /n" ." ; ; ; ; < author > " . dhtmlspecialchars($ thread['author']) . " < /author > /n" ." ; ; ; ; < pubDate > " . gmdate('r',thread['dateline']) . "< /pubDate > /n" ." ; ; < /item > /n" ;将其中的 < link > { $ boardurl} viewthread. php? tid =$ thread[tid]< /link > /n" . 修改为: < link > { $ boardurl} thread - $ thread[tid] - 1 - 1. html < /link > /n" .
6 以前开启了 archive,现在搜索引擎里收录了很多archive 的网址,如何关闭如果以前开启了 archive,现在搜索引擎里收录了很多archive 的网址,我现在想关闭怎么办?
对于这个问题,有两种思路:
(1) 定制 301 重定向,将 archive 的地址重定向到静态地址。
(2) 在 robots. txt 中 Disallow: /archive,这样过一段时间搜索引擎中就会删掉已收录的 archive 页,到时候再关闭 archive.
参考文献:
[1] 三亿文库。 网站建设系统解决方案[DE/OL].