Discuz論壇的SEO優化方案

Discuz論壇的SEO優化方案

設discuz已開始使用偽靜態功能,運用5.0/5.5 GBK 版本;

1、meta,content 優化
2、內部實質意義頁的網頁復制問題
3、robots.txt運用及其他

更新
discuz5.5的robots.txt問題
DZ 嚴禁一個版面帖子的收錄的補給

一、meta的優化

discuz的後臺可以對meta信息施行設置,甚至於可以添加自個兒的頭部信息,但它的設置都是針對於全部頁面的,所有頁面都領有相同的keywords和description是SEO所反對的。

方案一:刪去meta

改正頁頭模型板文件 templates/default/header.htm:將meta的keywords和description標簽刪去。

這兩個標簽效用細小了,並且還有discuz自帶的一點無用信息,用得非常不好反倒會有壞效用,因為這個寧缺勿濫。

方案二:定制meta

本局部成功實現了將內部實質意義頁keywords設為帖子題目,description為內部實質意義前100字;也成功實現了主頁與各版列表頁meta的單獨設置(不一樣版的不一樣,同一版各列表頁相同)。

1.改正頁頭模型板文件 templates\default\header.htm:將meta的keywords和description標簽改為如下所述方式

meta name=keywords content={$metakeywords}$seokeywords /
meta name=description content=$seodescription /

這處的$seokeywords、$seodescription就是後臺設置的那一個值,下邊說怎麼定制這個值;{$metakeywords}是奇虎的關鍵字,留下往後處置

2.內部實質意義頁(viewthread)設置keywords為帖子題目,description為內部實質意義前100字

2.1改正 viewthread.php 文件:
在 include template(‘viewthread’); (更新:dz5.5為iinclude template($iscircle ? ‘supesite_viewthread’ : ‘viewthread’); ) 語句的上頭參加一行:
require_once DISCUZ_ROOT.’./include/bmt.thread.inc.php’;

2.2開創 include/bmt.thread.inc.php 文件,內部實質意義為

?php
if(!defined(‘IN_DISCUZ’)) { exit(‘Access Denied’); }

$seokeywords = strip_tags($thread[‘subject’]); //關鍵字設為帖子的題目
//(已更新: nethome 提問,當開始使用正題分類並准許按門類瀏覽時,原來代碼會有問題。所以加了標簽過淋,壓根兒在viewthread.php中改更好,為往後昇班便捷,仍然放在這處吧,subject很短,不會影響速率)

$seodescription = current( $postlist );//description取文章內部實質意義的前100字
$seodescription = mb_substr( $seodescription[‘message’],0,100,gb2312 );
$seodescription = htmlspecialchars( strip_tags($seodescription) );
?

*此處數碼和個別函數適合使用於GBK版本

最終一行效用是過淋內部實質意義中的html,否則在meta中會引動語法不正確。先是去除HTML標簽,但由於這處是前100字,可能html標簽已經被切斷了,所以又用了htmlspecialchars轉義一下子,可能會有點垃圾信息。
當然也可以在截取一段之前用strip_tags去除html標簽,有可能速率會差了。

*所以資處表現式您需求依據自個兒的事情狀況改正。
我到現在為止用的是preg_replace( ‘/[^\xa1-\xff]/’, ”, $seodescription ),即過淋中文之外的存在的地方內部實質意義,但這麼會虧損英文關鍵字。

別外解釋明白,此處數值都是viewthread.php已取好的,所以不會萌生另外的數值庫操作,只是做了字符串處置,不會引響速率。

3.列表頁(forumdisplay)設置不一樣的keywords和description

3.1改正 forumdisplay.php

文件,在 include template(‘forumdisplay’); 語句上頭添加
require_once DISCUZ_ROOT.’./include/bmt.forum.inc.php’;

3.2開創 include/bmt.forum.inc.php 文件,內部實質意義為

?php
if(!defined(‘IN_DISCUZ’)) { exit(‘Access Denied’); }
$seokeywords = $forum[‘name’];
$seodescription = $forum[‘description’];

switch ( $forum[‘fid’] ){
case 1: //此數碼為版的ID號,不一樣版設置不一樣的meta
$seokeywords = ‘key1,key2,…’;
$seodescription = ‘xxxx xxxx xxxx’;
break;
case 2:
$seokeywords = ‘key1,key2,…’;
$seodescription = ‘xxxx xxxx xxxx’;
break;

}
?

//更新:普通事情狀況下可以無須switch和case,列表頁的關鍵字為版名,解釋明白為版的解釋明白,若要對某個版設置特別的關鍵字和解釋明白,可以設置case。這麼解決了版面很很長時間要設置眾多case語句,加快了手續執行速度(不成解php,JAVA的 case施行了優化,執行很快)

運用改正文件來成功實現,每版的meta改起來不便,感受有點弱智,呵呵。但沒有改數值庫,用了兩個單獨的文件,改正了兩個文件也很簡單,這麼昇班或搬遷更便捷吧

case固然多了一點,但比起讀數值庫的記錄,速度應當快眾多

4.主頁meta
在後臺設置即可。(假如2、3不做,則meta也同主頁)

content的優化
discuz有個archiver,一是URL容易收錄,二是頁面比較乾靜,還有description會從正文中取內部實質意義,但archiver沒有對內部實質意義中[b][url]什麼的的解析,那一些標簽起不到效用,原樣顯露還會增加垃圾信息。
本局部主要做兩方面的優化,一是去除內部實質意義頁的無用信息,二是給題目加上
h1
。加上偽靜態和上篇meta的優化,效果就超過了archiver,因為這個可以在後臺禁用它,還減損了復制網頁。

實行方案

1.掩飾內部實質意義頁(viewthread)中的無用信息:
改正內部實質意義頁模型板文件 templates/default/viewthread.htm:

用!–{if $discuz_uid}– !–{/if}–即將掩飾的信息裡面含有起來。

正確的說是當游人(bots)過訪時,掩飾那一些信息,當用戶登錄後是正常的,所以不影響運用。
這些個信息主要指的是左側用戶信息欄、(資料 私人空間 主頁 短消息兒 等等)、用戶的寫名字(掩飾後不憚寫名字的內部實質意義影響正文,鏈接也失靈了:P)
以住有關文章

2.為題目加上
h1
標簽
改正內部實質意義頁模型板文件 templates/default/viewthread.htm:

將 span class=bold$post[subject]/spanbrbr 調換為
h1$post[subject]/h1

定制本帖最終由 XXX 於 xxxxxx 編輯內部實質意義

改正文件 templates/default/misc.lang.php:將下邊兩行改成您喜歡的內部實質意義:

‘post_edit’ = ‘\n\n[[i]] 本帖最終由 $editor 於 $edittime 編輯 [/i]]’,
‘post_edit_regexp’ = ‘/\n{2}\[\[i\] 本帖最終由 .*? 於 .*? 編輯 \[\/i\]\]$/s’,

譬如我改成 [ 網站名 URL xxx 於 xxxx 編輯]。改手續無聊時的自娛,呵呵
注意上下兩個表現式要般配。為了避免解析方括號是全角,不要復制後在文件中查尋。

二、內部實質意義頁的網頁復制問題

看看內部實質意義頁的URL大家就曉得了:thread-(tid)-(page)-(forumdisplay page).html,可以看出最終一節表達的是此帖在列表頁的第幾頁。所以,當您的帖子越來越多,這個帖便會由第1頁到第二頁…,它的URL便會不斷的變動。實際上敞開一個列表頁就可以見得,第2頁的帖子鏈接的最終數碼都是2,第3頁的都是3,只是很少注意它。我是在SE的收錄中發覺復制網頁越來越多,纔對最終的數碼注意的。

解決辦法
改正 forumdisplay.php 文件:

將 $extra = rawurlencode(page=$page$forumdisplayadd); 語句調換為
$extra = rawurlencode(page=1$forumdisplayadd);

語句中的page就是forumdisplay page,這麼改後無論帖子在列表頁的第幾頁,這個數都是1。

功能虧損:當用戶編輯帖子或斑竹管理帖子後,有個提醒跳轉頁:挑選轉進入行列表頁仍然正題頁,這時轉進入行列表頁的話,只能轉到列表頁第1頁,而無論您原來稽留在第幾頁。

redirect的301重定向

在discuz論壇中可以看見大致相似redirect.php?tid=xxxgoto=lastpost#lastpost這麼的鏈接,它的功能是成功實現最新刊發、最終刊發、上一正題、下一正題功能,僅這一個功能就可以給同一個內部實質意義頁導致四份復制網頁,因為這個將這麼的鏈接301長久重定向到帖子的靜態地址。

解決辦法
改正 redirect.php 文件:

將前兩個 require_once DISCUZ_ROOT.’./viewthread.php’; 語句調換為
$bmt_url=’Location:/thread-‘.$tid.’-‘.$page.’-1.html’;
header(‘HTTP/1.1 301 Moved Permanently’);
header( $bmt_url );
將後兩個 require_once DISCUZ_ROOT.’./viewthread.php’; 語句調換為
$bmt_url=’Location:/thread-‘.$tid.’-1-1.html’;
header(‘HTTP/1.1 301 Moved Permanently’);
header( $bmt_url );

dz5.5的援用法也有個跳轉,也可以做301:

將 dheader(Location: viewthread.php?tid=$post[tid]page=$page#pid$pid);調換為
$bmt_url=’Location:/thread-‘.$post[tid].’-‘.$page.’-1.html#pid’.$pid;
header(‘HTTP/1.1 301 Moved Permanently’);
header( $bmt_url );

***注意此處直接轉到達靜態地址,沒有做判斷是否開啟偽靜態功能,所以不開啟會有問題

功能虧損:轉向到靜態地址後,動態地址中大致相似#lastpost的錨點將沒有辦法起效用了,有可能要手動滾屏了
???好似沒有影響錨點

提醒信息頁的網頁復制

這個問題和內部實質意義頁也有著非常大的關系,呵呵。如管理員設置准許游人瀏覽列表,而嚴禁瀏覽內部實質意義時,這些個內部實質意義頁都將回返一沒有職權范圍的提醒信息頁,但他們的URL 是不一樣的,這麼就形成了嚴重的網頁復制,這個之外還有其他形成的無權操作等。別一種提醒信息如帖子不存在等,數目大了也會形成網頁復制。這兩種提醒信息,都是經過showmessage函數作別調配使用nopermission.htm和showmessage.htm兩個模型板成功實現的。

解決辦法
1.開創另一個頭模型板文件 templates/default/header_disbots.htm
內部實質意義同 header.htm 文件,但參加meta robot標簽,如下所述

meta name=robots content=noindex,nofollow /

2.作別改正 templates/default/nopermission.htm 和 templates/default/showmessage.htm 文件
將他們第1行的 {template header} 調換為 {template header_disbots}

固然對meta robots標簽支持的不是很廣泛,但這是比較省事的辦法
由於是提醒信息頁,用301來成功實現的話,還要傳給轉到的頁好多信息,改正起來比較麻煩

三、robots.txt運用

User-agent: *

#嚴禁一個版面的收錄
#假如有個水版,沒想到嚴禁游人職權范圍,也沒想到SE收錄,已免影響網站品質,可以用如下所述辦法
Disallow: /forum-1-

#數碼即為要嚴禁版塊的ID。
#注意數碼最終的 – 不要省略,否則連ID為11,12等1開頭的版都禁了
[更新]補給辦法:再給內部實質意義頁加meta robot嚴禁

#再禁網頁復制
Disallow: /viewthread.php
#這個是內部實質意義頁的動態方式,面前對偽靜態做了優化並改正了眾多的復制網頁,因為這個這處動態方式如打印頁等必須要嚴禁

Disallow: /forumdisplay.php
#這個要謹慎認真:列表頁的動態方式,還涵蓋菁華、活動、投票等方式。我發覺5.0的靜態化不徹底,它的上一頁下一頁翻頁仍是動態,這麼假如嚴禁了,十頁在這以後的內部實質意義就不可以通這引得了。所以假如您站內的交差鏈接不浩博的話,不要在此嚴禁,免得影響收錄。

hekaiyu說沒有這個問題,去官方看了下5.5確實沒問題(或許我的5.0壓根兒沒問題,或許官方在新版本中完備了正則表現式的調換規則),這麼更好了,嚴禁它,又整潔了好多

#嚴禁其他無用內部實質意義
Disallow: /profile
#用戶信息,不知為何discuz也靜態化了,一例嚴禁
Disallow: /relatethread
Disallow: /post
Disallow: /blog
Disallow: /member
Disallow: /misc
Disallow: /faq
Disallow: /my
Disallow: /pm
Disallow: /digest
Disallow: /status
# … … 等等
# —– robots.txt end ——
[更新]dz5.5的robots.txt後局部給出的Disallow: post.php等是不符合規范的,必須要在面前加上/。周密解釋明白

首頁URL問題

後臺基本設置-首頁文件名假如不設置,會默許為index.php。所以站內到首頁的鏈接為方式為http: //domain/index.php。而我們普通援用論壇首頁或交換鏈接的方式普通是http://domain/。實際是同樣的,但SE可覺得是兩個 URL,並且一個領有眾多的內裡鏈接,一個領有較多的外部鏈接,所以哪一個被降級都不是好管閑事情,最好一統塊兒來。這處的改正目的是http: //domain/的方式。

1.進入了後臺,基本設置-首面文件名 設置為: /
2.改正文件 member.php 將 header(Location: {$boardurl}.$indexname); 調換為

if( $indexname==’/’){
header(Location: {$boardurl});
}else{
header(Location: {$boardurl}.$indexname);
}

[更新]dz5.5為dheader

此改正處的功能是掃除淨盡cookies後回返到首頁,如不改正域名後就有兩個/。短時間之內未發覺運用/當首頁文件名的其他問題

結 束

除開文件的改正,有點地方要合適後臺設置,面前都提到達,這處總結概括一下子。主要有:1.URL靜態化,只開始使用平常的頁面靜態化就可以了;2.不要開始使用 Archiver功能;3.後臺的keywords和description設置只是針對首頁的(假如您沒做列表頁和內部實質意義頁的meta改正則也應用到他們);4.後臺首頁文件名為/(當然您也可以設置自個兒特別指定的)