百度Sitemap工具升级版内测,附移动sitemap.xml的php代码(支持响应式) | 张戈博客

  • 时间:
  • 浏览:2

早上在研究如保禁止百度转码和百度网页缓存时,在百度站长平台看多了新消息提示,查看有如下内容:

看来俺博客的移动开放适配和移动站的建设已得到了百度的认可,我长期来的研究努力并这么白费。人太好却说人很多再认可用二级域名再弄一个多多移动站的做法,却说更加推崇响应式网页,甚至谷歌也老要推荐响应式建站。

在我看来,假如做好PC站和移动站的适配工作,无论是从体验还是从SEO角度上看,二级域名做移动站和使用响应式的区别很多再大。

最有说服力的案例却说百度搜索,百度买车人都老要用的二级域名做移动站:http://m.baidu.com/,却说,用二级域名走移动站,绝对很多再被百度搜索所排斥!这不,百度都给俺的移动站发邀请了,一切就清白了吧!

收到邀请后,我第一时间修改了php代码,并提交了针对m.zhang.ge的sitemap,下面简单说下步骤:

一、php代码

以下是摘自百度官方的移动Sitemap协议的帮助文件:

百度推出了移动Sitemap协议,用于将网址提交给移动搜索收录。百度移动Sitemap协议是在标准Sitemap协议基础上制定的,增加了<mobile:mobile/>标签,它有一种生活取值:

<mobile:mobile/> :移动网页
<mobile:mobile type="mobile"/> :移动网页      
<mobile:mobile type="autoadapt"/>:自适配网页,适用于同一网址页面,会随设备不同改变展现的情形。        
无该标签表示PC的网页

根据以上说明,可推出如下一种生活可用的移动sitemap生成php脚本(适合WordPress,一种生活多多进程 仅供参考):

①、非响应式WordPress网站适用(适用于二级域名做移动站):

<?php
require('./wp-blog-header.php');
header("Content-type: text/xml");
header('HTTP/1.1 30 OK');
$posts_to_show = 30;
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/">'
?>
<!-- generated-on=<?php echo get_lastpostdate('blog'); ?> Diy By 张戈博客(https://zhang.ge)-->
  <url>
      <loc><?php echo 'http://'.$_SERVER['HTTP_HOST']; ?></loc>
      <mobile:mobile type="mobile"/>
      <lastmod><?php $ltime = get_lastpostmodified(GMT);$ltime = gmdate('Y-m-d\TH:i:s+00:00', strtotime($ltime)); echo $ltime; ?></lastmod>
      <changefreq>daily</changefreq>
      <priority>1.0</priority> 
  </url>
<?php
/* 文章页面 */
$myposts = get_posts( "numberposts=" . $posts_to_show );
foreach( $myposts as $post ) { ?>
  <url>
      <loc><?php the_permalink(); ?></loc>
      <mobile:mobile type="mobile"/>
      <lastmod><?php the_time('c') ?></lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
    </url>
<?php } /* 文章循环现在开使 */?>
<?php
/* 单页面 */ 
$mypages = get_pages();
if(count($mypages) > 0) {
    foreach($mypages as $page) { ?>
    <url>
      <loc><?php echo get_page_link($page->ID); ?></loc>
      <mobile:mobile type="mobile"/>
      <lastmod><?php echo str_replace(" ","T",get_page($page->ID)->post_modified); ?></lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
  </url>
<?php }} /* 单页面循环现在开使 */ ?> 
<?php
/* 博客分类 */ 
$terms = get_terms('category', 'orderby=name&hide_empty=0' );
$count = count($terms);
if($count > 0){
foreach ($terms as $term) { ?>
    <url>
      <loc><?php echo get_term_link($term, $term->slug); ?></loc>
      <mobile:mobile type="mobile"/>
      <changefreq>weekly</changefreq>
      <priority>0.8</priority>
  </url>
<?php }} /* 分类循环现在开使 */?> 
<?php
 /* 标签(可选) */
	$tags = get_terms("post_tag");
	foreach ( $tags as $key => $tag ) {
			   $link = get_term_link( intval($tag->term_id), "post_tag" );
			   if ( is_wp_error( $link ) )
			      return false;
			      $tags[ $key ]->link = $link;
?>
 <url>
      <loc><?php echo $link ?></loc>
      <mobile:mobile type="mobile"/>
      <changefreq>monthly</changefreq>
      <priority>0.4</priority>
  </url>
<?php  } /* 标签循环现在开使 */ ?> 
</urlset>

②、响应式WordPress网站适用:

<?php
require('./wp-blog-header.php');
header("Content-type: text/xml");
header('HTTP/1.1 30 OK');
$posts_to_show = 30;
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/">'
?>
<!-- generated-on=<?php echo get_lastpostdate('blog'); ?> Diy By 张戈博客(https://zhang.ge)-->
  <url>
      <loc><?php echo 'http://'.$_SERVER['HTTP_HOST']; ?></loc>
      <mobile:mobile type="mobile"/>
      <lastmod><?php $ltime = get_lastpostmodified(GMT);$ltime = gmdate('Y-m-d\TH:i:s+00:00', strtotime($ltime)); echo $ltime; ?></lastmod>
      <changefreq>daily</changefreq>
      <priority>1.0</priority> 
  </url>
<?php
/* 文章页面 */
$myposts = get_posts( "numberposts=" . $posts_to_show );
foreach( $myposts as $post ) { ?>
  <url>
      <loc><?php the_permalink(); ?></loc>
      <mobile:mobile type="autoadapt"/>
      <lastmod><?php the_time('c') ?></lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
    </url>
<?php } /* 文章循环现在开使 */?>
<?php
/* 单页面 */ 
$mypages = get_pages();
if(count($mypages) > 0) {
    foreach($mypages as $page) { ?>
    <url>
      <loc><?php echo get_page_link($page->ID); ?></loc>
      <mobile:mobile type="autoadapt"/>
      <lastmod><?php echo get_page($page->ID)->post_modified; ?></lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
  </url>
<?php }} /* 单页面循环现在开使 */ ?> 
<?php
/* 博客分类 */ 
$terms = get_terms('category', 'orderby=name&hide_empty=0' );
$count = count($terms);
if($count > 0){
foreach ($terms as $term) { ?>
    <url>
      <loc><?php echo get_term_link($term, $term->slug); ?></loc>
      <mobile:mobile type="autoadapt"/>
      <changefreq>weekly</changefreq>
      <priority>0.8</priority>
  </url>
<?php }} /* 分类循环现在开使 */?> 
<?php
 /* 标签(可选) */
	$tags = get_terms("post_tag");
	foreach ( $tags as $key => $tag ) {
			   $link = get_term_link( intval($tag->term_id), "post_tag" );
			   if ( is_wp_error( $link ) )
			      return false;
			      $tags[ $key ]->link = $link;
?>
 <url>
      <loc><?php echo $link ?></loc>
      <mobile:mobile type="autoadapt"/>
      <changefreq>monthly</changefreq>
      <priority>0.4</priority>
  </url>
<?php  } /* 标签循环现在开使 */ ?> 
</urlset>

③、响应式二合一做法:

机会是响应式网站,人太好可以将PC版sitemap改造一下,同時 兼顾百度PC搜索和移动搜索,代码如下:

<?php
require('./wp-blog-header.php');
header("Content-type: text/xml");
header('HTTP/1.1 30 OK');
$posts_to_show = 30;
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/">'
?>
<!-- generated-on=<?php echo get_lastpostdate('blog'); ?> Diy By 张戈博客(https://zhang.ge)-->
  <url>
      <loc><?php echo 'http://'.$_SERVER['HTTP_HOST']; ?></loc>
      <mobile:mobile type="mobile"/>
      <lastmod><?php $ltime = get_lastpostmodified(GMT);$ltime = gmdate('Y-m-d\TH:i:s+00:00', strtotime($ltime)); echo $ltime; ?></lastmod>
      <changefreq>daily</changefreq>
      <priority>1.0</priority> 
  </url>
<?php
$myposts = get_posts( "numberposts=" . $posts_to_show );
foreach( $myposts as $post ) { ?>
  <url>
      <loc><?php the_permalink(); ?></loc>
      <lastmod><?php the_time('c') ?></lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
    </url>
  <url>
      <loc><?php the_permalink(); ?></loc>
      <mobile:mobile type="autoadapt"/>
      <lastmod><?php the_time('c') ?></lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
    </url>
<?php } ?>
<?php
/* 单页面 */ 
$mypages = get_pages();
if(count($mypages) > 0) {
    foreach($mypages as $page) { ?>
	  <url>
      <loc><?php echo get_page_link($page->ID); ?></loc>
      <lastmod><?php echo str_replace(" ","T",get_page($page->ID)->post_modified); ?></lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
    </url>
    <url>
      <loc><?php echo get_page_link($page->ID); ?></loc>
      <mobile:mobile type="autoadapt"/>
      <lastmod><?php echo str_replace(" ","T",get_page($page->ID)->post_modified); ?></lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
  </url>
<?php }} /* 单页面循环现在开使 */ ?> 
<?php
/* 博客分类 */ 
$terms = get_terms('category', 'orderby=name&hide_empty=0' );
$count = count($terms);
if($count > 0){
foreach ($terms as $term) { ?>
	 <url>
      <loc><?php echo get_term_link($term, $term->slug); ?></loc>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
    </url>
    <url>
      <loc><?php echo get_term_link($term, $term->slug); ?></loc>
      <mobile:mobile type="autoadapt"/>
      <changefreq>weekly</changefreq>
      <priority>0.8</priority>
  </url>
<?php }} /* 分类循环现在开使 */?> 
<?php
 /* 标签(可选) */
	$tags = get_terms("post_tag");
	foreach ( $tags as $key => $tag ) {
			   $link = get_term_link( intval($tag->term_id), "post_tag" );
			   if ( is_wp_error( $link ) )
			      return false;
			      $tags[ $key ]->link = $link;
?>
<url>
      <loc><?php echo $link ?></loc>
      <changefreq>monthly</changefreq>
      <priority>0.4</priority>
</url>
 <url>
      <loc><?php echo $link ?></loc>
      <mobile:mobile type="autoadapt"/>
      <changefreq>monthly</changefreq>
      <priority>0.4</priority>
  </url>
<?php  } /* 标签循环现在开使 */ ?> 
</urlset>

请根据网站实际情形,选折 相当于的代码保存为sitemap_mob.php,并上传到网站根目录。

也都这么浏览器访问:http://m.zhang.ge/sitemap_mob.php 查看效果。

Ps:机会响应式网站,推荐使用二合一的php代码,可同時 提交向百度提交PC和移动的数据,从而处理转码困扰。

④、福利:针对响应式网站,若还没开通百度sitemap权限,可制作开放适配专用的sitemap

代码如下:

<?php
require('./wp-blog-header.php');
header("Content-type: text/xml");
header('HTTP/1.1 30 OK');
$posts_to_show = 30;  //限制最大生成30篇
echo '<?xml version="1.0" encoding="UTF-8"?>';
echo '<urlset xmlns:xsi="http://www.w3.org/301/XMLSchema-instance" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">';
?>
<!-- generated-on=<?php echo get_lastpostdate('blog'); ?> Diy By 张戈博客(https://zhang.ge)-->
 <url>
 <loc><?php echo 'http://'.$_SERVER['HTTP_HOST']; ?></loc>
 <lastmod><?php $ltime = get_lastpostmodified(GMT);$ltime = gmdate('Y-m-d\TH:i:s+00:00', strtotime($ltime)); echo $ltime; ?></lastmod>
      <changefreq>daily</changefreq>
      <priority>1.0</priority>
        <data>
         <display>
           <html5_url><?php echo 'http://'.$_SERVER['HTTP_HOST']; ?></html5_url>
         </display>
         </data>
  </url>
<?php
/* 文章页面 */
header("Content-type: text/xml");
$myposts = get_posts( "numberposts=" . $posts_to_show );
foreach( $myposts as $post ) { ?>
  <url>
      <loc><?php the_permalink(); ?></loc>
      <lastmod><?php the_time('c') ?></lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
       <data>
         <display>
           <html5_url><?php the_permalink(); ?></html5_url>
         </display>
         </data>
    </url>
<?php } /* 文章循环现在开使 */ ?>
<?php
/* 单页面 */ 
$mypages = get_pages();
if(count($mypages) > 0) {
    foreach($mypages as $page) { ?>
    <url>
      <loc><?php echo get_page_link($page->ID); ?></loc>
      <lastmod><?php echo str_replace(" ","T",get_page($page->ID)->post_modified); ?></lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.6</priority>
      <data>
         <display>
           <html5_url><?php echo get_page_link($page->ID); ?></html5_url>
         </display>
         </data>
  </url>
<?php }} /* 单页面循环现在开使 */ ?> 
<?php
/* 博客分类 */ 
$terms = get_terms('category', 'orderby=name&hide_empty=0' );
$count = count($terms);
if($count > 0){
foreach ($terms as $term) { ?>
    <url>
      <loc><?php echo get_term_link($term, $term->slug); ?></loc>
      <changefreq>weekly</changefreq>
      <priority>0.8</priority>
      <data>
         <display>
           <html5_url><?php echo get_term_link($term, $term->slug); ?></html5_url>
         </display>
      </data>
  </url>
<?php }} /* 分类循环现在开使 */?> 
<?php
 /* 标签(可选) */
	$tags = get_terms("post_tag");
	foreach ( $tags as $key => $tag ) {
			   $link = get_term_link( intval($tag->term_id), "post_tag" );
			   if ( is_wp_error( $link ) )
			      return false;
			      $tags[ $key ]->link = $link;
?>
 <url>
      <loc><?php echo $link ?></loc>
      <changefreq>monthly</changefreq>
      <priority>0.4</priority>
      <data>
         <display>
           <html5_url><?php echo $link ?></html5_url>
         </display>
      </data>
  </url>
<?php  } /* 标签循环现在开使 */ ?> 
</urlset>

先根据网站的实际版式,修改代码中板式标签要素,即将<xhtml_url>标签替加在实际的网站版式,以下为一种生活网站版式,选折 一种生活即可:

<!— html5版式 -->
<html5_url></html5_url>

<!— wml版式 -->
<wml_url></wml_url>

<!— xhtml版式(常见版式) -->
<xhtml_url></xhtml_url>

很多再看版式的,请参考如下说明对比一下网站的申明:

XHTML版式申明:
<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" "http://www.wapforum.org/DTD/xhtml-mobile10.dtd">
WML版式申明:
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
HTML5版式申明:
<!DOCTYPE HTML>

修改完善后,同样将上述代码保存为sitemap_sp.php文件。上传到网站根目录,却说使用浏览器访问该文件确认无误后,打开http://zhanzhang.baidu.com/mobiletools/index,提交百度开放适配数据即可!所有验证过的网站,均可以提交百度开放适配数据!

当然以上代码是针对响应式写的,机会是非响应式网站,请参看张戈博客却说的文章:

移动搜索SEO分享:PHP自动生成百度开放适配及330移动适配专用的Sitemap文件

二、新增伪静态

①、Nginx做法

在原来的伪静态位置新增规则:

rewrite ^/sitemap_mob.xml$ /sitemap_mob.php last;

②、Apache做法

在.htaccess中新增规则:

RewriteRule ^(sitemap_mob)\.xml$ $1.php

保存后,在浏览器访问http://m.zhang.ge/sitemap_mob.xml 查看效果。

Ps:人太好百度支持提交php地址,却说第二步却说为了看起来更像xml文件而已,人太好可做可不做!!

三、前往提交

打开百度sitemap工具地址:http://zhanzhang.baidu.com/sitemap/index

选折 移动域名后提交上面的sitemap_mob.xml地址即可:

提交完毕,至于有那先 效果,就不得而知了,反正俺的博客的移动搜索原来就机会适配完善了:

不是给百度当了一次小白鼠,仅此而已。