0%

正威網路行銷工作室,專注於基隆、台北與全台客製化網頁設計,提供專業 RWD 響應式、SEO 搜尋引擎優化、品牌形象設計與網站維護託管服務。

搜尋文章
聯絡資訊
地址基隆市仁二路 220 號 5 樓
追蹤我們

nofollow、ugc、sponsored 差在哪?WordPress 連結 rel 屬性設定整理

寫著連結建立、關鍵字研究等 SEO 項目的紙張

在文章裡放了外部連結,常會聽到「要加 nofollow,不然權重會流失」。這篇把連結的 rel 屬性講清楚:什麼時候要加、該加哪一個,以及哪些舊觀念已經不適用。

(原本另外兩篇〈用代碼自動讓 wordpress 的文章連結加入 nofollow 屬性〉、〈用代碼重寫 wordpress 留言評論者的連結網址〉的內容,已經整合到這裡。)

rel 屬性是什麼?

rel 是寫在連結上的屬性,用來告訴搜尋引擎「我跟這個連結是什麼關係」:

HTML
<a href="https://example.com/" rel="nofollow">範例網站</a>

對訪客來說,有沒有加 rel,點起來完全一樣;影響的只有搜尋引擎怎麼看待這個連結。

nofollow、ugc、sponsored 的差別

  • rel="sponsored":付費或有利益交換的連結,例如廣告、業配文、聯盟行銷(分潤)連結、廠商贊助。Google 要求這類連結要標示出來,沒標示可能被視為操縱排名的連結。
  • rel="ugc":UGC 是 User Generated Content(使用者產生的內容),用在留言、論壇發文、訪客投稿裡的連結。
  • rel="nofollow":不想替這個連結背書,又不屬於上面兩種時使用,例如提到某個網站,但你不確定它是否可靠。

幾個值可以一起用,中間用空格隔開,例如 rel="ugc nofollow"、rel="sponsored nofollow"。Google 現在把這幾個屬性當作「提示」參考,而不是一律不理會這個連結。官方說明可以看 Google 的外連連結標示說明。

外部連結不需要全部加 nofollow

這篇文章舊版的程式碼,會把文章裡所有外部連結自動加上 nofollow,理由是「比較容易被搜尋引擎收錄」。這個說法並不正確:

  • 連到可信、相關的網站(官方文件、政府網站、引用的資料來源),對讀者有幫助,本來就是正常的網頁行為,不會讓你的網站被扣分。
  • 刻意替所有外部連結加上 nofollow 想「留住權重」,並不會讓自己的網頁排名變好,也不會加快收錄。

所以比較好的做法是:一般的外部連結正常連,只替需要標示的連結加上對應的屬性。

WordPress 已經幫你處理的部分

  • 留言裡的連結:留言內容裡的外部連結,以及留言者填寫的「網站」欄位連結,WordPress 預設就會自動加上 nofollow 與 ugc,不需要另外寫程式。
  • 在新分頁開啟:在編輯器勾選「在新分頁中開啟」時,WordPress 會自動加上 noopener 之類的值,這是安全性設定,跟 SEO 無關。

舊版「留言連結改走跳轉網址」為什麼不要用

原本另一篇文章的做法,是把留言裡的連結改成「你的網址/?r=外部網址」,點下去再由你的網站轉過去。這個做法有嚴重的問題:

  • 開放式重新導向(Open Redirect)漏洞:任何人都可以做出「你的網址/?r=詐騙網站」這種連結,看起來是你的網域,點下去卻被帶到詐騙網站。你的網域信譽會受損,也可能被防毒軟體或瀏覽器標示為危險網站。
  • 沒有必要:WordPress 本來就已經替留言連結加好 ugc 與 nofollow,不需要再繞一圈。

如果你以前加過這段程式碼,建議直接移除。

留言表單不想要「網站」欄位?

很多垃圾留言就是為了在「網站」欄位留下連結。如果你的讀者本來就很少填這一欄,可以直接把它拿掉:

PHP
add_filter( 'comment_form_default_fields', function ( $fields ) {
    unset( $fields['url'] );
    return $fields;
} );

防垃圾留言的其他做法,請看WordPress 防垃圾留言總整理。

在文章裡怎麼替連結加上 rel

  • 區塊編輯器:選取該段落,點區塊工具列的「⋮」選單,切換成 HTML 編輯,在 <a> 標籤裡加上 rel="sponsored" 之類的屬性,再切換回來。
  • SEO 外掛:有些 SEO 外掛(例如 Rank Math、Yoast SEO)會在編輯器的連結設定裡,多出 nofollow、sponsored 的勾選項目,不用碰 HTML。

程式碼:替指定網域自動加上 sponsored

如果你的文章裡有很多聯盟行銷、合作廠商的連結,一篇一篇改太麻煩,可以用程式碼替指定的網域自動加上 sponsored。

舊版程式碼是用正規表達式直接改 HTML,遇到屬性順序不同、單引號或特殊寫法就容易出錯。下面改用 WordPress 6.2 之後內建的 WP_HTML_Tag_Processor,它會正確解析 HTML 標籤,比較不會把文章改壞。加到子主題的 functions.php,或用 Code Snippets 外掛新增:

PHP
function ahwei_add_link_rel( $content ) {
    if ( false === stripos( $content, '<a' ) ) {
        return $content;
    }

    // 這些網域的連結加上 sponsored(聯盟行銷、廣告合作等),不用寫 https:// 和 www.
    $sponsored_domains = array( 'shop.example.com', 'affiliate.example.net' );

    // true = 其他所有外部連結也加上 nofollow;一般網站建議維持 false
    $nofollow_all_external = false;

    $site = preg_replace( '/^www\./i', '', (string) wp_parse_url( home_url(), PHP_URL_HOST ) );
    $tags = new WP_HTML_Tag_Processor( $content );

    while ( $tags->next_tag( 'a' ) ) {
        $href = $tags->get_attribute( 'href' );
        $host = is_string( $href ) ? wp_parse_url( $href, PHP_URL_HOST ) : null;
        if ( ! $host ) {
            continue; // 站內相對網址、#錨點、mailto 等不處理
        }
        $host = preg_replace( '/^www\./i', '', strtolower( $host ) );
        if ( $host === $site ) {
            continue; // 自己網站的連結不處理
        }

        $add = array();
        foreach ( $sponsored_domains as $domain ) {
            if ( $host === $domain || str_ends_with( $host, '.' . $domain ) ) {
                $add[] = 'sponsored';
                break;
            }
        }
        if ( $nofollow_all_external ) {
            $add[] = 'nofollow';
        }
        if ( ! $add ) {
            continue;
        }

        $rel = $tags->get_attribute( 'rel' );
        $rel = is_string( $rel ) ? preg_split( '/\s+/', strtolower( trim( $rel ) ), -1, PREG_SPLIT_NO_EMPTY ) : array();
        $tags->set_attribute( 'rel', implode( ' ', array_unique( array_merge( $rel, $add ) ) ) );
    }

    return $tags->get_updated_html();
}
add_filter( 'the_content', 'ahwei_add_link_rel', 20 );

說明:

  • $sponsored_domains 填要標示的網域,用小寫、不用加 https:// 和 www.,這個網域底下的子網域也會一起套用。
  • 原本連結上已經有的 rel 值(例如 noopener)會保留,只會把新的值加上去。
  • $nofollow_all_external 預設是 false。除非網站的外部連結大多無法把關(例如開放很多人投稿),否則不建議打開。
  • 這段只處理文章內容(the_content),不會改到選單、頁尾的連結。
  • 加好之後,打開一篇文章,在連結上按右鍵選「檢查」,就能看到 rel 有沒有正確加上。

延伸閱讀

連結該怎麼標示,是 SEO 裡很容易被誤解的一塊。正威網路行銷是 25 年經驗的基隆網頁設計工作室,也提供 SEO 搜尋引擎優化與 Google 關鍵字廣告服務,歡迎來聊聊。

分享這篇文章

返回文章列表更多「Wordpress代碼教學」文章

發表留言

還沒有人留言,歡迎第一個分享你的想法或問題。留言經審核後才會顯示,Email 不會公開。

讓我們一起打造
您的專屬網站!