什么是站点地图(sitemap)?

百度百科的描述:Sitemap 可方便网站管理员通知搜索引擎他们网站上有哪些可供抓取的网页。最简单的 Sitemap 形式,就是XML 文件,在其中列出网站中的网址以及关于每个网址的其他元数据(上次更新的时间、更改的频率以及相对于网站上其他网址的重要程度为何等),以便搜索引擎可以更加智能地抓取网站。

我的思路

用php获取每天晚上11点之前的文章,并写入新建文件(2015-xx-xx-sitemap.xml)中,然后更新sitemap.xml 把新建文件写入进去;最后在Linux下写个定时任务,每天23点访问下这个链接就可以了。

PHP生成站点地图的代码


    $curDate = date('Y-m-d',time());
        $yesDate = date('Y-m-d',strtotime('-1 days'));
        $startTime = $yesDate." 23:00:00";
        $nowTime = $curDate." 23:00:00";
        $fxDetails = M('Details');
        $where['status'] = 3;
        $where['addtime']=array('between',array($startTime,$nowTime));
        $rs = $fxDetails->field('id,addtime')->where($where)->select();
        if(!$rs){
            return;
        }
        //用字符串拼接写入创建xml文件
        $str = '<?xml version="1.0" encoding="UTF-8" ?>';
        $str .= '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:mobile="http://www.baidu.com/schemas/sitemap-mobile/1/">';
        //print_r($rs);
        foreach ($rs as $v){
            $str .= '<url>';
            $str .= '<loc>http://XXX/detail/'.$v['id'].'.html</loc>';
            $str .= '<mobile:mobile type="pc,mobile"/>';
            $str .= '<lastmod>'.$curDate.'</lastmod>';
            $str .= '<changefreq>daily</changefreq>';
            $str .= '<priority>0.6</priority>';
            $str .= '</url>';            
        }
        $str .='</urlset>';
        $name = "sitemaps/".$curDate."-sitemap.xml";
        //不存在文件创建
        if(!file_exists($name)){
            $fl = file_put_contents($name, $str);
        }
       if($fl){
           //文件创建成功追加到sitemap.xml
            $newUrl = "http://XXX/".$name;
            $path=$_SERVER["DOCUMENT_ROOT"].'/sitemap.xml';
            $dom=new \DOMDocument('1.0', 'UTF-8');
            $dom->load($path);
            $dom->getElementsByTagName('lastmod')->item(0)->nodeValue=$curDate;
            $newSitemap=$dom->createElement('sitemap'); #创建新元素

            $newLoc=$dom->createElement('loc');#创建子元素
            $newLoc->nodeValue=$newUrl;
            $newSitemap->appendChild($newLoc);#把子元素添加到父元素上

            $newLastmod=$dom->createElement('lastmod');#创建子元素
            $newLastmod->nodeValue=$curDate;
            $newSitemap->appendChild($newLastmod);#把子元素添加到父元素上
            
            $dom->documentElement->appendChild($newSitemap);#添加整个节点
            $dom->save($path);
       }
    }
         Linux 定时访问此链接的方法:


      crontab -e
      * 23 * * *  curl http://XXX.com/sitemap.php
      这是我自己的写法,如果你有更好的方法,可以留言讨论~