php自动生成百度开放适配PC页-手机页pattern对应关系sitemap.xml
以前做百度开放适配一直是提交普通的 url 对应关系,这种方式有个缺点,就是必须每个页面的 url 关系都得兼顾,即有多少就得提交多少。
然而,很多网站并不是 WordPress 建站,所以以往我提供的 php 代码也无法满足所有网站的需求。遇到这种难题,其实百度也提供了另一种关系提交——PC 页-手机页 pattern 对应关系。
这种对应关系的优点在于,每一种 url 形式只需要提交一组具备正则对应关系的 xml 数据结构即可。
一、文章关系
对应文章页面,我的博客是%post_id%.html 的格式,剩下的也只是 PC 域名和移动域名的对应关系,所以文章页面pattern 对应关系可如下提交:
<url>
<loc>http://zhangge.net</loc>
<lastmod>2014-10-14T09:49:59+00:00</lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
<data>
<display>
<pc_url_pattern>http://zhangge.net/(d+).html</pc_url_pattern>
<xhtml_url_pattern>http://m.zhangge.net/${1}.html</xhtml_url_pattern>
</display>
</data>
</url>
这样一组对应关系的提交,即可完成网站所有文章的百度开放适配。
二、分类关系
同样的,按照上面的对应结构,可以轻而易举的写出 wordpress 分类的 pattern 对应关系:
<url>
<loc>http://zhangge.net</loc>
<lastmod>2014-10-14T09:49:59+00:00</lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
<data>
<display>
<pc_url_pattern>http://zhangge.net/(w+)</pc_url_pattern>
<xhtml_url_pattern>http://m.zhangge.net/${1}</xhtml_url_pattern>
</display>
</data>
</url>
这 2 组 pattern 对应关系就能完成我博客的所有页面的开放适配,简单吧?!
三、关系组合
按照 xml 的格式,将上述 2 组关系组合在一起,保存为 sitemap_pn.xml 文件,就可以去百度开放适配提交了:
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:mobile="http://www.baidu.com/schemas/sitemap-mobile/1/">
<url>
<loc>http://zhangge.net</loc>
<lastmod>2014-10-14T09:49:59+00:00</lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
<data>
<display>
<pc_url_pattern>http://zhangge.net/(d+).html</pc_url_pattern>
<xhtml_url_pattern>http://m.zhangge.net/${1}.html</xhtml_url_pattern>
</display>
</data>
</url>
<url>
<loc>http://zhangge.net</loc>
<lastmod>2014-10-14T09:49:59+00:00</lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
<data>
<display>
<pc_url_pattern>http://zhangge.net/(w+)</pc_url_pattern>
<xhtml_url_pattern>http://m.zhangge.net/${1}</xhtml_url_pattern>
</display>
</data>
</url>
</urlset>
四、php 代码
眼尖的朋友,应该发现了,xml 中的时间是写死的,这样会不会有问题就不知道了。看来还是弄个动态的时间比较靠谱,于是写了一个 php 代码如下:
<?php
header("Content-type: text/xml");
header('HTTP/1.1 200 OK');
echo '<?xml version="1.0" encoding="UTF-8"?>';
echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:mobile="http://www.baidu.com/schemas/sitemap-mobile/1/">'
?>
<url>
<loc><?php echo 'http://'.$_SERVER['HTTP_HOST']; ?></loc>
<lastmod><?php echo $showtime=date("Y-m-dTH:i:s+00:00");?></lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
<data>
<display>
<pc_url_pattern>http://zhangge.net/(d+).html</pc_url_pattern>
<xhtml_url_pattern>http://m.zhangge.net/${1}.html</xhtml_url_pattern>
</display>
</data>
</url>
<url>
<loc><?php echo 'http://'.$_SERVER['HTTP_HOST']; ?></loc>
<lastmod><?php echo $showtime=date("Y-m-dTH:i:s+00:00");?></lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
<data>
<display>
<pc_url_pattern>http://zhangge.net/(w+)</pc_url_pattern>
<xhtml_url_pattern>http://m.zhangge.net/${1}</xhtml_url_pattern>
</display>
</data>
</url>
</urlset>
这样,百度抓取的时候,时间也就是博客最后更新的时间了,而非写死的时间。最后,将以上代码保存为 sitemap_pn.php 文件并上传到网站根目录。
五、提交关系
每个在百度站长平台验证过的网站都具备百度开放适配的权限。
直接打开数据提交地址:http://zhanzhang.baidu.com/mobiletools/add 提交这个 php 文件的地址即可:
如果没有出现编码错误,基本上就可以通过了:
显示数量为 2 ,因为文件只提交了 2 组 pattern 对应关系。
六、拓展阅读
上文其实是想告诉大家,如果你的网站不好生成 url 对应关系的 sitemap,可以写一个 pattern 级别的 sitemap,将网站的对应关系,按照 pattern 格式分组列出即可,而无需苦恼动态脚本。
注意事项:
①、pattern 对应关系涉及的正则表达式,百度官方已说明只支持数字正则(d+)和数字字母组合的(w+);
具体可以参考上文的 pattern 对应关系或者百度给出的范例:http://zhanzhang.baidu.com/site/format?id=388
②、不要使用记事本编写相关代码,xml 的编码问题会非常蛋疼,推荐用 EditPlus 等工具来编写;
③、根据实际情况正确选择网站版式:<xhtml_url_pattern>、<wml_url_pattern>、<html5_url_pattern>。
④、企业网站若有需要,张戈博客可提供有偿适配服务:50 元/次,包括 xml、META 申明等。
关于开放适配的教程写到这就全部结束了,我会找个时间整理总结一个终结篇,方便有需要的人查看,敬请期待。
- php概述
- php教程
- php环境搭建
- PHP书写格式
- php变量
- php常量
- PHP注释
- php数组
- php字符串 string
- PHP整型 integer
- PHP浮点型 float
- php布尔型
- php数据类型之数组
- php数据类型之对象
- php数据类型之null
- php数据类型之间的转换
- php运算符
- php表达式
- PHP循环控制
- PHP流程控制
- php函数
- php全局变量
- PHP魔术变量
- php命名空间
- php 日期
- PHP包含文件
- php文件
- PHP 文件上传
- php Cookies
- php Sessions
- php email
- php安全email
- php错误处理
- PHP异常处理
- php过滤器
- PHP 高级过滤器
- php json
- php 表单
- PHP MySQL 简介
- PHP 连接 MySQL
- php创建数据库
- php 创建表
- php mysq 插入数据
- PHP MySQL 插入多条数据
- PHP MySQL 预处理语句
- php mysql 读取数据
- php mysql where
- PHP MySQL Order By
- PHP MySQL Update
- PHP MySQL Delete
- php ODBC
- Linux下部署springboot项目的方法步骤
- Linux、CentOS下安装zip与unzip指令功能(服务器)
- Linux上查看用户创建日期的几种方法总结
- 详解基于Linux的LVM无缝磁盘水平扩容
- CentOS平台实现搭建rsync远程同步服务器的方法
- CentOS 8设置自动更新的完整步骤
- linux 网络编程 socket选项的实现
- Ubuntu16.04安装Jenkins的方法图文详解
- leetcode树之对称二叉树
- linux 上在指定时间段内每隔多少分钟自动执行任务计划crontab
- 详解如何使用Spark和Scala分析Apache访问日志
- Centos 7.4中的远程访问控制的实现方法
- Linux查找特定程序whereis实例详解
- SpringBoot实战(二):SpringMvc接收xml请求
- CentOS环境下安装PHPUnit的方法分析