本文參考資料為 Things You Should Do After Installing WordPress, 已取得原作者 Amit Agarwal 授權。

在你安裝完 WordPress 後,你可能會調整一些設定來最佳化 WordPress 效能和安全性。這裡有一份安裝完 WordPress 後你應該做的最佳化指南。安裝 WordPress 只需要兩個簡單的步驟,但你可能要調整一些預設的設定值,來改善、最佳化 WordPress 網站的效能和增強安全性。
如何最佳化你的 WordPress 網站?
這些建議只針對自架的 WordPress 網站,不適用於 WordPress.com。另外,我假設你是在 Apache 上架設 WordPress 的。讓我們開始吧:
1. 變更預設的媒體上傳目錄
WordPress 預設會將你的所有圖片、文件和其他上傳的檔案儲存於 wp-content/uploads 目錄。
將你的圖片儲存於 WordPress 目錄之外是個不錯的作法,最好在一個子網域底下。這有幾個優點,你的圖片網址會更加簡短,每日的 WordPress 備份會更有彈性,而且最重要的是,從不同的伺服器載入圖片將有助於改善網頁開啟速度。
WordPress 3.5(或更新版本)已經沒有提供變更預設媒體上傳目錄的選項,但可以使用外掛來開啟這項設定。同時取消選擇該選項–“將我所上傳的檔案安排為以「月」及「年」為基準的目錄”。
2. 從你的 WordPress 網站移除不必要的 meta-data
如果你檢視過你的 WordPress 網站原始碼,你可以發現有些 meta 標籤不是必要的。例如,你使用的 WordPress 版本會顯示於原始碼。
<meta name="generator" content="WordPress 3.5.1" />
這項資訊對於一些尋找使用舊版或低安全性版本 WordPress 網站攻擊的黑客來說是個不錯的提示。從你的 WordPress 原始碼完整移除掉版本號和其他非必要的 meta-data,只要把把這段程式碼加入佈景主題的 functions.php 檔案即可。
remove_action( 'wp_head', 'wp_generator' ) ;
remove_action( 'wp_head', 'wlwmanifest_link' ) ;
remove_action( 'wp_head', 'rsd_link' ) ;
WLW-Manifest 函式(第二行)是 Windows Live Writer 用於下載你 WordPress 部落格的樣式、佈景主題。Windows Live Writer 使用者不使用即時預覽功能,故可以將此函式關閉。
3. 防止使用者直接瀏覽你的 WordPress 目錄結構
如果你不希望任何人直接瀏覽你 WordPress 檔案和資料夾清單,將以下代碼加入你 WordPress 內現有的 .htaccess 檔案中。
Options All -Indexes
並確認 wp-content/themes 和 wp-content/plugins 目錄下包含空白的 index.php 檔案。
4. 停用 WordPress 迴響的 HTML 功能
WordPress 的迴響留言框是一個小型的 HTML 編輯器,留言者可以使用一些標準的 HTML 語法像是 <b>、<a>、<i> 來為自己的留言加入格式。他們甚至能夠在留言裡加入超連結。如果你想在 WordPress 迴響裡停用 HTML 功能,只要把以下程式碼加入你的 functions.php 檔案即可。
add_filter( 'pre_comment_content', 'wp_specialchars' );
5. 關閉 WordPress 文章版本功能
WordPress 內建一個實用的文章版本功能,讓你可以追蹤變化,以便隨時回復到文章先前的版本。文章版本也會增加 WordPress 裡 wp_posts 資料表的大小,因為每次修訂都會增加新的內容。
要停用 WordPress 裡文章版本的功能,開啟你 WordPress 目錄下的 wp-config.php 然後加入以下程式碼:
define( 'WP_POST_REVISIONS', false);
另外,如果你想保留文章版本功能,你可以只限制 WordPress 儲存於 MySQL 資料庫裡的修訂數,在 wp-config.php 加入以下程式碼:(3 為要保留的文章版本數量)
define( 'WP_POST_REVISIONS', 3);
6. 變更文章自動儲存的時間間隔
當你在 WordPress 內建的編輯器編輯部落格文章時,它會自動儲存你的草稿,當瀏覽器不幸當掉時,有助於你快速恢復先前輸入的內容。草稿預設會每分鐘自動儲存,但你可以加入以下程式碼來將自動儲存的時間間隔變更為 120 秒(或 2 分鐘):
define( 'AUTOSAVE_INTERVAL', 120 );
7. 隱藏其他 WordPress Feeds 網址
你的 WordPress 包含多個 RSS Feeds–部落格、文章、迴響、分類、彙整等頁面皆有 feeds–它們會使用 <link> 標籤顯示於你部落格的原始碼內。
如果你只想宣傳你的主要 RSS Feeds,那將以下程式碼加入你的 functions.php 檔案裡:
remove_action( 'wp_head', 'feed_links', 2 );
remove_action( 'wp_head', 'feed_links_extra', 3 );
8. 將所有 Feeds 重新導向至你的主要 RSS Feed
在上一個步驟,我們只有從網頁內移除掉不必要的 RSS Feeds,但這些 RSS Feeds 依然存在。如果你想要單獨使用一個 RSS Feed 例如 FeedBurner,並停用所有其他的 Feeds,將以下程式碼加入你的 .htaccess 檔案。記得把 feed URL 替換為你自己的網址。
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} !^.*(FeedBurner|FeedValidator) [NC]
RewriteRule ^feed/?.*$ https://feeds.freegroup.org/freegroup [L,NC,R=301]
</IfModule>
9. 隱藏 WordPress 登入畫面的錯誤訊息
當你輸入一個不存在的使用者名稱,或是錯誤密碼來登入 WordPress 時,它會顯示相當詳細的錯誤訊息,來告訴你使用者名稱錯誤,或是密碼錯誤,這是很糟糕的。
將以下程式碼加入 functions.php 檔案來隱藏所有登入相關的錯誤提示。
function no_errors_please(){
return 'GET OFF MY LAWN !! RIGHT NOW !!';
}
add_filter( 'login_errors', 'no_errors_please' );
10. 啟用二階段驗證功能
強烈建議開啟二階段驗證。如果有人取得了你 WordPress 帳號密碼,他們仍需要你的手機才能夠登入 WordPress 控制台。
不像 Dropbox 或 Google,WordPress 並沒有內建二階段驗證功能,但你可以使用外掛來將它加入。Authy 是相當受歡迎的二階段驗證外掛,雖然我喜歡的是 Authenticator,因為它可以搭配 Google 官方的 Authenticator 應用程式使用。
11. 變更固定網址結構
不要使用 WordPress 預設的固定網址結構,因為這不利於 SEO。
前往 WordPress 控制台的設定 -> 固定網址來變更你的 WordPress 固定網址結構。從搜尋引擎最佳化及效能來看,建議使用的結構為:
/%post_id%/%postname%
12. 加入遺失的 favicon 及 touch icons
你的 WordPress 佈景主題可能沒有包含網站圖示(favicon.ico)或 Apple touch icons,但網頁瀏覽器和 RSS 閱讀器仍然可能向你的伺服器要求這些檔案。最好的辦法是提供這些檔案,而不是回傳 404 錯誤。
在你的網站根目錄放置一個 16×16 的 favicon.ico 和 144×144 的 apple-touch.png 檔案。然後在你的 .htaccess 加入以下程式碼來重新檔向所有 Apple touch icon 的請求至特定檔案。
RedirectMatch 301 /apple-touch-icon(.*)?.png https://example.com/apple-touch.png
13. 禁止索引 WordPress 程式
你希望 Google 和其他搜尋引擎可以抓取你的部落格文章,但不會希望索引你用於 WordPress、外掛和佈景主題的程式。
開啟你 WordPress 主目錄底下的 robots.txt 並加入以下代碼,來阻止搜尋引擎索引 WordPress 後台的元件。
User-agent: *
Disallow: /wp-admin/
Disallow: /wp-includes/
Disallow: /wp-content/plugins/
Disallow: /wp-content/themes/
Disallow: /feed/
Disallow: */feed/
14. 把 Admin 權限設為讀者
如果你的 WordPress 帳號是”admin”,建立一個新的使用者名稱並給他系統管理員權限。接著登出 WordPress,以新的帳號登入,將 “admin” 權限從系統管理員設定為讀者。
你也許可以考慮把帳號 “admin” 刪除,然後將現有的任何文章、頁面轉移給新帳號。這對於安全性來說是相當重要的一個步驟,因為我們不希望讓任何人有機會猜測具有 WordPress 管理員權限的使用者名稱。
15. 對搜尋引擎隱藏你的 XML Sitemaps
XML Sitemaps 可以幫助搜尋引擎更好地抓取你的網站內容,但你不會希望搜尋引擎在搜尋結果頁面顯示你的網站地圖。
將以下程式碼加入你的 .htaccess 來防止 XML Sitemals 被搜尋引擎索引:
<IfModule mod_rewrite.c>
<Files sitemap.xml>
Header set X-Robots-Tag "noindex"
</Files>
</IfModule>
16. 不要使用 WordPress 內建的搜尋功能
確認你的網站搜尋功能是由 Google 自訂搜尋所提供,不要使用 WordPress 內建的搜尋功能。
WordPress 搜尋通常會傳回不相關的結果,另一個好處是這麼做能降低你的 WordPress 伺服器、資料庫負載,因為搜尋查詢將透過 Google 來進行處理。
另外,如果你打算繼續使用 WordPress 內建的搜尋功能,那就使用 Nice Search 外掛吧!它能為你的 WordPress 搜尋頁面建立更好的固定網址(/search/tutorials vs /s?tutorials)。
17. 以密碼保護你的 wp-admin 目錄
你可以簡單地為 WordPress 增加額外的安全防護,例如以密碼來保護 wp-admin 目錄。你必須要記住兩組密碼才能夠登入至 WordPress – 包括你的 WordPress 密碼,以及保護 wp-admin 目錄的密碼。
18. 在 Google 分析記錄 404 錯誤
404 錯誤會錯失使用者進入網站的機會。你可以使用 Google 分析來記錄你的 404 錯誤,包含從何而來等細節資料。
將以下程式碼加入你的 Google 分析追蹤代碼,於 _gaq.push 函式之後:
<? if (is_404()) { ?>
_gaq.push(['_trackEvent', '404', document.location.pathname + document.location.search, document.referrer, 0, true]);
<? }
19. 刪除所有沒用到的佈景主題和 WordPress 外掛
未使用的外掛和佈景主題不會影響你的 WordPress 網站效能,但我們的目標是盡可能減少伺服器上可執行的程式碼。停用並刪除所有你不需要的東西。
20. 停止 WordPress 猜測網址功能
WordPress 有一個會猜測網址的奇怪功能,且在大多數情況下會造成錯誤。讓我解釋一下,如果一位訪客要存取 freegroup.org/hello 網址,但這個頁面並不存在,WordPress 可能會把使用者重新導向至 freegroup.org/hello-world 只因為這網址有一些常用詞彙。
如果你希望 WordPress 停止猜測網址,並以 404 找不到網頁的錯誤訊息來取代,將以下程式碼加入 functions.php:
add_filter('redirect_canonical', 'stop_guessing');
function stop_guessing($url) {
if (is_404()) {
return false;
}
return $url;
}
21. 為靜態內容設定過期時間
儲存於你 WordPress 網站的靜態內容–像是圖片、CSS、JavaScript、.txt 等等–不會經常改變,你可以設定過期時間讓它們快取於使用者的瀏覽器中。因此,在稍後訪問網站的過程裡,你的網站就能更快載入 JS 和 CSS ,因為是從本機的快取中被載入。
請參閱 HTML5 模版的 .htaccess 檔案,來了解設定過期時間的細節。如果你是使用像是 W3 Total Cache 之類的快取外掛,快取控制本身是由外掛來做管理。
ExpiresActive On
ExpiresByType image/gif "access plus 30 days"
ExpiresByType image/jpeg "access plus 30 days"
ExpiresByType image/png "access plus 30 days"
ExpiresByType text/css "access plus 1 week"
ExpiresByType text/javascript "access plus 1 week"
22. 強化你的 WordPress 部落格安全性
我在早先已經詳細討論過 WordPress 安全性。大意是你應該把密鑰加入你的 wp-config.php 檔案,安裝檔案監控外掛,然後使用 Limit Login 來防止暴力密碼攻擊。
23. 停用 WordPress 內的檔案編輯功能
當你以系統管理員權限登入你的 WordPress 控制台,你可以輕鬆地編輯任何 WordPress 外掛及佈景主題。如果你想刪除文件的編輯功能(一個缺少的分號可能讓你的 WordPress 網站掛掉),將以下程式碼加入 wp-config.php 檔案中:
define( 'DISALLOW_FILE_EDIT', true );
24. 從網址中移除多餘的查詢參數
如果你的 WordPress 網站網址是 abc.com,如果使用者在網址加入一些查詢參數,仍然可以到達你的網站。例如,abc.com/?utm=ga 或 abc.com/?ref=feedly 就是,從技術上來說,完全不同的網址也可以進入相同的頁面。
但對於鏈結權重(SEO)來說是不好的,在理想的情況下,你應該讓所有網址指向同一個 Canonical URL。將以下程式碼加入 .htaccess 來移除掉不必要的查詢參數:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{QUERY_STRING} !=""
RewriteCond %{QUERY_STRING} !^p=.*
RewriteCond %{QUERY_STRING} !^s=.*
RewriteCond %{REQUEST_URI} !^/wp-admin.*
RewriteRule ^(.*)$ /$1? [R=301,L]
</IfModule>
最後,安裝 WordPress 後必做的 30 件事
在原文中,作者 Amit Agarwal 只列出了 24 條,但在計算時跳過第 22 項,誤植為 25 項,於是我加入最後一個、也是我之前所寫的文章,有興趣的朋友可以參考這個鏈結。
如果你還不知道如何架設 WordPress,或者不確定從何開始,也可參考以下幾篇文章:
- 無名搬家到自架 WordPress,我推薦的五個虛擬主機服務
- 架站更上一層樓,我推薦的五個虛擬專屬主機(VPS)服務
- 從無名小站搬家前,你應該先註冊一個自己的網址!四個推薦的網域名稱註冊商
- 如何挑選一個適合你的虛擬主機服務?我參考的七個比較項目
- 自架 WordPress 虛擬主機租用教學,將網誌備份匯出、匯入到新家