與普通的 Web 站點一樣,Web 化小程序也可以通過一些搜索引擎優(yōu)化(SEO)手段獲取更準確的相關性排名結果。
1.設置頁面基礎信息
正如在 H5 開發(fā)中,會在 HTML 中添加 title、meta description、meta keywords 標簽,聲明頁面相關內容,小程序的頁面信息聲明通過設置頁面基礎信息實現(xiàn)。
頁面基礎信息包括頁面的標題、摘要、關鍵詞、頁面主圖、資源發(fā)布時間等,以下僅介紹幾個主要信息,更多設置要求詳見官方文檔《API - 頁面基礎信息》:
?標題(Title):能夠更加快速洞察頁面內容,了解該結果與需求的相關性,通常是用來決定用戶點擊哪個結果的主要信息。所以,使用高質量的頁面標題對小程序來說至關重要;
?摘要(Description):小程序首頁、欄目頁、分類頁的摘要非常重要,因為有可能在搜索結果中直接被用戶看到,影響到用戶是否選擇點擊查看詳情;
?關鍵詞(Keywords):小程序開發(fā)者給網站某個頁面設定的詞匯,以便讓搜索引擎更好地理解頁面價值。keywords代表了小程序主題內容,無論是首頁、內頁還是欄目頁,關鍵詞一般都代表的是當前頁面或者欄目內容的主體。開發(fā)者根據(jù)實際情況設置即可;
?頁面主圖(Image):頁面中的主體圖片地址,必須是頁面中真實展示的與頁面主體內容相關的圖片。有效的圖片描述可能會在搜索結果中展示,給用戶更直觀友好的體驗,提升用戶點擊率。
頁面基礎信息通過小程序 API swan.setPageInfo 設置,使用示例如下:
Page({
? ? onShow() {
? ? ? ? swan.setPageInfo({
? ? ? ? ? ? title: 'Win10控制面板在哪?怎么找出來-百度經驗',
? ? ? ? ? ? keywords: 'Win10控制面板在哪?win10面板,電腦軟件,電腦,游戲/數(shù)碼',
? ? ? ? ? ? description: 'Win10控制面板在哪?升級了Wi10系統(tǒng)發(fā)現(xiàn):電腦上的【控制面板】不見了,教大家怎么把消失的【控制面板】找回來。',
? ? ? ? ? ? image: 'https://example.com/myphoto.jpg'
? ? ? ? ? ? ...
? ? ? ? });
? ? })
);
更多詳細使用方式介紹見官方文檔《API - 頁面基礎信息》
頁面基礎信息的設置粒度是頁面級的,因此強烈建議在 Page 的 onshow 生命周期中調用,以保證每次頁面切換都能有效設置當前頁的頁面基礎信息。
setPageInfo 在 Web 化的內部實現(xiàn)其實就是將調用參數(shù)動態(tài)設置為 HTML 標簽中的 title、meta description、meta keywords 標簽,以及符合 The Open Graph protocol 的 meta 標簽。 因此,如要調試調用 setPageInfo 之后,頁面基礎信息是否設置成功,可以檢查 Web 化頁面渲染后的 HTML Element 中是否成功設置了這幾個標簽。Web 化頁面預覽方法將在第二章節(jié)介紹。
比如上例中的設置結果如下:
<!DOCTYPE html>
<html>
<head>
? ? <title>Win10控制面板在哪?怎么找出來-百度經驗</title>
...
? ? <meta name="description" content="Win10控制面板在哪?升級了Wi10系統(tǒng)發(fā)現(xiàn):電腦上的【控制面板】不見了,教大家怎么把消失的【控制面板】找回來。">
? ? <meta name="keywords" content="Win10控制面板在哪?win10面板,電腦軟件,電腦,游戲/數(shù)碼">
? ? <meta property="og:description" content="Win10控制面板在哪?升級了Wi10系統(tǒng)發(fā)現(xiàn):電腦上的【控制面板】不見了,教大家怎么把消失的【控制面板】找回來。">
? ? <meta property="og:image" content="https://example.com/myphoto.jpg">
</head>
<body>...</body>
</html>
swan.setPageInfo 中設置的字段除了在接入自然搜索場景下會被用到,在接入百度信息流中也起到至關重要的作用,詳見官方文檔 《信息流流量接入》
另外,swan.setPageInfo API 不僅用于在流量接入場景下的頁面內容聲明,在客戶端小程序實現(xiàn)中,頁面基礎信息也會被用作頁面分享、頁面收藏時的摘要信息。
2.鏈接跳轉
頁面中鏈接跳轉對爬蟲收錄有很重要的價值。 對于普通 H5,頁面跳轉的方式通常有兩種:a標簽跳轉window.location.href賦值方式跳轉。前者直接設置在 HTML 標簽中,發(fā)現(xiàn)效率和準確性相較后者友好很多。
同理,在小程序中,設置頁面跳轉的方式對應的也有兩種:
?navigator 組件,標簽式聲明
?導航類 API,通過用戶事件等方式觸發(fā)調用
為了有效的被爬蟲發(fā)現(xiàn),我們強烈建議在兩者都能滿足需求的情況下,使用 navigator 組件的方式聲明鏈接。
? 推薦跳轉示例:
<navigator url="/pages/detail/detail">點我跳轉</navigator>
?不推薦跳轉示例:
<button bindtap="jump">點我跳轉</button>Page({
? ?jump() {
? ? ? ?swan.navigateTo({
? ? ? ? ? ?url: '/pages/detail/detail'
? ? ? ?});
? ?}
? ?...})
3.避免使用 webview 組件
為了方便小程序開發(fā),很多開發(fā)者會選擇通過 webview 組件嵌套 H5 頁面的方式實現(xiàn)小程序。 使用 webview 組件嵌套方式實現(xiàn)的小程序對于爬蟲抓取是不友好的。因此,我們不推薦使用這種方式開發(fā)小程序。
4.游客模式兼容
由于爬蟲的訪問環(huán)境沒有賬號登錄模擬,在任何頁面都將以游客模式訪問(游客模式下調用 swan.login 會執(zhí)行 fail 回調)。因此,開發(fā)者希望收錄的頁面,應考慮對游客模式的兼容。對于無用戶信息依賴的頁面不添加強制登錄的邏輯,用戶信息獲取失敗時仍然展示有效內容。
例如: 在一個博客論壇的博文頁,只有評論功能需要在用戶登錄態(tài)完成。那么當在未登錄態(tài)訪問該頁面時,應該正常展示文章主體,僅在用戶點擊評論時再要求登錄。而非在頁面進入時就強制登錄才可正常瀏覽。
5.避免頁面間訪問順序依賴
由于小程序一般外露入口較集中,比如后續(xù)頁面都只會通過首頁跳轉訪問,小程序開發(fā)者通常很容易忽略頁面之間訪問的獨立性,造成頁面實現(xiàn)邏輯與訪問路徑過于耦合的情況。例如: 在首頁請求數(shù)據(jù)信息后,通過 setStorage 存儲本地,并在跳轉二級頁時讀取 storage 中存儲的數(shù)據(jù),不做任何判空處理直接展示。
考慮 Web 化小程序被爬蟲抓取的情況,每個頁面都是獨立入口訪問的。所以,應該避免這種耦合訪問順序的寫法,添加必要的兼容處理。 可以在小程序開發(fā)完成時,通過單獨預覽每個 Web 化頁面的方式檢查是否符合要求。
代碼示例:
首頁:
Page({
? ? onShow() {
? ? ? ? swan.request({
? ? ? ? ? ? url: 'https//example.com/api/data',
? ? ? ? ? ? success: function (res) {
? ? ? ? ? ? ? ? ...
? ? ? ? ? ? ? ? swan.setStorageSync('remote-data', res.data);
? ? ? ? ? ? }
? ? ? ? });
? ? }
});
二級頁:
// badPage({
? ?onShow() {
? ? ? ?let data = swan.getStorageSync('remote-data');
? ? ? ?this.render(data);
? ?}});// betterPage({
? ?onShow() {
? ? ? ?let data = swan.getStorageSync('remote-data');
? ? ? ?if (!data) {
? ? ? ? ? ?swan.request({
? ? ? ? ? ? ? ?url: 'https//example.com/api/data',
? ? ? ? ? ? ? ?success: function (res) {
? ? ? ? ? ? ? ? ? ?...
? ? ? ? ? ? ? ? ? ?data = res.data ? ? ? ? ? ? ? ?}
? ? ? ? ? ?});
? ? ? ?}
? ? ? ?this.render(data);
? ?}});