起因#
這是一篇網站折騰介紹
soapffz
已經寫了40+
文章了:
經常和別人介紹自己的網站,別人總是會問 “訪問量有多少?”
soapffz
只能回答:“由於沒向百度推送,所以百度搜不到”
於是,這篇文章將捋一捋為什麼沒向百度推送以及解決方案
分為兩個部分,sitemap
生成和向百度推送
sitemap 生成#
前期挖的坑#
剛建設完網站時,在每篇文章寫完之後鏈接中會存在一個index.php
為了把這個index.php
去掉,變成這些鏈接:
https://soapffz.com/sec/247.html
https://soapffz.com/python/245.html
https://soapffz.com/tools/239.html
https://soapffz.com/sec/233.html
我在後台做了如下操作:
這也導致我使用一些sitemap
自動生成插件的時候,會變成這樣:
折騰#
這其中除了sitemap
生成插件我也使用過在線網站,比如這個
可以看到花了八分半,爬了 124 條鏈接,點擊View Sitemap Details
查看詳情
點擊Other Downloads
處所示按鈕下載所有格式的文件:
可以看到爬取的鏈接都是正常的,但是問題也來了,
這樣生成sitemap
也太費勁了吧,後面也嘗試過使用Python
去爬取網站所有 url
但是想想實在沒必要,就一個url
格式問題而已
最終解決方案#
於是最終決定放棄在url
中包含目錄字段:
然後使用前面介紹的八雲醬的插件即可生成sitemap
:
然後嘗試向百度提交:
可以看到鏈接提交成功了
向百度主動推送#
sitemap
處理完了還不夠,我們可以使用主動推送和sitemap
結合起來使得百度收錄更快
百度的主動推送方式:
大概就是意思就是把url.txt
帶上自己的token
傳輸給百度資源平台
我用Python
參考網上的文章寫了一個腳本
邏輯就是解析網站當前的sitemap.xml
然後獲取urls
帶上自己的token
和網站名稱
使用request
庫的post
方式提交一下然後查看返回狀態即可
全碼如下:
# -*- coding: utf-8 -*-
'''
@author: soapffz
@fucntion: 從網站的sitemap.xml抓取url並向百度站長平台主動推送
@time: 2019-07-25
'''
import requests
import xmltodict
class BaiduLinkSubmit(object):
def __init__(self, site_domain, sitemap_url, baidu_token):
self.site_domain = site_domain
self.sitemap_url = sitemap_url
self.baidu_token = baidu_token
self.urls_l = [] # 存儲需要爬取的url
self.parse_sitemap()
def parse_sitemap(self):
# 解析網站的sitemap.xml獲取所有urls
try:
data = xmltodict.parse(requests.get(self.sitemap_url).text)
self.urls_l = [t["loc"] for t in data["urlset"]["url"]]
except Exception as e:
print("爬取sitemap.xml報錯:", e)
return
self.push()
def push(self):
url = "http://data.zz.baidu.com/urls?site={}&token={}".format(
self.site_domain, self.baidu_token)
headers = {"Content-Type": "text/plain"}
r = requests.post(url, headers=headers, data="\n".join(self.urls_l))
data = r.json()
print("成功推送{}條url到百度搜索資源平台".format(data.get("success", 0)))
print("今天還剩余的可推送條數:", data.get('remain', 0))
not_same_site = data.get('not_same_site', [])
not_valid = data.get("no_valid", [])
if len(not_same_site) > 0:
print("由於不是本站url而未處理的url有{}條:".format(len(not_same_site)))
for t in not_same_site:
print(t)
if len(not_valid) > 0:
print("不合法的url有{}條:".format(len(not_valid)))
for t in not_valid:
print(t)
if __name__ == "__main__":
site_domain = "https://soapffz.com" # 在這裡填寫你的网站
sitemap_url = "https://soapffz.com/sitemap.xml" # 在這裡填寫你的 sitemap.xml 完整鏈接
baidu_token = "" # 填寫你的百度token
BaiduLinkSubmit(site_domain, sitemap_url, baidu_token)
我這裡測試了三次,分別對應正常情況、我關掉sitemap
插件和我亂寫sitemap
的情況
效果如下:
MIP& 網頁加速#
百度站長平台是這麼介紹的:
- MIP (Mobile Instant Page - 移動網頁加速器),是一套應用於移動網頁的開放性技術標準。通過提供 MIP-HTML 規範、MIP-JS 運行環境以及 MIP-Cache 頁面緩存系統,實現移動網頁加速。
- AMP(Accelerated Mobile Pages)是谷歌的一項開放源代碼計劃,可在移動設備上快速加載的輕便型網頁,旨在使網頁在移動設備上快速加載並且看起來非常美觀。百度目前可支持 AMP 提交。
反正就是針對移動端的加速,肯定對SEO
有好處
這裡使用的插件是Holmesian大佬的工具Typecho-AMP
插件後台界面如圖所示:
可以看到還支持百家號,但是我這裡不需要 @(滑稽),所以只要設置接口就可以了,
然後在控制台的下拉菜單中可以看到有個推送AMP/MIP
到百度按鈕:
點進去如圖所示:
嘗試推送一下:
發現推送不了,折騰了一會主機也沒弄好,看了下主動推送規則發現非常有趣
和基礎鏈接提交就在鏈接後面加了個mip/amp
,返回的參數變為success_mip/success_amp
等
所以把上面的代碼改一下,就把推送url
和推送給mip/amp
的代碼放在一起同時推送: