什么是定時自動發布?
定時自動發布,顧名思義就是讓程序去執行,每隔x時間就發布n條網站內容。如果你有服務器,那你有多種選擇,如計劃任務等都可以實現,我這里說的定時發布算是一種通用的方法,不論是獨立服務器還是虛擬主機網站都可以使用。
網站定時自動發布有什么用?
網站定時自動發布內容對于網站優化來說是非常有必要的,它能讓蜘蛛形成習慣,給搜索引擎營造一個良好的形象。幾乎所有做seo的朋友應該都知道,有規律地更新內容。但事實上,因為各種的原因,如忙、如忘了等等,很難長時間去堅持。拿筆者來說,有時間有心情的時候可能一口氣寫十幾二十篇文章,而忙(也不一定是忙)的時候可能就什么都顧不上了。
一般情況下,蜘蛛在爬行完某個網站之后,抓取了該網站的所有有用信息,然后隔一段時間會再來查看網站內容是否有更新,還有沒有新的內容需要抓取,然后根據網站更新的頻率等因素逐漸養成蜘蛛定時爬行網站的習慣。因為蜘蛛的爬行特性是,網站的更新頻率決定了蜘蛛來爬行的頻率。如果網站更新的越頻繁,新內容越多,蜘蛛就會爬行的越頻繁、越快,相應的,收錄的也會越快和越多。所以,要想網站獲得好的排名,首先要保證網站的頁面收錄和蜘蛛對網站的良好爬行頻率,這樣優化做起來事倍功半。
虛擬主機實現定時自動發布的原理
應該是09年的時候,我接了第一個seo的項目,本來只是給客戶開發了網站,后來就整個承接下來了,包括內容更新、排名優化……說起來都是淚啊~當時就出現上面說到的問題,我不能堅持去更新內容,然后就有了目前的定時發布功能(懶人就需要有懶人的覺悟^_^)。
先看一下正常發布網站數據是怎樣一個過程:新增文章 > 編輯內容 > 點擊提交。這里需要點擊,難道我們需要用按鍵精靈?但是內容怎么來呢?按鍵精靈是無法編輯內容的。
換一種思路,發布內容的本質是什么?網數據庫追加一條數據。那么我們就可以讓程序來追加數據。同樣,數據哪里來?采集 > 添加,好像還不錯,只是我不需要采集,需要人工編輯,所以……
定時自動發布的原理其實非常簡單:數據提前錄入,在數據庫中增加一個字段,比如status,默認為0,前臺調用那些status=1的數據,那么對于前臺,對于用戶,對于搜索引擎來說,那些staus=0的數據是沒有發布的。我們只需要用程序定時把部分status=0的數據修改成status=1即可。
虛擬主機實現定時自動發布的方法
原理我們明白了,但怎么才能實現呢?虛擬主機是無法創建計劃任務的,我們也不能寫一段程序讓它一直執行(太耗資源)。最終我的做法是,當用戶訪問網站的時候觸發定時發布。比如www.kredytypozyczki.net,當用戶訪問這個網站的時候,我們來判斷是否需要發布內容就好。
到此,有朋友可能就要問了:我的網站是新站沒人訪問怎么辦?這個問題其實不能解決。首先,新站你必須要加更多的關注度,你的訪問也是網站的一個用戶。另外,提交搜索引擎,添加外鏈引蜘蛛(蜘蛛也是網站的用戶)都是很好的處理措施。
1、后臺添加對應的接口,用戶保存發布時間間隔,開始發布的時間和結束的發布時間
2、建立一個表,至少需要一個字段用于記錄上次發布的時間,如ID | time
3、虛擬主機實現定時自動發布的函數
function autoPush(){ $conf=S('conf');//一些系統配置文件,包括站點名稱、域名、發布時間間隔、開始時間、結束時間等等 if($conf['day']){//如果設定了發布時間間隔 為0的時候不自動發布 $time=M('Time')->getField('time');//上次發布時間 $now=time();//現在時間 $hour=date('H',$now);//當前幾點了 if($hour>$conf['start'] && $hour<$conf['end'] && $now-$time>$conf['day']*86400){ //如果當前小時數>發布開始時間 并且 小于發布結束時間 并且 與上次發布時間間隔超過設定的發布時間間隔 就 該發布了 //$conf['start']為發布開始時間 $conf['end']為發布結束時間 $conf['day']為發布間隔時間 我設定的是天,支持2位浮點數,如0.01天,大約為14分鐘 $value=M('Article')->where('s=0')->order('id asc')->find();//找到需要發布的內容 這里的是就是上文提到的status用于判斷是否發布 if($value){ //如果存在沒有發布的內容 $value['s']=1;//設置為發布 $value['addtime']=$now;//設置時間(注意,前臺程序的時間建議是發的時間而不是后臺添加編輯的時間) //下面的代碼用于自動推送 如果你沒有相關功能或需求 只需要更新數據庫即可:M('Article')->save($value) $path=M('Category')->where('id='.$value['bid'])->getField('path'); if(M('Article')->save($value)){ $url='http://www.'.$conf['domain'].'/'.$path.'blog-'.$id.'.html'; if(push($url)){ M('Article')->where('id='.$value['id'])->setField('push',1); } } } //最后,不要忘了更新那個記錄上次發布時間的表 M('Time')->where('id=1')->setField('time',$now); } } }
4、在前臺每個用戶可訪問的頁面調用該函數。前期沒什么用戶的時候,建議后臺也加上,這樣你在訪問后臺的時候也能調用該函數實現定時自動發布。我用的是ThinkPHP,所以在emptyController中調用一次即可。
效果與優化
上面是一個雕塑網站(www.yuhaids.com)的發布情況,從圖中可以看出發布時間間隔基本都是12分鐘。到此,我又覺得這規律性太強了,很明顯不是人為操作,不知道是不是想到了,但我還是改了一下,讓其時間看上去更自然一些。就是在更新本次發布時間的時候加一個隨機值(我取的是1到10分鐘):
$now=$now+rand(1,10)*60; M('Time')->where('id=1')->setField('time',$now);
© 致遠 2020-02-06,原創內容,轉載請注明出錯:虛擬主機網站定時自動發布的思路與實現方法(php)