2012年5月29日 星期二

程式交易─淺談順勢系統


程式交易的主要作用是─利用已知的歷史資料統計交易方法的績效。你可以有很多交易方法,但在績效不明前,如果貿然進入市場交易,那你可能是嫌錢太多了。就我所知,大多數賺錢的交易系統是所謂的順勢系統。看過許多的資料後,我發現“波段交易”是一種真正能產生利潤的交易方法。如下圖所示,這是一個簡單且合理的台指期貨順勢交易系統,搭配簡單的加碼、停損、停利機制,卻可產生驚人的效果。整個系統已考慮滑價、換倉、手續費、期交稅等等所有的成本,每口雙邊(一買一賣)交易成本為 4000 元,系統同時最多擁有 2 口大台。統計資料從 2001 年 1 月 1 日至 2003 年 11 月 7 止。平均每個月不含換倉,只交易 3 口單,換句話說,實在沒有必要去賺當沖的辛苦錢。套句 Larry Williams(首創威廉指標)的話,“你交易的時段越短,賺的錢越少”。

不算加碼,整個系統的(報酬/風險)比約為 2。不計加碼,(報酬/風險)比小於 1.5 的系統,千萬不要用。由圖中你不難發現,當系統連續大賠後,就是大賺的開始,反之亦然。如果將 Elliott Wave 考慮進去,你可以逃過某一段連續大賠的日子,但不是全部。所以,等待是值得的。以下數據不是最佳化後的數據,但離最佳化數據也不遠。Account size required $382,600.00 也就是說至少要 50 萬元才能使用此系統,這個程式是 2002 年底完成的,也就是說 2003 年開始才是真正在市場的績效,這點很重要,─般程式交易系統的績效在正式進入市場後,大多會下降很多,這是程式的績效最佳化後所帶來的後遺症。

滑價佔整個交易成本的比重是很大的,由於只能在買賣訊號發出後追價進場,因此進場價通常要比買賣訊號發生時的價格要差,而價差有可能大到 30 點,一般是在 10 點之內。我們不猜頭摸底,同樣的,我們也不猜買賣訊號是否發生。

每個交易市場都有其自我的特性,這些可以從歷史資料中觀察出來,金指的方向沒有大台指明顯,如果可能,盡量做大台指不要做金指,交易量大也是選擇大台指的原因之一。大台指的特性約同電指,但震盪較電指小一些。當然,交易市場的特性是會隨時間而改變的。Max intraday drawdown,為最大連續損失,如果將測試時間加長,這個數字會放大一倍,整個系統的(報酬/風險)比約為 3 ,也就是說,這個系統還不是非常穩定。產生最大連續損失的時候,通常也是均線糾結、走平的時候。解決的方法有二,一是“等待”,二是加入另一個特性相反的程式,用以降低最大損失。有句話說的好,“如果你能夠控制盤整,你就能控制整個世界”。以上只是個人交易上的一點淺見,如有謬誤,還請諒解。

虧損始終來自人性
程式交易本身還是需要人去執行
當發生連續虧損時
生活的壓力可能會迫使操作者無法確實執行交易訊號

總歸一句話
執行力才是重點

XMPP協定已一統即時訊息協定標準


自由軟體鑄造場得知Microsoft 打開 Messenger 大門 開始支援 XMPP,因此目前主流即時訊息都支援XMPP,包括Facebook chat
既然如此,當然找看看熟悉的Smack套件是否也有MSN的sample code。果然Github上有MS放出的LiveSDK,便有JAVAAndroid的程式碼。有空再把拿token那程式改成用httpclient
JAVA程式碼如下:
package messenger;

import java.net.URL;
import java.net.URLDecoder;

import javax.swing.JOptionPane;

import org.jivesoftware.smack.ConnectionConfiguration;
import org.jivesoftware.smack.PacketListener;
import org.jivesoftware.smack.Roster;
import org.jivesoftware.smack.RosterEntry;
import org.jivesoftware.smack.SASLAuthentication;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.filter.MessageTypeFilter;
import org.jivesoftware.smack.filter.PacketFilter;
import org.jivesoftware.smack.filter.PacketTypeFilter;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.packet.Packet;
import org.jivesoftware.smack.packet.Presence;
import org.jivesoftware.smack.util.StringUtils;

/**
 * XmppClient class has all the XMPP specific logic. This class uses smack
 * library to connect to windows live messenger service. For Windows Live Xmpp
 * documentation see <link>
 */
public class msn {

public static final String Host = "xmpp.messenger.live.com";
public static final int Port = 5222;
public static final String Service = "messenger.live.com";

private String accessToken;
private XMPPConnection connection;

/**
 * This block initializes smack with SASL mechanism used by Windows Live.
 */
static {
SASLAuthentication.registerSASLMechanism("X-MESSENGER-OAUTH2",
XMessengerOAuth2.class);
SASLAuthentication.supportSASLMechanism("X-MESSENGER-OAUTH2");
}

public static void main(String[] args) throws InterruptedException {
/**
 * 1. Set up a string with the path to the website.
 * 2. Create a desktop variable.  The desktop class uses the computer's default browser to open the URL.
 * 3. Load the URL.
 * 4. Browse to the URL.
 */

//TODO put your own clientId here.
//String clientId = "000000004807AE0A";
//String scopes = "wl.messenger";
//String signInUrl = "https://oauth.live.com/authorize?client_id=" + clientId + "&redirect_uri=https://oauth.live.com/desktop&response_type=token&scope=" + scopes;

try {
// launch a web browser to take the user through the OAuth 2.0 consent flow
//BareBonesBrowserLaunch.browse(signInUrl);

// pop a dialog that tells the developer to copy and paste the URL and put it into a text box in the dialog
//String returnUrlString = (String)JOptionPane.showInputDialog("After completing the OAuth consent flow in the browser, copy and paste the return URL into this dialog box");
String returnUrlString = "https://oauth.live.com/desktop#access_token=EwAoAq1DBAAUlbRWyAJjK5w968Ru3Cyt%2f6GvwXwAAcQc5qjgPRbE4InoTBM3bsPTd0eAZIcSZiRxdNSMn3K8jSLvqJjDBfhjf3fd71C%2fBlGBFqDAs%2fFZYb1WYDPUfbL239Y3sXKA8ZFZgMOKIWWb%2beib%2fyTpNIW6m4O4SUMhAu5GYe3DAiC7JsXAnLgu%2bUFeUpF%2fEMjmrdRGzVDUjNNuwfKgdqpgvBD5kWAU1A3NNGhwxJZZhwOpKcogIcWZ%2fR7eKdFsYjGN9riWjBh2gcmk%2bGiEMifAxI0PoqeECqq9otHAZ1fz9NxCUbFssIQuy5mxlzjPu%2fWl9wmwRvZnHkDY4EiuDrfUw6SHflWirQ74nQ2fjv7Ew7Dk4nl%2fvvTymxcDZgAACPsOZ%2fNUm4kh%2bABDsVcnU0eMbHeEikN9WrYIwYTrTQKy2WtThAVuuNwsJOiqgyP%2fInBCWZMudPy0qGOlFoJriKm16OiYrgf44t9aua6MO7Lq0hJchmmbBm9%2fEsSquOhKaLOrNgx%2fVPs%2bqycd6sBkqzPJMD69eIztb%2fPnllMbX%2f4qDz1cUU1ySkE%2f3%2bMlENfPDKiNARAvKxSpljsM6yjMgwPCTawChrUgExYjbeGxAR16vY1N7ibTmwcgIB9ewoyghGeNBI7GHBdpOMzBbp%2b6YZQYBDHwPc7SXYoxPq1s8TAlfdXrrpj2J2kEpxuwPGM6VnBJN1yOdFsolRENflmAkTCh4gAA&token_type=bearer&expires_in=3600&scope=wl.messenger";
// take the string URL from the dialog and programmatically cram it into the access token parameter
String accessToken = urlTokenizerHelper(returnUrlString);

// log in using the access token
msn client = new msn(accessToken);
client.logIn();
Roster r = client.getRoster();
System.out.println(r.toString());
// make sure the program hasn't already closed before the login has completed
// in a real XMPP client, this would be replaced with waiting on UI events and Xmpp events 
Thread.sleep(1000000);
} catch (Exception e) {
System.out.println(e);
}
}

/**
 * This function helps to extract the access_token query string parameter from the return URL.
 */
public static String urlTokenizerHelper(String urlString) {
URL returnUrl = null;
try{
returnUrl = new URL(urlString);
}catch(Exception e){}
String queryParameters = returnUrl.getRef();
queryParameters = queryParameters.substring(queryParameters.indexOf("access_token"));
queryParameters = queryParameters.substring(queryParameters.indexOf("=")+1);

String encodedAccessToken = queryParameters.substring(0, queryParameters.indexOf("&"));

return URLDecoder.decode(encodedAccessToken);

}
/**
 * Constructor
 * 
 * @param accessToken
 *            The OAuth2.0 access token to be used for login.
 */
public msn(String accessToken) {
this.accessToken = accessToken;
}

/**
 * Get the Roster for this client instance.
 * 
 * @return The full Roster for the client.
 */
public Roster getRoster() {
return this.connection.getRoster();
}

/**
 * Get the Jid for this client instance.
 */
public String getLocalJid() {
return StringUtils.parseBareAddress(this.connection.getUser());
}

/**
 * Log in the client to the messenger service.
 */
public void logIn() {

// Create a connection. We use service name in config and asmack will do
// SRV look up locate the xmpp server.
ConnectionConfiguration connConfig = new ConnectionConfiguration(
msn.Service);
connConfig.setRosterLoadedAtLogin(true);
this.connection = new XMPPConnection(connConfig);

try {
this.connection.connect();

// We do not need user name in this case.
this.connection.login("", this.accessToken);
} catch (XMPPException ex) {
this.connection = null;
return;
}

System.out.println(String.format("Logged in as %s",
this.connection.getUser()));
// set the message and presence handlers
this.setPacketFilters();

// Set the status to available
Presence presence = new Presence(Presence.Type.available);
this.connection.sendPacket(presence);
}

/**
 * Send a text message to the buddy.
 * 
 * @param to
 *            The Buddy Jid.
 * @param text
 *            The text message to be sent.
 */
public void sendMessage(String to, String text) {
Message msg = new Message(to, Message.Type.chat);
msg.setBody(text);
this.connection.sendPacket(msg);
}

/**
 * Set the packet filters for handling incoming stanzas.
 */
private void setPacketFilters() {
if (this.connection != null) {
PacketFilter presenceFilter = new PacketTypeFilter(Presence.class);
this.connection.addPacketListener(new PacketListener() {
public void processPacket(Packet packet) {
Presence presence = (Presence) packet;
handlePresenceReceived(presence);
}
}, presenceFilter);

PacketFilter messageFilter = new MessageTypeFilter(
Message.Type.chat);
this.connection.addPacketListener(new PacketListener() {
public void processPacket(Packet packet) {
Message message = (Message) packet;
if (message.getBody() != null) {
handleMessageReceived(message);
}
}
}, messageFilter);
}
}

/**
 * Handle the presence stanza received.
 * 
 * @param presence
 *            The received presence stanza.
 */
private void handlePresenceReceived(Presence presence) {
String from = StringUtils.parseBareAddress(presence.getFrom());
System.out.println(String.format(
"Presence received from Jid: %s, Name: %s", from,
this.getContactName(from)));
}

/**
 * Handle the message stanza received.
 * 
 * @param message
 *            The received message stanza.
 */
private void handleMessageReceived(Message message) {
String from = StringUtils.parseBareAddress(message.getFrom());
System.out.println(String.format(
"Message received from Jid: %s, Name: %s", from,
this.getContactName(from)));
}

/**
 * Get friendly name of a contact given the jid.
 * 
 * @param jid
 *            Jid for the target contact.
 * 
 * @return The friendly name by looking up roster.
 */
private String getContactName(String jid) {
Roster roster = this.connection.getRoster();
RosterEntry entry = roster.getEntry(jid);
return entry.getName();
}
}


建置程式交易系統(4) - 逆勢策略

上一篇的建置程式交易系統(3) - 模式辨識介紹了簡單的模式辨識(pattern recognition)順勢策略。依據這基礎再衍伸出逆勢的策略,也就是取頭部或底部來賺反彈差價。
這假設是,既然有突然的大波動,便表示會有反彈,只要在頭部或底部確認後,進場作逆勢,可能可以獲利。
舉例來說,2012-04-09的台指期走勢如下:逆勢策略
從圖中可看出,08:52時有一個急跌,經過篩選,程式不進場,便開始抓取最低值,取底部,終於在09:05時開始拉回,確定拉回一段後,程式才進場作多,最後在09:43跌回時便出場停利以免又跌回去。這交易紀錄可比對期貨程式交易機器人4/9的交易紀錄
以上簡單說明期貨程式交易機器人的逆勢策略,之後再說明停利停損等規則。

建置程式交易系統(3) - 模式辨識

之前建置程式交易系統(2) - 決定獲利策略談到模式辨識(pattern recognition),本篇將說明那期貨程式交易機器人如何利用slide window和pattern來判別順勢進場點。
因報價都是tick data,一般都是用K棒來分析,但最小單位只能到一分K,在波動大時,幾秒鐘就變動很大,因此程式交易機器人是直接用tick值,但tick資料難免會有雜訊干擾,導致無法判斷正確走勢﹑,便利用訊號處理技術,將tick資料的雜訊過濾。而雜訊過濾技術有很多種,如FFTDCT等,個人是選擇DWT,因為這DWT只有加減法,能夠很快速處理。
因此,透過不斷輸入的tick資料,這程式只處理N個tick值,請見下圖。
slide window
而這N個tick,就可看成一個slide window,隨著資料進入而滑動。
那針對這N個tick,使用DWT處理後,變成只有25個tick資料,再比對其中6個tick,透過這6個tick的走勢來判斷是否為大波動,1.高低差是否超過一個值,2.最高是否為最後兩個tick(下跌就最低是否為最後兩個tick),3.最低是否為前面兩個tick(下跌就最高是否為前面兩個tick)。
pattern
圖a,便不符合規則1和規則3,而圖b便會進場做多。
實際案例,下圖為2012/3/22 09:14到09:16之間的台指期走勢。
台指期走勢
其中第一個slide window,便進場做多,第二個slide window,便進場做空,可比對期貨程式交易機器人3/22的交易紀錄
以上大致說明期貨程式交易機器人的順勢策略,之後再說明逆勢策略及停利停損的規則。

2012年5月22日 星期二

Web使用挖掘的應用研究


1   引言
  Web資料的爆炸性增長導致了顧客資訊的過量,合理地應用它們不僅可以使網站和商業公司在激烈的競爭中獲益,還可以找到合作長久同時又有利可固的顧客。如何策略地解決這個問題取決於我們對Web使用挖掘技術的有效應用,在Web上運用資料採擷技術發現和分析有用資訊逐漸成為知識發現研究的重要方向。

  Web是一個快速變化的資訊源,不單單是網上內容的急劇膨脹,頁面內容的改變也是極度頻繁,新聞、股票市場、廣告公司和網路股務中心都在一定的時間間隔內修改著他們的網上資訊;另外,網頁的連結和存取路徑也常常被改變,還要面對各種不同的用戶,而且用戶的數量也在不斷地增長。其使用興趣和目的各不相同,如何才能找到使用者感興趣的資訊?如何才能找到高品質的頁面?

  以上這些問題推動了在Internet上進行使用挖掘的研究,為了更好地管理Web網站的資料,使其高效地為網上使用者提供有效的資訊股務;挖掘使用者感興越的內容;跟蹤、分析使用者的使用模式;提高使用者使用網路的效率,我們要積極開展網路挖掘中使用挖掘的應用研究工作。Web使用挖掘的應用日益廣泛,尤其是在電子商務的大力支持下,越發顯示出蓬勃的生命力。它通過資料採擷技術對Web上的資料進行挖掘,從而發現Web上的使用者使用模式。

2   Web使用挖掘

  Web使用挖掘是從Web股務器中自動發現使用者的訪問模式。在Web伺服器日誌中自動搜集並記錄著使用者的訪問操作,還有通過CGI記錄的使用者註冊資訊。通過對這些使用者資訊的分析,可以找出使用者的訪問模式,確定產品的市場戰略,提高商業活動的效率,而且為網站的有效組織也提供了資訊,還可以為特定的使用者提供個性化的網路服務。

  目前常用的工具有模式發現工具和模式分析工具,它們提供了使用者行為的分析和資料的過濾,使用人工智慧、資料採擷、心理學和資訊理論從資料集中挖掘知識。在訪問模式發現以後,用相應的分析技術來理解、解釋和顯示這些模式。如使用0LAP連線分析處理技術,資料立方體簡化使用者使用模式的分析,還有用SQL查詢發現知識等。

2.1   Web使用挖掘的框架

Web使用挖掘框架主要包括三部分:

 (1)資料頂處理,包括使用者識別、操作識別、路徑完善、事務標識、資料集成、資料轉換,將Web日誌轉化成面向不同領域的適合資料採擷的事務形式。

 (2)面向不同的領域採用資料採擷演算法,如關聯規則挖掘、序列模式挖掘、路徑分析挖掘、分類和聚類分析挖掘等。

 (3)模式分析的方法有:連線分析、視覺化、知識查詢和資訊過濾。模式分析工具將抽象的使用模式以直觀、容易理解的方式展現給分析者,分析者利用知識查詢語言,根據需要對挖掘過程加以限制,得到感興趣的使用模式。比如限定某一領域進行挖掘,然後就這一領域挖掘出來的使用模式進行分析,得出感興趣的結果。

  資訊過濾分兩部分:objective過濾和subjective過濾。objective過濾處理用不同模式發現關聯的數值型度量的變化,比如:支持度和興趣度;subjective過濾是用來處理使用挖掘通過分析網站內容和結構而形成訪問網頁的可信任度。對於Web使用挖掘,設想用網站結構和內容作為網站設計者的領域知識,在網頁之間進行連結以提供這些頁面的關聯支援,那麼在網頁之間的拓撲連結越強,這些網頁一起被訪問的可信度也就越高。類似地,在同一個內容簇或同一類裡的頁面被認為在一起被訪問的可信度遠遠大於不同簇或不同類中的頁面。圖1所示是Web使用挖掘系統框架。

2.2Web使用挖掘的實驗

  採用分類和聚類的挖掘方法,通過訪問網站的客戶流量的分析,得出群體客戶的訪問規律,使網站設計者可以根據客戶的訪問規律,在不同時間段內推薦不同品質的思務,有效提升網站的訪問人數。步驟如下:

 (1)瞭解上網客戶的身份,進行特定客戶群體分析,從訪客的造訪次數、停留時間及常訪問的頁面,找到有實用價值的客戶。

 (2)對網站特定主題內容和特定網頁進行深度分析,如:國慶日活動、旅遊介紹等,進一步瞭解網站內容與訪問客戶之間的互動關係,發現最吸引客戶的商品和服務。

 (3)通過參照訪問客戶參與網站活動效果及網頁流覽狀態.輔助網站內容規劃,評估網站內容。

  基於一些實驗資料類比,將一天24小時內某網站客戶流量進行分析,用表1、圖2表示出來,並分析出一天中的推薦服務量(圖3)。

3   網站結構和內容對使用挖掘的影響

  目前有許多工具可以進行資料的清理和Web伺服器日誌中的會話識別,還有大量的資料採擷演算法從預處理後的資料集中發現使用者使用模式和預測趨勢,但最終Web使用挖掘的效果依然不能令人滿意,其中一個重要的原因就是人們忽視了對使用挖掘效果起著重要影響作用的網站結構和內容。圖4所示的是Web使用挖掘的過程,從中不難看出,網站的結構和內容對整個Web使用挖掘過程的每個重要階段都是關鍵性的資料來源。在Web上有三種數據:內容資料、結構資料和使用者使用資料。內容資料是指網頁上實際存在的資料,是供網上用戶使用的,通常是由文本和圖像組成的;結構資料是用來組織內容的一種描述性的資料,主要是指頁與頁之間的超連結;而使用者使用資料是指Web頁面的使用模式,比如:IP位址、頁面引用和存取時間等資料。使用資料通常源于普通和擴展的思務器日誌。以上三種資料組建了資料提取、頁面流覽、點擊流和會話。頁面流覽是指用戶端使用者一次點擊網頁的行為,一系列的頁面流覽構成點擊流。

  網站結構和內容的處理是一個內部關聯的任務。網頁如何連結取決於網頁的流覽方式,網站內容的創建技術又決定著網站的內容和結構,而不同的使用者則決定著網站主頁內容的設計。因此,網站的結構、內容和使用者的使用有著密不可分的聯繫,網站的結構和內容影響著Web使用挖掘的不同階段,分頁檔在語義上依賴著網站內容,而網站內容的決定是一個手工過程,取決於創建網站的技術和分析目的。

4   使用挖掘在電子商務中的應用

  由於迅速發展的電子商務競爭異常激烈,所以網站銷售商一定要做好快速迎合線上顧客需求的準備。線上銷售的伸縮性使得人們能夠監控銷售,並且及時瞭解價格調整和產品服務的可適應性。另外,通過對銷售資訊的挖掘能展現影響產品所有方面的重要趨勢和模式,包括:貨運、銷售和庫存等。

  日益增長的網站訪問資訊和飛速發展的資料採擷技術使得網站能夠真正地為它的線上顧客提供個性化服務,市場應該使網站施效於它真正的客戶和利益。在一個動態的強競爭的網路環境中,電子商務必須通過較好地理解訪問頻繁的客戶和最有利可圖的顧客的行為,才能取得它們的競爭優勢。要想瞭解客戶的訪問行為就必須通過使用挖掘去挖掘你的網站資料,使網站的努力集中在有利可圖的顧客和前景上。

  目前大部分的公司都有自己網站產生出來的巨大數量的使用者資訊,因而大型的電子商務網站需要有適合大量資料的挖掘工具,希望能通過資料採擷得到益處。另外Web是個理想的市場環境,其中每筆交易都能被獲取和存儲,通過Web上的使用挖掘可以便網站達到以下目的:

‧識別Web客戶的關鍵特性。
‧測試和決定哪個市場活動影響力最大。
‧識別出對新產品特別有興趣的客戶。
‧降低商品的價格,改善和客戶的關係。
‧改善網站廣告和銷售過程。

  使用挖掘在電子商務中的具體挖掘步驟如圖5所示。

(1)縱覽數據

  通過對顧客的可視縱覽調查,能揭示一定顧客的特性統計,從而為網站設計者和市場經營者提供一些直接的戰略戰策。

(2)分析資料

  將資料按照不同類型的分析方法分成不同的簇,進行分類聚類的挖掘。


(3)數據建模

  建立網站訪問者的行為模型,發現和學習訪問者的特性和線上行為。例如,通過檢驗訪問者的特性、點擊廣告和進行線上購物的習性,結合資料採擷工具建模和預測網站訪問者的行為,將個性化的服務推薦給有極大興趣並且有購買欲望的顧客。一旦網站和顧客建立了相互瞭解的關係,那麼這些顧客將可能永遠是網站的老顧客。

(4)方法集成

  Web使用挖掘並不是一個孤立的單一過程.而是對網站各個有影響的方面都要進行分析的綜合過程。在這個分析的基礎上,發現和控制貨運週期和具體產品的趨勢,發現的模式能提示網站目前需要哪些貨源,以確保產品和思務的迅速遣送。

(5)客戶識別

  要通過使用網站所產生的事務和顧客資料瞭解購買者是誰,最喜歡買什麼?這就要求我們結合多方因素為每個訪問者建立一個唯一的記錄,獲取並分析每個購物者的行為資訊。

(6)機構分析

  分析作為一種回饋系統思務於電子商務網站,能影響網站的設計、銷售、庫存和市場經營。對客戶資訊的整體機構的分析挖掘,可以使網站瞭解購買者的個人資訊特點和購買物品的價格特點;瞭解所處熱賣的產品,及時調整庫存、貨運和計畫定單;並制定出浮動價格、增強廣告設計、獎員促銷等一系列行銷策略。

(7)個性化服務    

  Web允許人們按照自己的喜好定制新聞、天氣、市場和股票報告,但是人們必須要提供個人資訊,以便於網路瞭解我們的偏好,適時地推薦具有個性化特點的產品和服務。因而網站要積累大量的使用者資訊,為使用者提供感興趣的產品和思務,建立牢固可靠的貿易關係,個性化網站的設計應用。最大的利益取決於網站和顧客資訊的集成,這就要求在個性化基礎上挖掘相互之間的作用與影響,並建立使用者的個人偏好記錄。通過討論、聊天和郵件的方式學習顧客,並且可以進行相互影響的交流,從而形成網站的個性化思務。

  Web通過加大顧客的自由選擇權而促進了商務的發展,網站要遞送個性化的服務就需要挖掘Web使用資料發現顧客的特性,依靠這些資料的積累,進一步拓展網站的個性化功能。

  應答式的個性化服務將會變得很規範。顧客很願意以最少的代價去尋找所需的產品、服務和資訊,因而商業網站必須結合公司的庫存資料庫,以適應不同個性使用者的產品需求,同時也可以通過交叉推薦的方式來進行推薦。總之,個性化是通過網站和顧客之間的聯繫,使用積累資訊進行挖掘,又遞送商品服務于顧客的過程。

結束語

  Web挖掘是一個新興的有巨大發展前景的研究領域,其技術在國內外有著廣泛的應用。電子商務通過Web上的使用挖掘所提供的足夠的知識,可以鎖定相當數量的顧客進入商務關係中,以改善銷售狀況和保存客戶關係,從而增加市場效益。另外,通過Web使用的個性瞭解,比較已存在顧客的綜合個性,能在已有顧客的知識幫助下發掘出潛在的新顧客的個性、生活方式和特點。Web使用挖掘作為一個新興的研究領域,其應用技術依然面臨著很多挑戰。

Web結構挖掘演算法概述及應用



一、    引言
資料採擷是將人工智慧技術和資料庫技術緊密結合發展出的一門新的技術,利用電腦從龐大的資料中智慧地、自動地抽取有價值的知識模式,以滿足人們不同應用的需要。隨著互聯網的普及和迅猛發展、Web上信息量的爆炸式增長, 網上的資源得到極大豐富, 但也充斥著大量的垃圾資訊, 人們迫切需要能從這些紛繁蕪雜的資訊中找到有用知識的工具。鑒於資料採擷工具的日益成熟完善, 人們自然而然想到了要把資料採擷技術應用到Web上來。
Web挖掘指在WWW 上挖掘潛在的、有用的模式及隱藏的資訊過程。根據對Web資料的感興趣程度不同,Web挖掘一般可以分為三類:Web內容挖掘(Web Content mining)、 Web結構挖掘( Web structure mining)、 Web 用法挖掘(Web usage Mining)
其中Web 結構挖掘是對Web 的連結結構進行分析, 以對超連結分析來評估基礎Web 資源, 從而發現有用模式, 提高搜索品質。
二、    Web結構挖掘綜述
傳統的WEB搜尋引擎大多數是基於關鍵字匹配的,返回的結果是包含查詢項的文檔,也有基於目錄分類的搜尋引擎。這些搜尋引擎的結果並不令人滿意。有些網站有意提高關鍵字出現的頻率來提高自身在搜尋引擎中的重要性,破壞搜尋引擎結果的客觀性和準確性。另外,有些重要的網頁並不包含查詢項。搜尋引擎的分類目錄也不可能把所有的分類考慮全面,並且目錄大多靠人工維護,主觀性強,費用高,更新速度慢。
Web結構包括不同網頁之間的超連結結構和一個網頁內部的可以用HTML,XML表示成的樹開結構,以及文檔URL中的目錄路徑結構等。Web頁之間的超連結結構中包含了許多有用的資訊,當網頁A到網頁B存在一個超連結時,則說明網頁A的作者認為網頁B的內容非常重要,且兩個網頁的內容具有相似的主題。因此,指向一個文檔的超連結體現了該文檔的被引用情況。如果大量的連結都指向了同一個網頁,我們就認為它是一個權威頁。這就類似於論文對參考文獻的引用,如果某一篇文章經常被引用,就說明它非常重要。這種思想有助於對搜尋引擎的返回結果進行相關度排序。從WWW的組織結構和連結關係中推導知識。通過對Web網站的結構進行分析、變形和歸納,將Web頁面進行分類,分析一個網頁連結和被連結數量以及物件來建立Web自身的連結結構模式,確定不同頁面間的相似度和關聯度資訊。定位相關主題的權威網站,可以極大的提高檢索結果的品質。
基於這種超鏈分析的思想,Sergey Brin和Lawrence Page在1998年提出了PageRank演算法,同年J. Kleinberg提出了HITS演算法,其它一些學者也相繼提出了另外的連結分析演算法,如SALSA,PHITS,Bayesian等演算法。這些演算法有的已經在實際的系統中實現和使用,並且取得了良好的效果。
三、    WEB結構挖掘常見演算法
1、           PageRank演算法
PageRank演算法是Web超連結結構分析中最成功的代表之一。該演算法由Stanford大學的Brin和Page提出,是評價網頁權威性的一種重要工具。搜尋引擎Google、Yahoo、Baidu都是利用該演算法和anchor text標記、詞頻統計等因素相結合的方法對檢索出的大量結果進行相關度排序,將最權威的網頁儘量排在前面。
1)        PageRank基本原理
傳統情報檢索理論中的引文分析方法是確定學術文獻權威性的重要方法之一,即根據引文的數量來確定文獻的權威性。PageRank 的發明者對網路超連結結構和文獻引文機制的相似性進行了研究,把引文分析思想借鑒到網路文檔重要性的計算中來,利用網路自身的超連結結構給所有的網頁確定一個重要性的等級數,當從網頁A 連結到網頁B 時,就認為”網頁A 投了網頁B 一票”,增加了網頁B 的重要性。最後根據網頁的得票數評定其重要性,以此來?明實現排序演算法的優化,而這個重要性的量化指標就是PageRank 值。
但是網頁和學術上的出版文獻的差別是很大的。首先學術論文的出版發表非常的嚴格,而網頁的出版非常自由、成本很低並缺乏控制,用一個簡單的程式就可以產生大量的網頁和很多連結。另外學術出版物的引文一般和文章的領域有關係,而網頁的連結範圍領域卻很廣。可見簡單的連結數量計算並不能客觀真實地反映網頁的重要性,所以PageRank 除了考慮網頁得票數(即連結) 的純數量之外,還要分析為其投票的網頁的重要性,重要的網頁所投之票有助於增強其他網頁的“重要性”。簡單地說,PageRank 就是要從連結結構中獲取網頁的重要性,而網頁的重要
2)        PageRank的實現
PageRank在具體實現時會忽略掉Web頁面上的文本和其它內容,只考慮頁面間的超連結,把Web看成是一個巨大的有向圖G =(V,E),結點vI V代表一個Web頁面,有向邊(p,
q )I E代表從結點p指向結點q的超連結,結點p的出度是指從頁面p出發的超連結(outlink)的總數,而入度是指所有指向結點p的超連結(inlink)的總數。
PageRank的具體定義如下:將Web對應成有向圖,設W為該有向圖結點的集合,N=|W|, Fi是頁面i指向的所有頁面的集合,Bi是指向頁面i的所有頁面的集合。對每個出度為0的結點S,設FS ={有向圖中全部N個結點},則所有其他結點的Bi={B E i S},這樣可以將結點S所具有的PageRank值均勻地傳遞給其他所有頁面。PageRank的具體反覆運算公式為 。
其中,參數 d是 取值0到1之間的衰減因數,因為任何一個網頁的作者都認為其它的網頁不如自己的重要。d通常被置為0.85。
PageRank的實現過程為:將網頁的URL對應成唯一的整數,把每一個超連結用其整數ID存放到索引資料庫中,經過預處理(如去除資料庫中的懸擺指標)之後,設每個網頁的初
始PR值為1,通過以上的遞迴演算法計算每一個網頁的PageRank值,反復進行反覆運算,直至結果收斂。
2、           HITS演算法
1)        HITS基本原理
Hill Top 演算法的指導思想和PageRank 是一致的,即都通過反相連結的數量和品質來確定搜索結果的排序權重。但超連結的應用存在著許多的潛在的問題,如大量的連結是為了導航(如“點擊此按鈕返回主頁”)或付費廣告而創建的。而出於商業競爭的原因,儘管內容相關,有些網站又不會把超連結指向他們的競爭對手(如:Cisco公司不會將超連結指向Sun公司的主頁)。
HITS演算法他認為網頁的重要性應該依賴於用戶提出的查詢請求。而且對每一個網頁應該將其authority權重(由網頁的outlink決定)和hub權重(由網頁的inlink決定)分開來考慮,通過分析頁面之間的超連結結構,可以發現以下兩種類型的頁面:
中心網頁(hub):一個指向權威頁的超連結集合的Web頁
權威網頁(authority):一個被多個Hub頁指向的權威的Web頁
中心網頁(hub)

權威網頁(authority)
HITS演算法發現,在很多情況下,同一主題下的權威網頁(authority),如上例所述Cisco和SUN,之間並不存在相互的連結。所以,權威網頁(authority)通常都是通過中心網頁(hub)發生關聯的。
HITS演算法描述了權威網頁(authority)和中心網頁(hub)之間的一種依賴關係:一個好的中心網頁(hub)應該指向很多好的權威性網頁(authority),而一個好的權威性網頁(authority)應該被很多好的中心性網頁(hub)所指向。
2)        HITS的實現
HITS首先利用一個傳統的文本搜尋引擎(例如AltaVista)獲取一個與主題相關的網頁根集合(root set).然後向根集合中擴充那些指向根集合中網頁的網頁和根集合中網頁所指向的網頁,這樣就獲得了一個更大的基礎集合(base set).假設最終基礎集合中包含N 個網頁,那麼對於HITS 演算法來說,輸入資料就是一個N×N 的相鄰矩陣A,其中如果網頁i 存在一個連結到網頁j,則Aij=1,否則Aij=0。
HITS 演算法為每個網頁i 分配兩個度量值:中心度hi 和權威度ai.設向量a=(a1,a2, … ,aN)代表所有基礎集合中網頁的權威度,而向量h=(h1,h2, …,hN)則代表所有的中心度.最初,將這兩個向量均置為u=(1,1, … ,1).操作In(a)使向量a=ATh,而操作Out(h)使向量h=Aa.反復反覆運算上述兩個操作,每次反覆運算後對向量a 和h 範化,以保證其數值不會使計算溢出.Kleinberg 證明經過足夠的反覆運算次數,向量a 和h 將分別收斂於矩陣ATA 和AAT 的主特徵向量.通過以上過程可以看出,基礎集合中網頁的中心度和權威度從根本上是由基礎集合中的連結關係所決定的,更具體地說,是由矩陣ATA 和AAT 所決定
3、           其它演算法及歸類
連結分析演算法可以用來提高搜尋引擎的查詢效果,可以發現WWW上的重要的社區,可以分析某個網站的拓撲結構,聲望,分類等,可以用來實現文檔的自動分類等。歸根結底,能夠?明使用者在WWW海量的資訊裡面準確找到需要的資訊。這是一個正在迅速發展的研究領域。
PageRank和HITS是演算法中應用最廣的兩種,而其它一些類似的演算法有的處於研究階段,有的已經在具體的系統實現了。這些演算法大體可以分為3類,基於隨機漫遊模型的,比如PageRank,Repution演算法,基於Hub和Authority相互加強模型的,如HITS及其變種,基於概率模型的,如SALSA,PHITS,基於貝葉斯模型的,如貝葉斯演算法及其簡化版本。所有的演算法在實際應用中都結合傳統的內容分析技術進行了優化。一些實際的系統實現了某些演算法,並且獲得了很好的效果,Google實現了PageRank演算法,IBM Almaden Research Center 的Clever Project實現了ARC演算法,多倫多大學電腦系實現了一個原型系統TOPIC,來計算指定網頁有聲望的主題。
四、    PageRank與HITS演算法比較
顯而易見,兩者均是基於連結分析的搜尋引擎排序演算法,並且在演算法中二者均利用了特徵向量作為理論基礎和收斂性依據。但兩種演算法的不同點也非常明顯。
PageRank是對WWW的整體分析,通過模擬在WWW上的隨機遊動對每一個網頁計算其PageRank值。因此該演算法是獨立於使用者查詢的,可以對用戶要求產生快速的回應。HITS演算法是對WWW的局部分析,是根據特定的查詢產生不同的根集,然後計算網頁的Authority值和Hub值。該演算法是依賴於使用者查詢的,即時性差。
HITS演算法存在“主題漂移”的現象,如用戶在查詢“量子物理學”時,由於演算法中需要對初次檢索結果的根集擴充成基集,最終的檢索結果中會包含大量的有關“物理學”的網站。因此,HITS適合與寬主題的查詢,而PageRank則較好地克服了“主題漂移”的現象。
五、    應用WEB結構挖掘演算法提高網站價值
1、           選擇連結策略
在互聯網的海洋中,最重要的就是互聯互通,不被其他網站引用的網站就是“資訊孤島”。WEB結構挖掘引擎所有演算法都將網頁中的連結作為主要挖掘的物件,特別是實際應用中,大多數使用者都是使用基於PageRank演算法的Google, Yahoo,Baidu都搜尋引擎,因此可以採取以下幾種策略,提高網站的排名。
1)        廣泛連結策略
來自其他網站的任何反相連結都是有用的。當前常見的新搜尋引擎已經不再只是網站目錄的索引,而是更全面的網頁索引,所以無論來自其他網站任何地方的反相連結都是非常有價值的。
同時如果一個網頁只有大量的進入連結,而缺乏匯出連結,也會被搜尋引擎認為是沒有價值的網站。保證你的網站能夠幫助搜尋引擎更準確地判斷哪些是對使用者最有價值的資訊,也就是說如果你的網站只有外部反向連結而沒有匯出連結的話,也會對你的網站在搜索結果中的表現帶來負面影響。
2)        高品質連結策略
被PageRank高的網站引用能更快地提高PageRank數量只是關鍵因素之一,來自PageRank高的頁面的連結還能更快的提高被連結目標的PageRank
3)        無空連結策略
應當保持網站自身的健康,經常利用壞鏈檢查工具檢查網站中是否有死鏈。同時保持網頁內容/連結的穩定性和持久性:在搜尋引擎索引中網頁存在的歷史也是一個比較重要的因素,而且歷史比較久的網頁被連結的幾率越高。為了保證自己網頁能夠被比較持久的被其他網站的頁面引用,如果自己網頁中有連結更新時,最好能保留舊的頁面並做好連結轉向,以保持內容的連續性。
2、           構建友好的網站結構
有了合適的連結,就可以在演算法中取得一個比較理想的分值,但由於資料的挖掘過程中由機器Spider自動完成。因此還必須考慮讓引擎能完整的採集到所設計的連結,這就需要構建友好的網站結構。
1)        網站結構扁平化
網站目錄結構要扁平,因為每深一級目錄,PAGERANK降低1-2個檔次。假設首頁是3,其子可能目錄就是1了,更深可能就無法列入評級範圍了。
2)        表現和內容的分離
遵循w3c的規範,使用更規範的XHTML和XML作為顯示格式,JavaScript和CSS盡可能和網頁分離,一方面提高代碼重用度(也方便頁面緩存),另外一方面,由於有效內容占網頁長度的百分比高,也能提高相關關鍵字在頁面中的比重也增加了。因為挖掘引擎會更傾向於<title><h1><h2>……之間的內容,而不是正文。
3)        建立網站地圖
讓所有的頁面都有能夠快速入口:網站地圖,方便網頁爬蟲(spider)快速遍歷網站所有需要發佈的內容。如果首頁就是用Flash或圖片進入的話,無異於將搜尋引擎拒之門外,除了UI設計的用戶友好外,spider 友好也是非常重要的。
六、    結語
網路的結構挖掘技術已經是比較成熟的技術,特別是PageRank演算法已經應用到各大搜索網站中。所有的結構挖掘演算法都是基於網頁結構中超連結的分析。所不同的僅僅只是分析的效率改進和一些附加的分析條件。通過網站結構演算法的研究,可以有效地採取應對措施,提高網站在搜尋引擎中的排名。從而能網站可以有效的被客戶搜索。隨著電子商務的迅猛發展,企業應當儘早地重視這種被挖掘的技術應用,提高自身網站的價值。


參考文獻
〔 1 〕    何曉陽、吳強、吳治蓉,HITS 演算法與PageRank 演算法比較分析,情報雜誌2004 年第2 期
〔 2 〕    王曉宇、周傲,萬維網的連結結構分析及其應用綜述,軟體學報
〔 3 〕    Dan Thies,Google PageRank排名新演算法
〔 4 〕    Sergey Brin,Lawrence Page,Google的技術剖析,http:// www.51web.biz
〔 5 〕    曹軍,Google 的PageRank 技術剖析,情報雜誌2002 年第10 期
〔 6 〕    楊海東、張莉,PageRank 技術分析與搜尋引擎檢索效率研究,淮陰師範學院學報(自然科學版),第2 卷第3 期,2003 年8 月
〔 7 〕    吳軍、孫從梅,資料採擷技術在Web中的應用,內蒙古科技與經濟,2004年第12期
〔 8 〕    楊沅釗、吳薇、喻曉莉、楊國才,搜尋引擎排名改進演算法分析,《農業網路資訊》2005 年第2 期
〔 9 〕    陳灶芳黃國濤,用於互聯網資訊搜索系統的網路蜘蛛設計與實現,廣東科技
〔 10 〕          楊炳儒、李 岩、陳新中、王 霞,Web結構挖掘,計 算 機 工 程,2003年11月
〔 11 〕          WEB超鏈分析演算法縱覽
〔 12 〕          Web資料採擷的研究現狀及發展
〔 13 〕          陳莉,焦李成.Internet/Web資料採擷研究現狀及最新進展.西安電子科技大學學報(自然科學版).2001年2月第28卷第1期.
〔 14 〕          車東,如何提高網站在Google中的排名,http://www.zdnet.com.cn/
〔 15 〕          車東,提高網站在Google中的排名——面向搜尋引擎的網站設計
〔 16 〕          如何評價網站的人氣,http://www.zdnet.com.cn/developer/study/story/0,2000081626,39046113,00.htm
〔 17 〕          資料採擷未來研究方向及熱點,http://www.stcsm.gov.cn/fuwuzhinan/fb/bf/know/20010531-1.asp

2012年5月21日 星期一

Wordpress SEO - URL規範化設定


OK,這裡要講有關於 Wordpress的 URL網址規範化的設定方式,什麼是網址的規範化請參考這一篇文章的說明 網址的 URL規範化說明,在一系列相關的說明您都了解之後,再來做這個 wordpress的網址規範化會比較清楚一點,當然,如果你一點也不想知道原因和說明,你也可以直接照著做就可以了

以 Wordpress而言,其實有相關的外掛可以使用,你也可以參考這篇文章 Wordpress Permalink Redirect 重新導向URL外掛,主要的 URL規範化我們大致上可以分做以下幾個需求來討論

1. 包含www及不包含www的網域名稱被搜尋引擎視為不同的兩個網域的問題

2. 首頁 index.html指向的網址重複的問題

3. wordpress你雖然已經設定了固定的網址(可參考這篇文章 Wordpress SEO - 設定你的 permalink固定網址)但是你在網址列打入類似 http://domain.com/?p=1168 的網址還是會被訪客看到其網頁內容,分頁和分類的頁面也是如此,仍舊會有內容重覆性的問題

請注意喔,這裡是討論 URL的規範化並非所謂的最佳化,你不需要經過怎樣的審慎的思考或是評估的,你就是照著做就可以了

關於問題一及問題二你也可以透過修改你的 . htaccess檔案來做導向,詳情可以參考這篇文章 htaccess 如何做 301轉向(301 Redirect),不過說實在的,如果你的 wordpress實在也不是安裝在甚麼奇怪的地方,你只要安裝 Wordpress Permalink Redirect 重新導向URL外掛 就已經差不多問題都解決了,當然對於搜尋引擎的部分而言,你還可以利用 robot.txt的方式在一次的讓你的網頁被搜尋引擎爬行的更有規範

對於我而言,其實 wordpress blog的URL規範化問題更為複雜一點,如果你申請的主機就只是放你目前的這個 blog的話,其實你的 wordpress就直接安裝在根目錄下就好了,然後使用外掛解決一切問題 !!

因為我目前都還在實驗階段,因此雖然我有自己的固定 ip可以使用,但是我的主機上切了很多的子網域和 addon domain,對於我的各個網域之間的 URL規範化的問題會比較大一點 !!

WordPress SEO - robots.txt 詳細說明


這個網址是關於 robots.txt的說明和撰寫方法 A Standard for Robot Exclusion ,簡單的 Yahoo上面的說明也可以看這裡 Yahoo Help

robots.txt 檔案只有在位於最高層目錄並套用至網域中的所有目錄時才是有效的。 套用到您網站 (如果有的話) 的 robots.txt 檔案必須位於根目錄下,例如 : http://www.yourdomain.com/robots.txt,如果你沒有根目錄的存取權限,那你放到非根目錄下的話這個檔案不會發生任何的效果

那什麼是 robots.txt呢?? 其實它只是一個放在網站根目錄內,並且記錄了一些些文字的文本文件罷了。但它是如何在網站的優化中起到作用的呢? 簡單的說就是搜尋引擎會根據你的 robots.txt的內容去 [ 按表操作 ]。哪些內容應該要被搜尋引擎所搜索到,哪些內容你覺得不應該被搜索,你可以設定好你的 robots.txt檔案全部都由 robots.txt來做指揮。

那我們應該如何設置 robots.txt的內容呢? 以下說明請您參考

所有的記錄檔的語法都是以 <Field> “:” <value> 來做為一行, Field表示欄位的名稱,而冒號後面接著對這欄位的值

robots.txt檔名必須是小寫的,並且注意必須是文字檔而非 html格式,並且如果你是放在 Linux/Unix的主機上的,檔案的格式必須是遵循其格式撰寫,你可以使用一些文字編譯器編寫,要注意格式就對了,主要的語法大概如下

User-Agent: 後面的值表示是針對哪一個 bot的抓取行為,例如 :

User-Agent: *
表示針對所有的 Robot抓取行為

User-Agent: Slurp
表示針對Yahoo Robot的抓取行為,Slurp是Yahoo! crawler的名稱

Disallow: 表示在這個後面所寫的值的網址字串所得到的所有網址都不接受 bot抓取,例如 :

Disallow: /
表示根目錄下所有的網頁和目錄都不接受抓取

Disallow: /news
表示根目錄下 news延伸出來的所有目錄和網頁都不接受抓取,注意這個值的意義包括該字串所接得起來的所有可讀取的網頁和目錄,所以 Disallow: /news 代表底下的連結都是不接受抓取的 !!
http://yourdomain.com/news/index
http://yourdomain.com/newshistory/
http://yourname.com/newstoday.html
http://yourname.com/news.php

也就是說,Disallow後面開始接的就是你的網域名稱最後的那條反斜線為開始就對了,其他的撰寫規格需要注意的,大概只有每一個描述請獨立一行,其他沒甚麼注意的了

接下來舉幾個比較讓人明瞭的例子 :

User-Agent: Googlebot
Disallow: /mysite/test/
Disallow: /mysite/cgi-bin/post.cgi?action=reply
Disallow: /a

在這個例子中底下的內容都會禁止被 Google的 bot抓取 :
http://adomain.com/mysite/test/index.html
http://adomain.com/mysite/cgi-bin/post.cgi?action=reply&id=1
http://adomain.com/mysite/cgi-bin/post.cgi?action=replytome
http://adomain.com/abc.html

而底下的內容依然會被 Google的 bot抓取 :
http://adomain.com/mysite/test.html
http://adomain.com/mysite/cgi-bin/post.cgi?action=edit
http://adomain.com/mysite/cgi-bin/post.cgi
http://adomain.com/bbc.html

最後你可以用 allow做一個 disallow的反向處理例如
User-Agent: Googlebot
Disallow: /cgi-bin/
Allow: /cgi-bin/Ultimate.cgi
Allow: /cgi-bin/forumdisplay.cgi

在 http://adomain.com/cgi-bin/ 下的所有目錄和檔案都會禁止被 Google的 bot抓取,除了 http://adomain.com/cgi-bin/Ultimate.cgi 和 http://adomain.com/cgi-bin/forumdisplay.cgi 這兩個檔案之外

再例如 :

User-Agent: *
Disallow: /cgi-bin/

User-Agent: FreeFind
Disallow:

所有的搜尋引擎 bot都不可以抓取 http://adomain.com/cgi-bin/ 下的所有檔案和目錄,但是名叫 FreeFind的 bot例外,FreeFind robot可以抓取所有的檔案和目錄

請注意幾點差異

Disallow: /
表示全部禁止

Disallow:
表示沒有禁止

到這裡要多注意的是

1. 建議兩段的 user-agent: 之間請空一行

2. 後面寫的 URL 是有分大小寫的

最後介紹 [ * ]  代表所謂的萬用字元表示,[ $ ] 代表所謂的結尾符號 稱為媒合符號, Googlebot 可解譯一些模式媒合。這是標準模式的延伸,但注意並不是全部的 bot (漫遊器) 都能適用

若要攔截所包含問號 (?) 之 URL 的存取,您可以使用下列項目:
User-agent:* Disallow:/*?*

若要攔截以 .asp 結尾的 URL,您可以使用下列項目:
User-Agent:Googlebot Disallow:/*.asp$

關於這個 [ * ] 和 [ $ ]的問題,Google上有不錯的解說,你可以參考這裡  Google 如何檢索我的網站

OK,到這裡為止,如果你的 wordpress網站是放在根目錄下面的,那麼底下是我放在 cocolike.com根目錄下的建議適合 WordPress使用的設定 :

User-Agent: *
# disallow all files in these directories
Disallow: /dh_
Disallow: /cgi-bin/
Disallow: /files/
Disallow: /forum/
Disallow: /pictures/
Disallow: /usersguide/
Disallow: /utilities/
Disallow: /blog/wp-admin/
Disallow: /blog/wp-includes/
Disallow: /blog/ela
Disallow: /blog/contact
Disallow: /feed/
Disallow: /trackback/
Disallow: */feed$
Disallow: */trackback$
Disallow: *.htmlemail/
Disallow: *.htmlprint/

User-Agent: Googlebot
# disallow all files ending with these extensions
Disallow: /*.php$
Disallow: /*.js$
Disallow: /*.inc$
Disallow: /*.css$
Disallow: /*.gz$
Disallow: /*.wmv$
Disallow: /*.cgi$
Disallow: /*.xhtml$

# disallow all files with ? in url
Disallow: /*?*

# disable duggmirror
User-Agent: duggmirror
Disallow: /
# allow google image bot to search all images
User-Agent: Googlebot-Image
Disallow:
Allow: /*

# allow adsense bot on entire site
User-Agent: Mediapartners-Google*
Disallow:
Allow: /*

你可以把它複製,然後另存為 robots.txt並且放在你網域的根目錄下就行了。請注意我的目錄結構,我的網域名稱是 cocolike.com,我的 wordpress是放到 blog的目錄下的,灰字的是我的一些不想被抓取的子目錄,因此你請自行修改目錄的結構,若沒有安裝 wp-email和 wp-print這兩個外掛,底下兩行也不須要

Disallow: *.htmlemail/
Disallow: *.htmlprint/

# disallow all files with ? in url
Disallow: /*?*

而上面的那句是讓搜尋引擎不去搜索所有帶有“?”的網頁。如果你的 WordPress的連結是預設有問號的那一種,請把這一行刪掉。

讓搜尋引擎在搜索我們的網站時會有更好的效率,避免了浪費時間去搜索一些無意義的目錄,包括實體的目錄,例如 wp-admin,包括你不想讓 bot讀的虛擬的目錄 contact,或類似 feed,trackback等等,甚至一些外掛造成的目錄,我們也能透過 robots.txt更好的讓自己的網站被收錄。所以,如果你的 WordPress還沒有 robots.txt,趕快設置一個吧!

最後我講一下我的感想,要了解甚麼是 Google sitemap和 robots.txt我想對一些人有一定的難度,一開始我想就照著做就好了,也不要態探究原理,等有時間有力氣再多做探討其實就夠了,但是如果你的 blog並不是自己擁有的,根目錄也不是你可以存取的話,那這個部分可能就沒有辦法實作

你可以照自己研究的方法來操作,我也是邊研究邊試驗,我是習慣自己都操作一遍並研究沒問題後才會把心得PO出來,我的方式是邊改一些東西,邊到 Google 網站管理員工具 的介面去看結果,看有甚麼心得 !!

如果我有更多的心得的時候會再修改這些文章的,Thanks !!

Wordpress SEO - 安裝 Wordpress之前的 SEO


甚麼是 SEO,簡單的說就是“Search Engine Optimization”,也就是所謂的搜尋引擎最佳化。如何讓你的 wordpress網站可以讓搜尋引擎 Google,Yahoo等等覺得友善,可以更快速而且更確定使用者是要搜尋你的部落格網站呢 ? 網路上有很多的說法和解釋,當然相關的文章也是多到一個不行,看到眼都花了,我能做的只是遵循通用的說法來實作

先說明一下,我對我的網站的 SEO順序會是先將這個 blog實驗一次,然後看看討論區的狀況,最後會應用在我的一些其他的網站(如果我有完成的話),我的基礎來自於一些網站的 SEO文章,最後再依照著這兩篇文章的基礎來實作, Google 網站排名最佳化聖經(上) 和 Google 網站排名最佳化聖經(下) ,你可以先看看這兩篇文章

對一些不同的說法和差異我也會感到疑惑,但是我依照我自己認為對的做法,試著將我的 wordpress的 blog做所謂的 SEO

當一安裝好 wordpress之後,因為我很興奮的開始找尋我喜歡的 wrdpress theme主題模板,然後再開始裝一些我覺得需要的 plugin外掛,我總是很快開始寫自己的文章,或是引用別人的文章來充我的版面,忽略了很多最佳化的原則和做法,所以等我的文章多一點的時候,我才又回頭開始改之前的東西作所謂的 SEO,浪費不少的時間,我建議各位還是先了解 SEO的一些基本,不要一股腦兒的開始寫你的 blog

SEO其實不算容易,我想說明的是一些你可以幫你自己的 blog作的事情,下面比較簡單的內容,可以在安裝 wordpress前多一些思考,希望有所幫助:

對你自己的 wordpress blog來說

第1. 請取一個很容易建立品牌的 網域名稱,你須要的是 Google.com,而不是所謂的”關鍵詞.com”。充斥關鍵詞的網域名稱應該被捨棄,易於建立品牌的和容易辨識的網域名稱才是最好的。

第2. 網站設計越簡單越好,使你的網站 保持最簡單化,看起來專業化就可以了。向 Google自己學習吧,看看他的首頁,簡單的沒辦法再簡單了。因此安裝 wordpress會建議盡量使用 2欄式的模版,這是有些人的論調,我們可以在網路上找到很多很好用又漂亮的模板,2欄,3欄的,甚至4欄的。搜尋引擎對你的網站的抓取方式一般都是從左到右,由上而下的。如果你的左側欄有太多無用的東西,或者是很複雜的內容,那麼搜尋引擎會找到太多如你的連結,RSS等等的東西

我的建議是如果你看不懂板模的程式碼,第一,建議你使用一些已經將有助於 SEO等等外掛的程式碼,都內建並改好的主題模板,省去你再修改的問題,第二,雖然側邊欄在左邊不代表在程式碼中就是在左邊,但是你可以多找找並且使用側邊欄在右邊的主題模板

第3. 網頁越小越好,最好保持在 15K以下。

第4. 首頁的重要性,搜尋引擎在抓取你的 blog的時候當然會從你的首頁開始,然後依序尋找網頁中所有的 link連結連到的網頁,依序搜尋定且給予判斷,所以不要給搜尋引擎一個複雜且難以閱讀的首頁,盡量告訴搜尋引擎妳的網頁內容的重點或描述是甚麼,對搜尋引擎友善相對的也是讓搜尋引擎對你的網站友善

所以,為了更好的 SEO,我們會把一些重要的欄目,如文章的分類列表放置在首頁。你還可以把你認為值得推薦或者有價值的文章列表同樣放置在網站的首頁上。

很多時候有些內容和連結還是必要的(廣告??功能性的 link),所以就是盡量吧,我們會說

會讓你的網頁不友善的外掛就不要安裝了,例如:  Headline Images 這個外掛可以讓你的文章標題用美麗的圖案顯示,效果真的很棒,我也很喜歡,但是它會拖慢你網頁的速度為一個原因,此外它也會將你的文章的標題從 <h2>標籤變成 <img>的標籤,這不會是一件對於網站 SEO的好事情,所以類似這樣的外掛還是捨棄吧

告訴搜尋引擎甚麼是重點,建議文章中的一些標籤,例如側邊欄的 H2和 H3標題可以用粗體的方式來顯示,文章的標題 H1或 H2也最好用粗體的,多主動告訴搜尋引擎哪些內容就是妳這個網頁的重點,不要讓搜尋引擎搞了半天找不到你的網頁內容的重點在哪裡,只是不停的搜尋到一堆的對你網站沒有太大幫助的連結和圖片

第5. 網站設計的重要性,當訪客第一次點擊你的網站時,首先他就會對你的網站的樣式產生第一印象。注意,這是在瀏覽你的精彩文章之前就有的。俗話說 [ 人要衣裝 ] ,在個人網站上也同樣道理。

綜合以上,所以選擇一款合適的主題模板相當的重要,美觀,輕巧,易改,重點顯示優良,一個好的模板也直接幫你做了很多的 SEO。

第6. 文章的原創性,在網路上永遠都是新奇的東西,大家都希望能看到更多新鮮原創的內容。如果你文章的內容只是靠複製-粘貼這種模式,要想吸引別人就很難,並且不要全文引用或是轉貼別的網站的文章,當搜尋引擎發現有 2個網頁的文章內容相同或是相近的時候,它會依照他資料庫的紀錄給與其他文章內容一樣的網站一個標記,用來表示這個內容只是另一個內容的備份內容或是複製內容,進而對這個內容的網頁執行處分

當然,被妳引用文章的網站可能會很無辜的被搜尋引擎標上這個標示,所以不要全文引用別人的文章,要引用請至少在文章開頭,中間,後面,都加上自己另外寫的文字,至少多寫一些自己的東西,避免因為重覆內容而被搜尋引擎處分

第7. 只裝一個 Tag外掛,不要讓你的網頁變得太複雜,過多不同的 Tag會讓搜尋引擎困惑,對你的網站不會更友善,簡單易懂不複雜,是給搜尋引擎最好的一個內容網頁

這是在你安裝好 wordpress或是安裝之前的一些觀念,很簡單不是嗎??

所以囉,先挑個好的模版吧,再想想以上的基本原則,不要一衝動就開始寫一大堆文章 !!

Wordpress SEO - 開始寫文章前的一些工具和步驟


前兩篇文章跟大家說明過了在開始寫文章之前的幾個想法和步驟,同時也是我的 Wordpress的 Blog為了 SEO所做的步驟,但是比較可惜的是,我是渾渾厄厄的開站,過了2個月左右,才注意到 SEO 這回事,然後才又辛苦的回頭做這些事情,效果會不會打折扣,我想應該還是有一定程度上的差別的

但不論如何,您可以先看看這兩篇寫在之前的 SEO文章,Wordpress SEO - 安裝 Wordpress之前的 SEO 及 Wordpress SEO - 安裝 Wordpress完成後的 8步驟,大致上小弟我整理過後對 Wordpress的 SEO就是這麼做,照著做就也不會錯到哪裡,但是回歸基本面,Blog最重要的一點還是網站的內容,原創性,和被信任度,其他的 SEO做法真的也倒還是其次的

OK,到目為止所有的東西都安裝好並且修改好了之後,開始寫文章之前,建議可以做一做下列的 5個簡單的步驟,可以讓您的 Blog的 SEO更加有效果一點,提供給各位參考

如下

1 準備工作和建立內容

請你仔細想想要寫甚麼內容,多準備一些文章的題材後再開始撰寫你的文章,這裡的想好你準備有或是要寫甚麼內容是指你必須要有每天一篇文章的打算,如果辦不到,也要有每周固定幾天發文的打算和設定

不論文章的分類和主題為何,唯一的一個重點還是文章的原創性,擁有屬於自己的文章並且吸引這些拜訪你的網站的訪客可以得到他們想要的內容,是唯一的正規道路

2 主題性的分類目錄

幾乎每一個行業都它自己的分類目錄,去提交到這些分類目錄當中,雖然你的 Blog可能還沒有任何的內容,但是沒有關係,你可以先去提交你的網站到這些分類目錄當中

Yahoo的分類是要錢的,要付費的 yahoo 網站登錄,不付費就不會被丟到分類裡面,如果沒預算就等 yahoo的蜘蛛爬到你的網頁,但是在這裡還是必須說明一點,因為花錢的分類目錄是人工作業,程式再怎麼的精明,它的判斷客觀性和準確性還是不會比人工的好,這裡的意思是,有名且權威的網站分類目錄,是被搜尋引擎肯定且加分的內容,意即如果你付了錢而且被同意放到那個目錄下,對你的網站被搜尋的排名是有加分作用的

免費的目錄提交網站因為近年來被有心的利用頻率篇高,也許公正性及 SEO的比重也逐漸降低,因此更能顯示出 Yahoo所謂的人工付費的目錄提交的可信度,但不論如何,沒錢的話也可以試試看沒錢的提交方法,也許不會太有用,但總是提交之後在任其自然發展囉,Google的目錄在此: Google開放目錄

3 記錄和跟蹤

如果你用的是免費的虛擬主機空間,那這部分我想沒辦法吧,如果你的主機商是付費的,沒有好的網站統計軟體或工具,那還是沒辦法吧,因為都是一次繳半年或是一年的錢,那怎麼辦呢?? 你可以用 Google管理員工具來檢視和紀錄的,也順便學習相關的知識和 SEO的原則,當然你也可以去 yahoo 網站管理工具或是一些免費的網路工具看看,看個人的喜愛吧

個人建議寫文章前就可以去申請一個 Google管理員工具,往後可以邊寫文章邊做一些測試和修正,你可以從這個工具中獲得成長,並且瞭解到許多有關網站 SEO的一些驗證,當然我們還建議去 Google Analytics也申請一個帳號,在這裡你可以看到你的訪客是從哪裡來的,或是用哪些關鍵字引導來的,一邊撰寫你的 Blog,一邊使用這兩個工具讓你得到相關的知識並且成長

4 開通網站及網站提交

最之前提過了,最好你有自己的單獨的 IP地址,確保你的網站可以被搜尋引擎蜘蛛所索引到。所有的網頁都應該連向你網站裡其他的網頁。所有的網頁距離主頁都不應該超過兩次以上的點擊。所有內容頁也都應該連結回主頁。一個在所有網頁上都存在的選單系統,都應該連結到你的網站上的主要部分。

當你有內容或是還沒有內容,其實都可以去雅虎或是 Google的網站免費提交,但是不要抱太大希望,也許可以讓你的網頁更快的被搜尋引擎蜘蛛所索引到。把主頁提交到 Google等搜尋引擎後,接下來就忘了這件事。開始寫文章吧 !!

很簡單的一些小動作,還是建議您不要忘了,而一些使用工具我會在往後的文章說明它的使用方式

接著是寫文章時該注意到的一些 SEO !!

Wordpress SEO - 安裝 Wordpress完成後的 8步驟


我們接著看看對於 wordpress SEO 搜尋引擎最佳化的說明有哪些論點,也就是當你架設了一個 Blog之後,你希望更多的訪客或讀者來到妳的 blog看你的文章和分享,但是你應該如何做好這件事情,讓你的網站在茫茫大海中被搜尋引擎找到,進而讓訪客點選進來參觀妳的網站
這裡的前提是妳已經安裝好了你的 Wordpress,並且選了一個還不錯的主題當你的板模,還有了一些基本觀念,外掛裝了多少可以不用先在意,但在請在發表文章之前把下面交代的事情都先做好再說
當然我的第一個步驟還是前一篇文章所提的,找到一個好用並且適合的主題模板,申請了一個好的 Domain name,也知道我的 blog要寫甚麼東西,接著就是下面的事情吧,一定要做 !!
1、設定你的固定網址
使用固定網址的結構,這是你發表文章之前要注意的第一件事情。妳可以登錄到 WordPress管理介面的控制面板,找到選項,選擇固定網址子選單,然候選擇一種永久連結的結構,或者是自己定義一種,最好是設置成靜態頁面的種類(有副檔名 .html而且不要有問號),以利搜尋引擎搜尋引擎收錄。
我們的建議是使用這個 /%postname%.html
請參考這兩篇文章並且確實執行
Wordpress SEO - 設定你的 permalink固定網址
Wordpress Permalinks Migration 更新你的固定網址
2、URL 規範化
讓網站的 URL網址唯一化,不然會造成複製的內容而影響搜尋引擎的排名。具體的設定以及外掛應用同樣請參考以下文章並且確實執行,另外,Wordpress 2.3以後的版本解決了大部分的問題,也許你可以不使用其他的外掛就做到 URL規範化,可參考 有關 Wordpress 2.3你應該知道的10件事(上),當然主網域如果不是 wordpress,你還是可以多了解一下原理
Wordpress SEO - URL規範化設定
Wordpress Permalink Redirect 重新導向URL外掛
3、 title 的優化
title 就是一般顯示在瀏覽器標題欄的文字,在對 SEO的優化中,Title Tags是最直接有效的,它就是你文章的標題。所以在決定寫一篇文章前,必需對標題的字眼著重考慮,以使搜索引擎能方便的找到你的文章,理解你文章的內容。一些技巧也許往後再談,但是你必須先將你的 wordpress可以先有 title優化的修正。
底下這篇文章是有關 Title的部分,你可以和這篇文章的外掛功能 Wordpress SEO外掛 - All in One SEO Pack 互相取一些優點後加以整合
WordPress 下網頁Title優化的實作方式
4、 Meta 的優化
雖然 meta屬性在搜尋引擎中的作用越來越小,但添加了 meta訊息總比沒有添加來的好。具体 meta的內容操作可以參考以下文章,原本的 Wordpress SEO Meta Editor Advanced 自訂每一頁的meta 已經被我捨棄,改為安裝底下說明的此外掛可以省很多事
Wordpress SEO外掛 - All in One SEO Pack
5、使用Tag
Tag逐漸在網路上變得越來越重要,使用 Tag可以讓文章之間相互關連,還可以讓搜尋引擎更好的發現妳的 blog。推荐使用 Ultimate Tag Warrior外掛
Wordpress 2.3之後的版本因為有了自己的 Tags,你可以去找尋一下其他更好的 Tags解決方案,我的是用 wordpress 2.2.3版本的,請參考底下的文章說明囉
Wordpress 標籤及標籤雲外掛 Ultimate Tag Warrior
6、相關文章連結
在文章的後面添加相關文章的連結。對於讀者來說,他能夠盡可能的獲得他想要的內容;對 blog主人來說,可以獲得盡可能的大的流量。一舉數得,何樂而不為!你可以使用 WordPress Related posts外掛獲得此功能,使用說明可見 WordPress Related Posts 相關文章顯示外掛
提升網站設計對訪客的友好態度。例如在瀏覽單篇文章的時候,竟然找不到繼續瀏覽下一篇的按鈕?? 那我怎樣做,我只有離開了。這是一個例子,網站的功能必需從訪客角度進行設計,從簡單的導航的設計,再到其它功能,對 Google來說,基於共同內容的相互連結對在你的網站之內 分享PR是非常重要的。
SO。嘗試修改一些程式碼,讓你的文章可以有更多的相互連結
7、建立一個 Blog的 sitemap
Google有一個針對網站站長的特色內容管理工具,就是 Sitemaps,這可以讓 Google盡可能快而準確的的索引你的 blog,判斷 blog內容的重要程度。推荐使用外掛 Google Sitemaps Generator,此外,你還可以使用 Sitemap Generator Plugin外掛來建立一個頁面,顯示所有的站內文章,詳細說明請依序閱讀底下文章並確實執行
Wordpress - Google XML Sitemaps 外掛
Wordpress - Google XML Sitemaps外掛詳細說明(上)
Wordpress - Google XML Sitemaps外掛詳細說明(下)
wordpress 外掛Sitemap Generator Plugin
8、設置一個合理的 robots.txt
在網站下設置一個合理 robots.txt ,可以帶來很多好處。一來可以讓搜尋引擎按你的要求合理的收錄你的 blog內容,二來也可以防止因為收錄重複內容而降低你的 blog文章在搜尋引擎的權重,三來,還可以提升 blog的訪問量。
詳細的 robots.txt請參考
WordPress SEO - robots.txt 詳細說明
好了,都照著做會快一點,要把所有的東西搞清楚的話時間會花的久一點,如果要搞懂,到 Google打入 seo會出現一堆網站和文章,夠你看的,加油吧 !!
接著會有寫文章前該做的事和寫文章時該做的事的說明,能為自己的 wordpress的 seo主動性步驟應該就差不多說明完了

Joomla! SEO必須避免的五個失誤


Joomla!本身自帶的SEO功能已經很不錯,一旦安裝,很快就能被搜尋引擎收錄。並且據說長期運行後效果強過WordPress,因此Joomla!建造Blog也是很不錯的。不過,各位站長對於搜尋引擎優化的追求總是無止境的。有些人可能會自己動手,試圖加強對Joomla!SEO。不過,你是否會無意中犯下一些錯誤從而對網站SEO產生了負面影響?
本文將列出5種最不應該犯的失誤,希望大家在進行SEO時注意避免。
SEOmoz網站上列出的搜索排名影響因數列表中,全世界多位經驗豐富的SEO專家一起評出了5個最壞的因數,即五種最不應該有的失誤。它們是:
1.     Server is Often Inaccessible to Bots
2.     Content Very Similar or Duplicate of Existing Content in the Index
3.     External Links to Low Quality/Spam Sites
4.     Duplicate Title/Meta Tags on Many Pages
5.     Overuse of Targeted Keywords (Stuffing/Spamming)
下面逐條解釋一下:
1、機器人經常無法訪問你的網站
眾所周知,各大搜尋引擎都是通過機器人程式(Bot),也叫蜘蛛Spider)來索引分佈在全世界各地伺服器上的網頁的。這些機器人也是有脾氣的,如果你的網站伺服器特別慢,它們就不大願意去訪問;甚至有些人購買了劣質間商(空間提供商的簡稱)的垃圾空間,可能三天兩頭網站就打不開,伺服器總是死機,或者被DDOS攻擊癱瘓,那麼這些機器人可能會很長時間都不去你的網站——一個打不開的網站,誰喜歡?
解決方法
請先瞭解如何選擇適合Joomla的伺服器空間,然後挑選一個性價比最高的來建站。如果你的資金有限,我推薦你選用國外的大容量空 ,如Lunarpages.com
2、有重複的文章內容
這是Joomla! 1.0.x 版本的一個bug。在全新安裝之後,Joomla! 1.0.x 會預設開啟文章的PDFPrint按鈕,這實際上是給文章增加了兩份重複內容。Google會自動探測到這些重複內容並給予比較差的評價,因此會導致排名下降。
解決方法
進入Joomla! 1.0.x後臺的全域設置Global Configuration),點擊內容Content)標籤,將PDFPrint按鈕都禁用。
3、連結到低品質/垃圾網站
所謂物以類聚,網站也是如此。如果你的網站上的友情連結總是連結到一些無名小站,或者已經被Google列入黑名單的垃圾網站,那麼你就會被搜尋引擎認為是這些次品網站的幫兇或者盟友,你就別指望有好的評價了。
解決方法
慎重選擇友情連結,儘量連結到PR值較高的、搜索排名比較靠前的網站。不要連結到某些廣告聯盟或者成人網站。
對這一點我深有體會。本站為了推廣Joomla的應用,曾經鼓勵各位網友把自己的Joomla網站發佈到本站的酷站欄目,因為本站的Page Rank已經達到5了。這樣做的結果是:他們的網站都連結到了我這個高品質網站,而我自己的排名卻被拖下來了。
4、多個頁面擁有重複的 Title 或者 Meta 內容
Joomla! 1.0.x版本中,全新安裝後就有這個bug。因為在網站的默認設置中已經填寫了Metadata內容,而這些關鍵字將被應用到網站的每一個頁面,因此造成幾乎所有頁面的Metadata部分都有重複的關鍵字。即使你在撰寫文章時,針對每一篇文章在編輯視窗右側的Metadata中設置了獨立的關鍵字,網站預設的Metadata 也會寫入該頁面。搜尋引擎對這種情況比較反感,因此會大大影響你的網站排名。
如果你在Google中搜索:
site:www.你的功能變數名稱.com
所得到的結果可能是:在網頁描述部分永遠不變,因為那是Joomla!Metadata中已經設置好的。然而搜尋引擎喜歡經常更新的網站,這樣的設置只能讓它們覺得你的網站經常無人管理,那你還能指望搜索結果將你的網站向前排名嗎?
解決方法
進入Joomla! 1.0.x 全域設置,點擊“[[Metadata]]”標籤,將描述(Meta Description)和關鍵字(Meta Keywords)都清空。然後,在撰寫文章時,為每一個頁面添加獨有的描述和關鍵字。
5、濫用關鍵字
5年前,多數搜尋引擎會統計頁面中某個詞彙的出現次數,如果頻繁出現,那麼就會認為該頁面對於該詞彙是很好的搜索結果。於是,當時有人發明了一種作弊方法,就是在頁面中反復出現某個詞,甚至可能將網上賺錢或者美女圖片這個詞重複200遍,然後放在文章末尾某段空白中,並且將文字顏色設置為與背景相同,這樣,訪客在前臺看不到這些重複了的文字,但是搜尋引擎的機器人能看到。於是排名就上去了。
這個方法很快就不靈了。因為Google及其他搜尋引擎很快就發現了這個弊端,他們更改了計算方法,如果某個詞彙出現的頻率特別高,就會被認為是故意作弊,從而導致評分降低。
解決方法
魯迅說過:搗鬼有術,也有效,然而有限。因此,我提醒各位站長要有一個正確的心態。用真誠的付出來獲得回報,而不是挖空心思去搗鬼。
最後,我向各位推薦一個非常棒的補丁程式,是由Joomlatwork開發的Joomla SEF patch,這個補丁可以對Joomla! 1.0.x 版本的SEO增強很多,同時避免一些內在bug。請對照你使用的Joomla版本下載相應的補丁: