- 原文地址:How switching our domain structure unlocked international growth
- 原文作者:Pinterest Engineering
- 譯文出自:掘金翻譯計劃
- 本文永久連結:github.com/xitu/gold-m…
- 譯者:Starrier
- 校對者:anxsec,Xekin-FE
如何修改域名來提高國際增長率
Christian Miranda | Growth 部門軟體工程師
在 Pinterest 上的 2 億月活躍使用者中,其中有超過半數的使用者在美國之外的地方使用我們的 app。為了給全球使用者提供更好的服務,我們將持續改進 Pinterest。我們已經將流量轉移到了國家程式碼頂級域名 (ccTLDs)。例如現在服務於德國的是 www.pinterest.de 而不再是 www.pinterest.com. 這裡我們將深入討論如何幫助提高增長的細節,並討論在整個過程中遇到的一些工程挑戰。
一切盡在域名中
Pinterest 自 2010 年成立以來,該網站的每一頁都託管在 www.pinterest.com. 上。上線幾年後,為了讓我們的內容可以按國家劃分併為 Pinterest 提供本地化和相關體驗,我們引進了 country 子域名 (如 de.pinterest.com)。這改善了搜尋引擎的優化 (SEO) 和總體增長,因為國家子域名在全球搜尋結果中排名更高,更多的人群發現了使用他們語言的相關內容。
下一步是實現 ccTLDs。通過調查,我們瞭解到一些做出改變的網站所呈現中立或負面增長的現象,儘管業界對 ccTLDs 看法是它在許多搜尋引擎演算法中提供了一個更強烈的地理定位訊號,使用者可能會點選以本地域名結尾的結果(這會積極影響搜尋排名以導致更高的的點選率)。我們想對它們進行測試,觀察他們將如何作用於 Pinterest 和我們多樣化的內容目錄。
不僅僅是重定向:切換域名的挑戰
從表面上看,這個專案看起來很簡單--我們所要做的就是提供我們想要的新的 ccTLDs 並設定重定向來開始給它們流量。然而很明顯,修改我們網站的頂級域名需要對我們的基礎設施進行重大的改變。
跨域認證
Pinterest 上的身份驗證非常標準。我們有一個處理使用者名稱/密碼註冊的內部使用者服務,對那些第三方(如 Facebook)認證採用 OAuth 開放標準。我們會在使用者每次訪問 www.pinterest.com. 時,取回後端返回的令牌並對其進行身份驗證。
隨著 ccTLDs 的引入,我們需要支援對使用者進行身份驗證的功能,無論他們訪問的是哪個域名。我們的解決方案是建立一個域名中心(accounts.pinterest.com)作為所有登入的唯一驗證源。
簡而言之,Pinterest ccTLDs 與域名中心通訊以確定身份驗證狀態,並設定客戶端 cookie 來提供映象。下一節將描述這種通訊,我們稱之為 auth 握手。
auth 握手
握手的一般流程是:
1.在註冊或登入期間,將從訪問域 (例如,www.pinterest.abc) 呼叫 API 以確定身份驗證狀態。 2.如果使用者登入了 accounts.plnterest.com,他們將自動登入 www.pinterest.abc.。 3.如果使用者沒有登入 accounts.pintertst.com,我們將生成一個訪問令牌,並在這兩個域名上的 cookie 中設定它,這引導了域名中心的後續訪問,因此可以進行第二步。
第一步中存在一個問題:同源策略規定“只有當兩個網頁同源時,一個網頁上的指令碼才可以訪問另一個網頁上的資料。”這是網際網路安全的支柱,也是阻止惡意網站上 JavaScript 訪問個人或敏感資訊的手段。在 auth 握手情況下,由於域名不匹配(例如 pinterest**.com** 和 pinterest**.abc**),Pinterest ccTLDs 無法與 accounts.pinterest.com 通訊。
為了解決這個問題,我們使用了跨域資源共享(CORS),它為 web 伺服器提供跨域訪問控制,以支援資料跨域傳輸安全。這是通過在資料傳輸中向 HTTP 請求和響應新增 CORS 特定的(響應)頭來完成的,並相應地處理它們。
在握手中使用 CORS
我們通過使用 auth 握手在 www.pinterest.de 上註冊 Pinterest 的簡化示例來完成這個過程。首先,客戶端指定它要使用使用者的憑據向 accounts.pinterest.com 提出跨域請求。此時瀏覽器會自動向請求中新增一個 Origin header,並指定當前域名。
當請求到達伺服器時,我們建立訪問令牌,並在 accounts.pinterest.com 上進行使用者身份驗證。一旦使用者登入,握手就會在響應中向客戶端發回一個自定義令牌。此令牌可交換為 www.pinterest.de 可用於身份驗證的訪問令牌。
伺服器跟蹤所有 ccTLDs 用於身份驗證的白名單。在返回響應之前,我們要檢查 Origin request 報頭值是否已經存在於白名單中。如果是這樣,伺服器將新增特殊的 CORS 響應報頭。這些報頭中最重要的是 Access-Control-Allow-Origin,該報頭的存在將向客戶端發出是否允許跨域傳輸的詢問資訊。
當客戶端接受到響應時,它會看到 Access-Control-Allow-Origin 的報頭值“https://www.pinterest.de”。因為這和客戶端同源,所以會繼續處理響應。自定義令牌被檢索並用於獲取訪問令牌,允許使用者登入 www.pinterest.de.。
您可以在 Mozilla 官方文件中閱讀到更多關於跨域資源共享和這些請求所涉及的所有抱頭內容。
通過 SEO 提高可發現性
一旦我們建立了新的本地域名,下一步就是幫助它們更容易被發現。引導通訊量的最簡單方法之一是實現對新域名的重定向。在適合情況下,我們使用永久性 (301) 重定向,從舊的現有國家子域名重定向到新的相關 ccTLDs (例如 de.pinterest.com → www.pinterest.de).。使用永久性重定向允許我們將舊域名上的大部分網頁排名和許可權轉移到新的域名中。
我們還使用了一些間接方法來提高新的 ccTLDs 流量質量。Hreflangs 是可以包含在網頁標記中的屬性,用於告訴爬蟲關於其不同語言版本的資訊。當搜尋引擎看到這個標記時,他們會根據搜尋者的區域設定顯示與本地相關的頁面。我們還使用名為 sitemaps 的檔案來幫助提高搜尋引擎爬行站點的效率和速度。Sitemaps 是用來列出您網站的網頁並告訴搜尋引擎您的內容組織結構的檔案。通過將這些檔案直接提供給搜尋機器人,它們可以更容易地找到新的內容來進行爬取和排序。
結論
到目前為止,我們已經觀察到在我們推出的國家,流量有了積極的增長,點選率和瀏覽量也有所增加。在這個過程中,一個更有趣的發現是我們可以索引更多的頁面,因為不同的頂級域名為搜尋機器人開啟了一個單獨的“爬行預算”。
展望未來,我們將繼續在 ccTLDs 中為我們的國際內容投資,並正研究進一步增強 accounts.pinterest.com 作為所有 Pinterest 屬性中心的認證中心。
鳴謝: Devin Lundberg, Josh Enders, Sam Meder, Jess Males, Evan Jones, Jeff Avery, Grey Skold, Julie Trier, Vadim Antonov, Kynan Lalone, Evelyn Obamos 和 International 團隊
掘金翻譯計劃 是一個翻譯優質網際網路技術文章的社群,文章來源為 掘金 上的英文分享文章。內容覆蓋 Android、iOS、前端、後端、區塊鏈、產品、設計、人工智慧等領域,想要檢視更多優質譯文請持續關注 掘金翻譯計劃、官方微博、知乎專欄。