百度站长 sitemap

作者: 王中阳 | 来源:发表于2016-11-26 01:09 被阅读77次

手册

实现流程

  1. 按照百度文档生成指定格式文件
  2. 写入文件到自己项目路径下
  3. 写定时脚本抓取新URL到项目路径下
  4. 注意:涉及多台服务器的情况:用rsync(linux),同步数据

流程代码

(1) 生成sitemap XML

<?php

/**
 * @desc      百度Sitemap生成类
 * @author    王中阳
 * @version   2016-11-23
 * @copyright 麦芽田
 */
class Tool_BaiduSitemap
{
    /**
     * 生成sitemap内容
     * todo 新特性 移动sitemap 参数3
     * @param  array $sitemapInfo
     * 参数1:loc,该页的网址。该值必须少于256个字节(必填项)。
     * 参数2:lastmod,该文件上次修改的日期(选填项)。格式为年-月-日
     * 参数3:百度新增移动sitemap  自适应(M PC) PC 需要区分
     * 参数4:changefreq,页面可能发生更改的频率(选填项)。有效值为:always、hourly、daily、weekly、monthly、yearly、never。
     * 参数5:priority,此网页的优先级。有效值范围从 0.0 到 1.0(选填项)。0.0优先级最低、1.0最高。
     * 注意:urlset需要配置xmlns:mobile="http://www.baidu.com/schemas/sitemap-mobile/1/ 一定要加
     * @return string
     */
    public static function createSitemapContents(array $sitemapInfo)
    {
        $sitemapContent = '';
        if (!empty($sitemapInfo) && is_array($sitemapInfo)) {
            $sitemapContent .= '<?xml version="1.0" encoding="UTF-8"?>';
            $sitemapContent .= '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" 
                                         xmlns:mobile="http://www.baidu.com/schemas/sitemap-mobile/1/">';
            foreach ($sitemapInfo as $key => $value) {
                $sitemapContent .= '<url>';
                $sitemapContent .= "<loc>{$value['url']}</loc>";
                $sitemapContent .= "<mobile:mobile type=\\"mobile\\"/>";
                $sitemapContent .= "<lastmod>{$value['lastmod']}</lastmod>";
                $sitemapContent .= "<changefreq>{$value['changefreq']}</changefreq>";
                $sitemapContent .= "<priority>{$value['priority']}</priority>";
                $sitemapContent .= '</url>';
                unset($sitemapInfo[$key], $key, $value);
            }
            $sitemapContent .= '</urlset>';
        }
        return $sitemapContent;
    }

    /**
     * 生成sitemap索引内容
     * @param  array $sitemapIndexInfo
     * 参数1:loc,该页的网址。该值必须少于256个字节(必填项)。
     * 参数2:lastmod,该文件上次修改的日期(选填项)。格式为年-月-日
     * @return string
     */
    public static function createSitemapIndexContents(array $sitemapIndexInfo)
    {
        $sitemapIndexContent = '';
        if (!empty($sitemapIndexInfo) && is_array($sitemapIndexInfo)) {
            $sitemapIndexContent .= '<sitemapindex>';
            foreach ($sitemapIndexInfo as $key => $value) {
                $sitemapIndexContent .= '<sitemap>';
                $sitemapIndexContent .= "<loc>{$value['url']}</loc>";
                $sitemapIndexContent .= "<lastmod>{$value['lastmod']}</lastmod>";
                $sitemapIndexContent .= '</sitemap>';
                unset($sitemapIndexInfo[$key], $key, $value);
            }
            $sitemapIndexContent .= '</sitemapindex>';
        }
        return $sitemapIndexContent;
    }
}

(2) Sitemap Controller 结合自身逻辑,拼URL

<?php
include '../include/AutoRun.php';
include '../include/BaiduSitemap.php';
include '../include/Utils.php';
include '../include/MongoTool.php';

class Sitemap
{
    const LIMIT_NUM = 40000;
    const FILE_DIR = 'xml存储路径';
    const DOMAIN_HOME_URL = ' ';

    private $sitemapFilesInfo = array();

    public function __construct()
    {
    }

    public function createSitemap()
    {
        //单页URL
        $sitemapInfo = $this->getSinglePageURLs('home');
        $this->createBaiduSitemap('single', $sitemapInfo, 'home');
        //详情列表
        $sitemapInfo = $this->getArticlePageURLs();
        $this->createBaiduSitemap('article', $sitemapInfo, 'article');


//      sitemapIndex是区别于xml的另一种提交方式
        $this->createBaiduSitemapIndex();
    }

    /**
     * 获取所有单页面的URL地址,例如首页
     */
    private function getSinglePageURLs($type)
    {
        $sitemapInfo = array();
        $singlePage = array(
            'home' => array('' => '1.0', 'hot/' => '0.8', 'city/' => '0.6', 'price/' => '0.6', 'news/' => '0.6', 'guide/' => '0.6', 'reviews/' => '0.6'), //首页 行情列
        );
        foreach ($singlePage[$type] as $pageUrl => $priority) {
            $sitemapInfo[] = $this->getSitemapInfo($pageUrl, $priority, $type);
        }
        return $sitemapInfo;
    }


    private function getSitemapInfo($url, $priority, $type)
    {
        $preUrl = self::DOMAIN_HOME_URL;
        $freq = 'always';

        return array(
            'url' => $preUrl . $url,
            'lastmod' => date('Y-m-d'),
            'changefreq' => $freq,
            'priority' => $priority
        );
    }

    /**
     * 获取所有文章页面的URL
     */
    private function getArticlePageURLs()
    {
        $mongo = MongoTool::getDB('content', true)->selectCollection('article_info');
        $sitemapInfo = array();
        $data = $mongo->find();
        foreach ($data as $key => $value) {
            $url = $this->getArticleUrl($value);
            $sitemapInfo[] = $this->getSitemapInfo($url, '0.3', "article"); //文章页
        }
        return $sitemapInfo;
    }


    /**
     * 创建百度Sitemap文件
     */
    private function createBaiduSitemapFile($sitemapContents, $filePath)
    {
        if (!empty($sitemapContents) && !empty($filePath)) {
            // 创建文件
            file_put_contents(self::FILE_DIR . $filePath, $sitemapContents);

            // 为SitemapIndex文件记录生成过哪些Sitemap文件
            $this->sitemapFilesInfo[] = array(
                'url' => self::DOMAIN_HOME_URL . $filePath,
                'lastmod' => date('Y-m-d'),
            );
        }
    }

    /**
     * 创建百度Sitemap索引文件
     */
    private function createBaiduSitemapIndexFile($sitemapIndexContents, $filePath)
    {
        if (!empty($sitemapIndexContents) && !empty($filePath)) {
            // 创建文件
            file_put_contents(self::FILE_DIR . $filePath, $sitemapIndexContents);
        }
    }

    /**
     * 创建百度Sitemap
     */
    private function createBaiduSitemap($fileName, array $sitemapInfo, $save = 'all')
    {

        if (!empty($sitemapInfo) && is_array($sitemapInfo)) {
            $total = count($sitemapInfo);
            $pages = ceil($total / self::LIMIT_NUM);
            for ($i = 1; $i <= $pages; $i++) {
                $offset = self::LIMIT_NUM * ($i - 1);
                $partSitemapInfo = array_slice($sitemapInfo, $offset, self::LIMIT_NUM);

                $sitemapContents = Tool_BaiduSitemap::createSitemapContents($partSitemapInfo);
                unset($partSitemapInfo);
                $filePath = "m_{$fileName}_{$i}.xml";
                $this->createBaiduSitemapFile($sitemapContents, $filePath);
            }
            unset($sitemapInfo);
        }
    }

    /**
     * 创建百度SitemapIndex
     */
    private function createBaiduSitemapIndex()
    {
        // 拆分成2个方法是为了可以进一步处理哪些类型的页面需要生成到SitemapIndex文件中
        $sitemapFilesInfo = $this->sitemapFilesInfo;
        $pcSitemapFilesIndexInfo = $mSitemapFilesIndexInfo = array();

        if (!empty($sitemapFilesInfo) && is_array($sitemapFilesInfo)) {
            foreach ($sitemapFilesInfo as $info) {
                if (!stripos($info['url'], 'm.')) {
                    $pcSitemapFilesIndexInfo[] = $info;
                } else {
                    $mSitemapFilesIndexInfo[] = $info;
                }
            }

//            $this->createBaiduSitemapIndexFile(Tool_BaiduSitemap::createSitemapIndexContents($pcSitemapFilesIndexInfo), 'index.xml');
            $this->createBaiduSitemapIndexFile(Tool_BaiduSitemap::createSitemapIndexContents($mSitemapFilesIndexInfo), 'm_index.xml');
        }
    }

    //todo 优化
    function carConfig()
    {
        $db_car["hostname"] = "localhost";
        $db_car["username"] = "xxx";
        $db_car["password"] = "xxx";
        $db_car["database"] = "xxxx";
        $db_car["charset"] = "utf8";
        $db_car["pconnect"] = 0;
        $db_car["log"] = 0;
        $db_car["logfilepath"] = './';
        return $db_car;
    }

}

(3) linux写定时任务

  • 命令行:crontab -e
  • 参数1:定时
  • 参数2 路径
  • 参数3 执行程序
* */1 * * * cd /home/xxxx/xxx/xxxx/data; php create_xxxxx_sitemap.php

每小时执行一次创建sitemap的程序


一个敲代码,写文字的人,我在这里!

来玩啊

相关文章

  • 百度站长 sitemap

    手册 实现流程 按照百度文档生成指定格式文件 写入文件到自己项目路径下 写定时脚本抓取新URL到项目路径下 注意:...

  • 网站地图生成

    网站地图生成是使用站长工具_sitemap网站地图免费生成工具完成的,站长工具_sitemap网站地图免费生成工具...

  • 网站地图

    站长工具_sitemap网站地图免费生成工具(https://sitemap.webkk.net)提供便捷的在线工...

  • 头条sitemap生成_免费转换工具

    头条站长平台sitemap生成工具,如何免费快速的生成xml格式文件,我们可以参照头条站长官方给出的文档,开发我们...

  • wordpress插件:QQWorld自动保存图片-qqworl

    强尼笔记博客上次给大家分享了一个草根站长建站必须的WordPress插件——免费生成sitemap文件的googl...

  • Hexo博客Next主题SEO优化方法

    添加站点地图 安装插件 需要安装两个插件来生成 sitemap 文件,前一个是传统的 sitemap,后一个是百度...

  • Sitemap提交工具

    一、Sitemap介绍 1、什么是Sitemap 1)Sitemap协议 定义:Sitemap简称网站地图,就是网...

  • 颜癸悦站长交流会

    一、站长认证的成果优化 百度站长认证:​​ 必应站长认证:​ 网站体检:​ 加了站长认证,但是都未被收录 使用统计...

  • 网址收藏

    站长平台: 百度站长工具:https://ziyuan.baidu.com/dashboard/index 搜狗站...

  • 陈梓君站长交流会

    一、站长认证的成果优化 百度站长认证:​​ 必应站长认证:​​ 必应搜索域名结果:​​ 设置目标关键词:​​ 网站...

网友评论

    本文标题:百度站长 sitemap

    本文链接:https://www.haomeiwen.com/subject/dswwpttx.html