Google 演算法下的「醫師袍」:打造權威級 WordPress 醫療文章 SEO 模板,我們直接寫進 Code!
大家好,我是浪花科技的 Eric。身為一個整天跟程式碼和伺服器為伍的工程師,我最常被問到的問題之一,除了「網站掛了怎麼辦」之外,就是「為什麼我們家醫師寫的專業文章,內容明明比農場文好一百倍,在 Google 上卻總是找不到?」
這個問題,尤其在醫療、健康、財經這類「Your Money or Your Life」(YMYL) 的領域,更是屢見不鮮。你可能砸大錢請了頂尖的醫師、營養師來撰寫內容,也裝了 Yoast 或 Rank Math 這些 SEO 外掛,把每個燈號都變成了綠色,但流量報告一出來,還是慘不忍睹。坦白說,這就像你穿著頂級西裝,卻忘了最重要的領帶——Google 根本沒把你當回事。
問題的根源在於,對於 YMYL 內容,Google 的審核標準是「醫學中心」等級的。它不只看你文章寫了什麼,更看重「誰寫的」、「誰審核的」、「可信度有多高」。這就是所謂的 E-E-A-T (Experience, Expertise, Authoritativeness, Trustworthiness) 原則。今天,我就不談那些空泛的行銷理論,直接帶你動手,從工程師的視角,打造一個真正能讓 Google 信服的 WordPress 醫療文章 SEO 模板,我們不只談 E-E-A-T,我們直接把它寫進 Code 裡!
為什麼通用 SEO 外掛對醫療內容只是「杯水車薪」?
先別誤會,我不是說 Yoast 或 Rank Math 不好用。它們是很棒的通用工具,能幫你處理 80% 的基礎 SEO 設定。但面對醫療內容,這剩下的 20% 才是決定生死的關鍵。這些外掛就像是成衣,合身,但絕對不是量身訂製。
它們無法理解你文章的「醫學脈絡」。它們不知道這篇文章的作者是執業醫師,也不知道內容經過了同儕審核。對它們來說,一篇由醫學博士寫的論文,跟一篇內容農場抄來的文章,在「結構」上可能沒什麼不同。但對 Google 來說,這兩者有天壤之別。
Google 的 E-E-A-T 不只是行銷術語,更是演算法的「信任指標」
工程師的思維就是把抽象的概念具象化。對我來說,E-E-A-T 不是口號,而是一系列的「數據訊號」(Data Signals)。
- Experience (經驗): 內容是否來自有第一手經驗的人?(例如:病友分享、醫師臨床經驗)
- Expertise (專業): 作者是否具備該領域的專業知識?(例如:醫師執照、學術背景)
- Authoritativeness (權威): 網站和作者在該領域是否被公認為權威?(例如:被其他權威機構引用)
- Trustworthiness (信賴): 內容是否準確、誠實、安全?(例如:提供參考文獻、清楚標示審稿人)
我們的目標,就是把這些訊號,透過程式碼,清清楚楚、明明白白地告訴 Google。這就是我們打造專屬模板的核心價值。
藍圖規劃:打造一個「會說話」的 WordPress 醫療文章 SEO 模板
好了,囉嗦完了,我們來畫藍圖。一個好的工程師在寫 Code 前,一定會先規劃好架構。我們的模板架構,就是要讓內容的「權威性」可以被系統化地管理與呈現。
第一步:用自訂文章類型 (CPT) 為醫療內容建立專屬王國
首先,我們絕對不能把專業醫療文章跟一般的部落格文章混在一起。我們需要用 Custom Post Type (CPT) 建立一個叫做「醫療新知」(medical_article) 的專屬內容類型。這樣做的好處多多:
- 結構分離: 醫療文章有自己獨立的管理介面,不會跟網站公告、行銷文章混淆。
- 客製化彈性: 可以為它設計專屬的分類法(例如:「科別」)和標籤。
- 權限控管: 可以設定只有特定的使用者角色(例如:「醫師作者」)才能發布或編輯。
你可以在你的主題 `functions.php` 或是自訂外掛中加入以下程式碼來註冊這個 CPT。
// 在 functions.php 或自訂外掛中加入
function register_medical_article_cpt() {
$labels = array(
'name' => _x( '醫療新知', 'Post Type General Name', 'text_domain' ),
'singular_name' => _x( '醫療新知', 'Post Type Singular Name', 'text_domain' ),
'menu_name' => __( '醫療新知', 'text_domain' ),
'archives' => __( '醫療新知文章', 'text_domain' ),
'attributes' => __( '文章屬性', 'text_domain' ),
'parent_item_colon' => __( '上層文章:', 'text_domain' ),
'all_items' => __( '所有醫療新知', 'text_domain' ),
'add_new_item' => __( '新增醫療新知', 'text_domain' ),
'add_new' => __( '新增', 'text_domain' ),
'new_item' => __( '新文章', 'text_domain' ),
'edit_item' => __( '編輯文章', 'text_domain' ),
'update_item' => __( '更新文章', 'text_domain' ),
'view_item' => __( '檢視文章', 'text_domain' ),
'view_items' => __( '檢視文章', 'text_domain' ),
'search_items' => __( '搜尋文章', 'text_domain' ),
);
$args = array(
'label' => __( '醫療新知', 'text_domain' ),
'description' => __( '專業醫療文章', 'text_domain' ),
'labels' => $labels,
'supports' => array( 'title', 'editor', 'excerpt', 'author', 'thumbnail', 'comments', 'revisions', 'custom-fields' ),
'taxonomies' => array( 'category', 'post_tag' ),
'hierarchical' => false,
'public' => true,
'show_ui' => true,
'show_in_menu' => true,
'menu_position' => 5,
'menu_icon' => 'dashicons-health',
'show_in_admin_bar' => true,
'show_in_nav_menus' => true,
'can_export' => true,
'has_archive' => true,
'exclude_from_search' => false,
'publicly_queryable' => true,
'capability_type' => 'post',
'rewrite' => array('slug' => 'health-info'),
);
register_post_type( 'medical_article', $args );
}
add_action( 'init', 'register_medical_article_cpt', 0 );
第二步:用 ACF Pro 打造我們的「數位病歷表」
有了 CPT 這個乾淨的「病房」,接下來我們需要一張功能齊全的「病歷表」,也就是用 Advanced Custom Fields (ACF) 來建立結構化的資料欄位。這一步是整個模板的靈魂,它強迫內容編輯者必須填寫所有證明 E-E-A-T 的資訊。
我們需要建立以下欄位,並將它們指派給 `medical_article` 這個 CPT:
- 醫學審稿人 (Medical Reviewer): 欄位類型選擇「使用者 (User)」。這個人將是文章內容的背書者,至關重要!
- 最後審閱日期 (Last Reviewed Date): 欄位類型選擇「日期選擇器 (Date Picker)」。這能直接告訴 Google 內容的時效性和準確性。
- 參考文獻 (References): 欄位類型選擇「重複器 (Repeater)」,並在裡面建立兩個子欄位:「文獻標題 (Text)」和「文獻網址 (URL)」。這能大幅提升內容的可信度。
身為工程師,我真的得囉嗦一下:把資料結構化,用 ACF 管理,而不是讓編輯在文字編輯器裡隨意排版,不僅能確保資料的完整性,未來要做改版、資料遷移、或是 API 輸出時,都會感謝現在的自己。乾淨的資料,才是王道!
實戰開發:讓模板自動產生 Google 看得懂的「結構化資料」
好戲上場了。前面做的所有準備,都是為了這一步:自動生成 JSON-LD 格式的結構化資料 (Schema.org markup)。這就像是幫你的網頁準備一份「個人履歷」,直接遞給 Google 的爬蟲看。它能幫助 Google 理解:「這不只是一篇文章,而是一篇由某某醫師撰寫、由某某專家審核的專業醫療頁面」。
我們要用的 Schema 類型是 `MedicalWebPage`,它繼承了 `Article` 的屬性,並加入了醫療相關的特定屬性。
把下面的程式碼加到你的 `functions.php` 中。這段程式碼會在你瀏覽 `medical_article` 類型的文章時,自動在網頁的 `
` 區塊中插入一段 JSON-LD 指令碼。
// 在 functions.php 中加入,自動生成醫療文章的 JSON-LD Schema
function add_medical_article_schema() {
// 只在 'medical_article' 的單一文章頁面執行
if ( !is_singular('medical_article') ) {
return;
}
global $post;
// 獲取 ACF 欄位資料
$reviewer_user_id = get_field('medical_reviewer', $post->ID);
$last_reviewed_date = get_field('last_reviewed_date', $post->ID); // 格式 YYYYMMDD
$references = get_field('references', $post->ID);
// 處理作者資訊
$author_id = $post->post_author;
$author_data = [
'@type' => 'Person',
'name' => get_the_author_meta('display_name', $author_id),
'url' => get_author_posts_url($author_id)
];
// 處理審稿人資訊
$reviewer_data = [];
if ($reviewer_user_id) {
$reviewer_info = get_userdata($reviewer_user_id);
$reviewer_data = [
'@type' => 'Person',
'name' => $reviewer_info->display_name,
'url' => get_author_posts_url($reviewer_user_id)
// 你可以在使用者個人資料頁面加上更多欄位,如 'jobTitle', 'alumniOf' 等
];
}
// 處理參考文獻
$citations = [];
if ($references) {
foreach ($references as $ref) {
$citations[] = [
'@type' => 'CreativeWork',
'name' => $ref['reference_title'],
'url' => $ref['reference_url']
];
}
}
$schema = [
'@context' => 'https://schema.org',
'@type' => 'MedicalWebPage',
'mainEntity' => [
'@type' => 'Article',
'headline' => get_the_title(),
'author' => $author_data,
'datePublished' => get_the_date('c'),
'dateModified' => get_the_modified_date('c'),
'publisher' => [
'@type' => 'Organization',
'name' => get_bloginfo('name'),
'logo' => [
'@type' => 'ImageObject',
'url' => '你的網站 LOGO 圖片網址'
]
],
'description' => get_the_excerpt(),
'articleBody' => wp_strip_all_tags(get_the_content()),
],
];
// 如果有審稿人,加入 reviewedBy 屬性
if (!empty($reviewer_data)) {
$schema['mainEntity']['reviewedBy'] = $reviewer_data;
}
// 如果有最後審閱日期,加入 dateReviewed 屬性
if ($last_reviewed_date) {
// ACF 日期選擇器回傳 YYYYMMDD,需轉換為 ISO 8601 格式
$date_obj = DateTime::createFromFormat('Ymd', $last_reviewed_date);
if($date_obj) {
$schema['lastReviewed'] = $date_obj->format('c');
}
}
// 如果有參考文獻,加入 citation 屬性
if (!empty($citations)) {
$schema['mainEntity']['citation'] = $citations;
}
echo '';
}
add_action('wp_head', 'add_medical_article_schema');
這段程式碼就是魔法發生的地方。它會動態地抓取你在後台填寫的作者、審稿人、審閱日期和參考文獻,並把它們打包成 Google 最喜歡的 JSON-LD 格式。你再也不用手動去產生或擔心格式錯誤了。
前端呈現:把「信任」刻在使用者眼前
別忘了,我們做這一切不只是為了討好 Google,更是為了贏得真實使用者的信任。所以,我們必須把後台的這些 E-E-A-T 訊號,清楚地顯示在前端頁面。
你需要建立一個 `single-medical_article.php` 的佈景主題檔案,來客製化醫療新知文章的顯示樣式。在這個檔案中,你可以使用 `get_field()` 函式來抓取我們用 ACF 建立的欄位值,並把它們顯示在文章的頂部或底部。
例如,你可以在文章標題下方,明確標示出:
- 作者: [作者姓名與連結]
- 醫學審稿: [審稿人姓名與連結]
- 最後更新與審閱日期: [日期]
在文章結尾,可以自動生成一個「參考文獻」區塊,把所有引用的資料來源條列出來。這些小細節,會大幅提升訪客對你網站內容的信任感。
總結:模板不只是工具,更是建立權威的策略
看到這裡,你應該明白了,打造一個專業的 WordPress 醫療文章 SEO 模板,遠不只是安裝幾個外掛那麼簡單。它是一套結合了技術實作 (CPT, ACF)、SEO 策略 (E-E-A-T) 與使用者體驗的完整解決方案。
透過將「信任訊號」直接寫入網站的底層架構,我們讓每一篇發布的醫療文章,都能自動穿上 Google 演算法看得懂的「醫師袍」。這不僅能幫助你的優質內容在搜尋結果中脫穎而出,更是為你的品牌建立長期數位權威的堅實基礎。這是一種投資,一種能隨著時間累積而產生複利效應的策略。
當然,這只是個開始。你還可以整合醫師的個人簡介頁面、診所資訊,甚至串接掛號系統。技術的可能性是無窮的,關鍵在於你是否打好了這個結構化的地基。
延伸閱讀
- WordPress 只能寫文章?解鎖 CPT 終極指南,打造獨一無二的網站結構!
- 別再被版型綁架!ACF 終極指南:用客製化欄位打造 WordPress 夢幻後台
- 流量進不來,不是你的內容差!資深工程師揭秘 WordPress 技術 SEO 三大支柱:速度、結構與程式碼
如果你覺得這些技術細節太過複雜,或是希望為你的醫療機構打造一個更全面、更強大的數位內容平台,別客氣,這正是浪花科技的專業所在。我們專注於為客戶解決複雜的技術問題,打造真正能帶來價值的網站。歡迎點擊這裡與我們聯繫,讓我們聊聊如何讓你的專業知識,在網路上發揮最大的影響力。
常見問題 (FAQ)
Q1: 為什麼我不能只用 Yoast 或 Rank Math 來處理醫療網站的 SEO?
A1: Yoast 或 Rank Math 是優秀的通用型 SEO 工具,但它們缺乏針對醫療內容所需的「信任訊號」的深度整合。例如,它們無法簡單地讓你定義「醫學審稿人」或自動產生包含 `reviewedBy` 的結構化資料。本文介紹的 CPT + ACF 模板方法,是將 E-E-A-T 原則直接內建到網站的內容架構中,這比單純的關鍵字優化要深入得多。
Q2: 使用自訂文章類型 (CPT) 和 ACF 建立模板有什麼具體好處?
A2: 主要好處是「結構化」與「可擴展性」。CPT 讓你的醫療文章與一般文章分離,管理更清晰。ACF 則強迫內容產出者必須填寫如審稿人、參考文獻等關鍵欄位,確保了資料的完整性與一致性。這不僅對 SEO 有利,未來若要將內容輸出成 API、改版網站或進行數據分析,都會變得非常簡單,因為你的資料從一開始就是乾淨且結構化的。
Q3: 我不是工程師,自己加上這些程式碼會不會很困難?
A3: 對於沒有程式背景的使用者來說,直接修改 `functions.php` 檔案確實有風險。操作不當可能導致網站出現「死亡白畫面」。比較安全的做法是使用像 Code Snippets 這類的外掛來新增程式碼,或者最好是建立一個「子佈景主題」來進行修改。如果你的網站至關重要,或希望實現更複雜的功能,強烈建議尋求像浪花科技這樣的專業團隊協助,以確保網站的穩定與安全。






