提交百度网站地图时提示“xml根节点错误”的解决方法-赖皮兔-养宠物狗猫兔品种图片大全-找宠物店医院美容学校
赖皮兔  > 所属分类  >  网站事务   

提交百度网站地图时提示“xml根节点错误”的解决方法

暂无标签
[0] 评论[0] 编辑

   有网站优化经验的站长都知道站长地图,它的作用就是放置了网站上需要搜索引擎抓取的很多页面链接,非常有利于SEO优化。使用WordPress建站的站长因为都知道一款Baidu Sitemap Generator插件,它能自动生成百度XML文件,并且定时自动更新,有利于站长把链接提交给百度。

  不过小编近日遇到了一个问题,就是在通过百度站长平台去提交百度网站地图时,却提示:xml根节点错误。那么遇到这样的问题应该如何解决呢?经过摸索和测试了很多方法,小编整理了解决该问题的方法:

  在百度站长平台看到提交sitemap后显示:xml根节点错误。点击进去看到的建议解决方案是:请检查拼写,严格遵循规范修改xml文件后再提交。那么规范的xml文件是怎样的呢?我们来看下百度的sitemap规范(下图所示):

百度网站地图sitemap规范

  以上就是百度的sitemap规范,而小编通过对Baidu Sitemap Generator这款插件的代码查看发现,显示的xml标签和百度要求的规范标签不一样,而是使用了其他的标签名称。因此,小编将其标签进行了修改,修改方法如下:

登录空间根目录或者WordPress的插件里面,找到Baidu Sitemap Generator插件,将插件的php代码文件下载到本地使用DreamWeaver工具编辑或者直接在线编辑,小编推荐前者下载到本地电脑编辑。

  打开文件后查找document,把第187行和316行的document替换为urlset;再查找/item,把第282行和第298行的item替换为url;最后把第284行的两个link都替换为loc。保存文件后再上传覆盖掉原来的文件。

  最后在WordPress后台的设置一栏,找到Baidu-Sitemap,进去重新生成xml格式的网站地图。这样网站地图的几个标签就已经被修改过来了。小编将重新修改生成的xml格式地图提交给百度站长平台,就会显示正常了。

百度sitemap问题解决

  其实,在百度站长平台提交xml格式的网站地图时,如果有类似以上错误提示时,点进去看一下,百度会有错误详情提示和修改建议,站长根据提示进行修改即可。

HDwiki中同样问题的解决办法\model\sitemap.class.php中的227行左右开始修改


<?php

!defined('IN_HDWIKI') && exit('Access Denied');

class sitemapmodel {

	var $db;
	var $base;
	var $xml;
	var $baiduxml;

	function sitemapmodel(&$base) {
		$this->base = $base;
		$this->db = $base->db;
		$this->setting = unserialize($this->base->setting['sitemap_config']);
		$this->baiduxml = HDWIKI_ROOT.'/baidu.xml';
	}
	
	/**
	 * 创建分页的词条 sitemap. 有剩余返回当前offset,无剩余返回false
	 *
	 * @return mixed
	 */
	function create_doc_page() {
		//获取上次创建分页;
		$current_page = $this->_lastpage_get();
		//如果实际总分页小于当前分页(生成sitemap后又删除一些词条的情况下),则当前页=总分页。
		$rs = $this->db->fetch_first("SELECT count(did) as count_id from ".DB_TABLEPRE."doc where visible = 1");
		$total_page = empty($rs['count_id']) ? 0 : floor($rs['count_id']/1000);
		if($total_page < $current_page) {
			$current_page = $total_page;
		}
				
		$current_offset = $current_page * 1000;
		$query = $this->db->query("SELECT did, title, lastedit FROM ".DB_TABLEPRE."doc where visible = 1 order by did asc limit {$current_offset}, 1000");
		$this->_sitemap_start_new();
		$doc = array();
		$page_last_did = 0;
		while($row = $this->db->fetch_array($query)){
			$doc_id = ('1'==$this->base->setting['seo_type'] && '1'==$this->base->setting['seo_type_doc']) ? rawurlencode(string::hiconv($row['title'])) : $row['did'];
			$doc['loc']        = WIKI_URL.'/'.$this->base->view->url("doc-view-{$doc_id}");
			$doc['lastmod']    = gmdate('Y-m-d\TH:i:s+00:00', $row['lastedit']);
			$doc['changefreq'] = $this->setting['doc_changefreq']; //////////////////
			$doc['priority']   = "0.8"; ////////////////
			$this->_sitemap_add_item($doc);
			$page_last_did = $row['did'];
		}		
		$this->_sitemap_end_save('sitemap_doc_'.$current_page);
		
		if($this->db->affected_rows() < 1000) { //如果当前不足一页(每页1000条),则记录最后页为当前页,下次更新继续以当前页更新。
			$this->_lastpage_log($current_page);
		} else { //否则记录下次更新以下页开始更新。
			$this->_lastpage_log($current_page + 1);
		}
		
		$rs = $this->db->fetch_first("SELECT max(did) as max_id from ".DB_TABLEPRE."doc where visible = 1");
		if(!empty($rs['max_id']) && $page_last_did < $rs['max_id']) { //如果当前页最后一条的did小于数据库中的最大did,则表示尚未完毕
			return $current_offset;
		} else { //如果是最后,创建索引页
			$this->_create_index();
			return false;
		}
	}
	
	function _lastpage_get() {
		$fh = fopen(HDWIKI_ROOT.'/data/sitemap_last_page.log', 'a+');
		$page = fgets($fh);
		return $page ? $page : 0;
	}
	
	function _lastpage_log($page) {
		$fh = fopen(HDWIKI_ROOT.'/data/sitemap_last_page.log', 'wb+');
		fwrite($fh, $page);
		fclose($fh);
	}
	
	function rebuild() { //重置Sitemap
		$this->_remove_all_sitemaps();
		$this->_lastpage_log(0);
	}
	
	function _remove_all_sitemaps() {
		$dh = opendir(HDWIKI_ROOT); 
		while($filename = readdir($dh)){
		    if(strpos($filename, '.xml') !== false && strpos($filename, 'sitemap') !== false) {
				unlink(HDWIKI_ROOT.'/'.$filename);
		    }
		}
		closedir($dh);
	}
	
	function _create_index() {
		$this->_create_home();
		$xml = <<<XML
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created by BaiTanLa -->
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
XML;
		$dh = opendir(HDWIKI_ROOT); 
		while($filename = readdir($dh)){
		    if($this->_is_sitemap($filename)) {
		    	$filemtime = gmdate('Y-m-d\TH:i:s+00:00', filemtime($filename));
		    	$xml .= "<sitemap><loc>".WIKI_URL."/{$filename}</loc><lastmod>{$filemtime}</lastmod></sitemap>";
		    }
		}
		closedir($dh);
		$xml .= '</sitemapindex>';
		
		$filename = 'sitemap';
		if($this->setting['use_gzip']) {
			$filename = $filename.'.xml.gz';
			$fh = fopen($filename, 'wb+');
			fwrite($fh, gzencode($xml));
		} else {
			$filename = $filename.'.xml';
			$fh = fopen($filename, 'wb+');
			fwrite($fh, $xml);
		}
		fclose($fh);
		$xml = null;
	}
	
	function _is_sitemap($filename) {
		if($this->setting['use_gzip']) {
			return $filename != 'sitemap.xml.gz' && substr($filename, -7) == '.xml.gz' && strpos($filename, 'sitemap') !== false;
		} else {
			return $filename != 'sitemap.xml' && substr($filename, -4) == '.xml' && strpos($filename, 'sitemap') !== false;
		}
	}
	
	//生成首页sitemap
	function _create_home() {
		$this->_sitemap_start_new();
		$url['loc']        = WIKI_URL;
		$url['lastmod']    = gmdate('Y-m-d\TH:i:s+00:00');
		$url['changefreq'] = $this->setting['idx_changefreq']; //////////////////
		$url['priority']   = "1.0"; ////////////////
		$this->_sitemap_add_item($url);
		$this->_sitemap_end_save('sitemap_idx');
	}
	
	function _sitemap_start_new() {
		$this->xml = <<<XML
<?xml version='1.0' encoding='UTF-8'?>
<!-- Created by BaiTanLa -->
<urlset xmlns='http://www.sitemaps.org/schemas/sitemap/0.9'>
XML;
	}
	
	function _sitemap_add_item($item) {
		if(empty($this->xml)) { return false; }
		$this->xml .= '<url>';
		foreach ($item as $key=>$value) {
			$this->xml .= "<{$key}>{$value}</{$key}>";
		}
		$this->xml .= '</url>';
		return true;
	}
		
	function _sitemap_end_save($filename) {
		$this->xml .= '</urlset>';

		if($this->setting['use_gzip']) {
			$filename = $filename.'.xml.gz';
			$fh = fopen($filename, 'wb+');
			fwrite($fh, gzencode($this->xml));
		} else {
			$filename = $filename.'.xml';
			$fh = fopen($filename, 'wb+');
			fwrite($fh, $this->xml);
		}
		fclose($fh);
		$this->xml = null;
		return $filename;
	}
	
	function submit() {	
    	$filename = $this->setting['use_gzip'] == '1' ? 'sitemap.xml.gz' : 'sitemap.xml';
    	if(!file_exists(HDWIKI_ROOT.'/'.$filename)) {
    		return false;
    	}
    	$services = array('Google'=>'http://www.google.com/webmasters/sitemaps',
    		'Ask.com'=>'http://submissions.ask.com');
    	$result = array();
    	foreach ($services as $site=>$url) {
    		$url .= '/ping?sitemap='.urlencode(WIKI_URL.'/'.$filename);
    		$result[$site] = $this->_fetchUrl($url);
    	}
    	return $result;
    }
    
    function _fetchUrl($url) {
    	$result = '';
    	$url = parse_url($url);
    	$errno = $errstr = '';
    	$fp = fsockopen($url['host'], 80, $errno, $errstr, 30);
		if ($fp) {
		    $out = "GET {$url['path']}?{$url['query']} HTTP/1.1\r\n";
		    $out .= "Host: {$url['host']}\r\n";
		    $out .= "Connection: Close\r\n\r\n";
		    fwrite($fp, $out);
		    $result = fgets($fp);
		    fclose($fp);
		}
		return $result;
    }
    
    
    function create_baiduxml() {
    	$this->base->load('user');
    	$fh = fopen($this->baiduxml, 'wb+');
    	$website = parse_url(WIKI_URL);
    	$website = $website['host'];
    	$webmaster = $_ENV['user']->get_admin_email();
    	$updateperi = intval($this->setting['updateperi']);
    	if($this->setting['textcolumn'] == 'content') {
    		$textcolumn = 'd.content as `text`,';
    	} else if($this->setting['textcolumn'] == 'summary')  {
    		$textcolumn = 'd.summary as `text`,';
    	} else {
    		$textcolumn = '';
    	}
    	$xml_encoding = WIKI_CHARSET;
    	$xml = <<<XML
<?xml version='1.0' encoding='{$xml_encoding}'?>
<!-- Created by BaiTanLa -->
<urlset>


XML;
    	fwrite($fh, $xml);
    	$query = $this->db->query("SELECT d.did, d.title, $textcolumn d.lastedit, c.name as category FROM ".DB_TABLEPRE."doc d left join ".DB_TABLEPRE."category c on d.cid = c.cid order by did desc limit 100");
    	while($row = $this->db->fetch_array($query)){
    		$doc_id = ('1'==$this->base->setting['seo_type'] && '1'==$this->base->setting['seo_type_doc']) ? rawurlencode($row['title']) : $row['did'];
			$doc_link = WIKI_URL.'/'.$this->base->view->url("doc-view-{$doc_id}");
    		$url = "<url>\n\r";
    		$url .= "<loc>{$doc_link}</loc>\n\r";
    		$url .= "<title>".$this->_escapedata($row['title'])."</title>\n\r";
    		if($this->setting['textcolumn'] != 'none') {
    			$url .= "<text><![CDATA[".strip_tags($row['text'])."]]></text>\n\r";
    		}
    		$url .= "<category>".$this->_escapedata($row['category'])."</category>\n\r";
    		$url .= "<pubDate>".date('Y/m/d H:i:s', $row['lastedit'])."</pubDate>\n\r";
    		$url .= "</url>\n\r";
    		
    		fwrite($fh, $url);
    		
    	}
    	//...
    	
    	fwrite($fh, '</urlset>');
    	fclose($fh);
    }
    
    function autoupdate_baiduxml() {
    	if($this->base->setting['auto_baiduxml'] 
    		&& file_exists($this->baiduxml) 
    		&& (time() - filemtime($this->baiduxml) >= 60*intval($this->setting['updateperi']))) 
    	{
    		register_shutdown_function(array($this, 'create_baiduxml'));
    	}
    }

    function get_last_update($filename) {
    	return file_exists($filename) ? filemtime($filename) : false;
    }
    	
	function _escapedata($data)
    {
        $position=0;
        $length=strlen($data);
        $escapeddata='';
        for(;$position<$length;)
        {
            $character=substr($data,$position,1);
            $code=Ord($character);
            switch($code)
            {
                case 34:
                    $character='&quot;';
                    break;
                case 38:
                    $character='&amp;';
                    break;
                case 39:
                    $character='&apos;';
                    break;
                case 60:
                    $character='&lt;';
                    break;
                case 62:
                    $character='&gt;';
                    break;
                default:
                    if($code<32)
                        $character=('&#'.strval($code).';');
                    break;
            }
            $escapeddata.=$character;
            $position++;
        }
        return $escapeddata;
    }
 
}	

?>

附件列表


0

词条内容仅供参考,如果您需要解决具体问题
(尤其在法律、医学等领域),建议您咨询相关领域专业人士。

如果您认为本词条还有待完善,请 编辑

上一篇 HDwiki如何增加百度地图    下一篇 齐博cms地方门户3.5商业版后台DIY修改大全

标签

暂无标签

同义词

暂无同义词