XML Sitemap简介
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XML Sitemap简介相关的知识,希望对你有一定的参考价值。
参考技术A sitemaps是一个XML文件,其中包含站点中所有需要被index的page URLs。Google Search engine bot根据sitmap的内容crawl和indexing你的网站。SiteMap可以被理解成一个网站(website)的url map(site map),这个map可以帮助Google迅速找到你的站点中所有的页面(或者是所有的link)。
即使你的主站并没有包含你的网站中的所有的link,只要link包含在这个sitemap中,google不仅会将主站的所有内容全部爬出,而且会读取到你的sitemap,将sitemap中的所有url对应的页面内容全部都爬出。当你站点中所有的page的内容都被google爬走后,就保证了一旦有人在google做search,你的站点就可能出现在Search Result中。
如果google不能够爬到你的页面,那么就相当于搜索引擎不知道你的存在,那么不论在任何search 结果中,你都看到不到你的页面。
这样一看来,sitemap对于你的页面在google的search result中的ranking可谓是及其重要了。
通常我们会建立一个XML SiteMap Index file,这个文件相当于是一个索引,将不同的内容放到不同的xml sitemap文件中,因为这样做有两个好处:
由URL组成
这些URL就相当于是直接告诉google我们有这些link,你可以直接爬
如果你希望你网页中的某一个页面出现在search result中,那么就必须要将这个页面放到sitemap中
如果你不希望你网页中的某一个页面出现在search result中,比如还没有完全做完的页面(用户体验可能不是很好),那么就不能写在你网站的sitemap中
对于网站中的搜索页面,如果进行搜索的时候,有某一个搜索页面没有results,那么在这种情况下,我并不想让google爬到这个页面,原因:
因此我们肯定希望不让google爬到我们这种页面上,那么可以选择在 sitemap 中直接删除
google强烈建议您将Sitemap放在html服务器的根目录下:
如果你的html请求是:
那么你的sitemap最好在:
因为这就相当于你跟google search engine 提前约定好的位置,google search engine会到这个位置寻找你站点的sitemap.
将你的sitemap file link(有时候我们会将sitemap xml file放在S3上)放在你网站的footer中,这样search engine bot就可以快速的发现你的sitemap,然后高效的 crawl/index
sitemap中列出的所有URL必须和sitemap的host相同,比如,如果sitemap在 http://www.example.com/sitemap.xml ,那么sitemap中绝对不能包含 http://subdomain.example.com . If the Sitemap is located at http://www.example.com/myfolder/sitemap.xml , it can't include URLs from http://www.example.com .
Sitemaps should be no larger than 10MB (10,485,760 bytes) and can contain a maximum of 50,000 URLs. These limits help to ensure that your web server does not get bogged down serving very large files. This means that if your site contains more than 50,000 URLs or your Sitemap is bigger than 10MB, you must create multiple Sitemap files and use a Sitemap index file. You should use a Sitemap index file even if you have a small site but plan on growing beyond 50,000 URLs or a file size of 10MB. A Sitemap index file can include up to 1,000 Sitemaps and must not exceed 10MB (10,485,760 bytes). You can also use gzip to compress your Sitemaps.
那当你已经给你的网站创建好了一个sitemp的XMl File, 除了我在上面提到的两个可以放置XML的位置,你其实还可以放在任意的地方,比如你可以扔在S3上。 那么问题就来了,你需要告诉Google到哪里找我的XML文件,这时候Google Search console,就相当于是一个配置工具,告诉google我的网站域名是啥,下次遇到我的网站的时候应该去哪找我的XML sitemap
我们通常使用google的工具 Google search console 去管理sitemap。
你可以先为你自己的站点产生一个sitemap file,然后在上图进行配置,
一旦提交之后,google会依次找到你的提交的sitemap然后对sitemap中的url进行crawl。
如上图,我们给网站 www.shoutmeloud 加sitemap, 相当于google会去 www.shoutmeloud/sitemap_index.xml / www.shoutmeloud/post_tag-sitemap.xml ...等等爬数据
php生成sitemap.xml地图文件
文章目录
前言
首先是要交个人网站的详情页都提交给百度、360、神马、谷歌等搜索引擎。
如果是简单的列表页,当然可以写好在放到服务器目录下。
比如博客类动态生成的就必须每天跑脚本去追加写入了。
本文采用的是laravel框架的command命令来跑脚本,大家可以适合自己项目的写法。
什么是Sitemap?
Sitemap(即站点地图)就是您网站上各网页的列表。创建并提交Sitemap有助于百度发现并了解您网站上的所有网页。您还可以使用Sitemap提供有关您网站的其他信息,如上次更新日期、Sitemap文件的更新频率等,供百度Spider参考。
百度对已提交的数据,不保证一定会抓取及索引所有网址。但是,我们会使用Sitemap中的数据来了解网站的结构等信息,这样可以帮助我们改进抓取策略,并在日后能更好地对网站进行抓取。
此外,Sitemap 与搜索排名没有关系。
sitemap文件遵循指南
- 文本文件每行都必须有一个网址。网址中不能有换行。不应包含网址列表以外的任何信息。
- 您必须书写完整的网址,包括 http。
- 每个文本文件最多可包含 50,000 个网址,并且应小于10MB(10,485,760字节)。如果网站所包含的网址超过 50,000个,则可将列表分割成多个文本文件,然后分别添加每个文件。
- 文本文件需使用 UTF-8 编码或GBK编码。
xml格式详解
<?xml version="1.0" encoding="utf-8"?>
<!-- XML文件需以utf-8编码-->
<urlset>
<!--必填标签-->
<url>
<!--必填标签,这是具体某一个链接的定义入口,每一条数据都要用<url>和</url>包含在里面,这是必须的 -->
<loc>http://www.yoursite.com/yoursite.html</loc>
<!--必填,URL链接地址,长度不得超过256字节-->
<lastmod>2009-12-14</lastmod>
<!--可以不提交该标签,用来指定该链接的最后更新时间-->
<changefreq>daily</changefreq>
<!--可以不提交该标签,用这个标签告诉此链接可能会出现的更新频率 -->
<priority>0.8</priority>
<!--可以不提交该标签,用来指定此链接相对于其他链接的优先权比值,此值定于0.0-1.0之间-->
</url>
<url>
<loc>http://www.yoursite.com/yoursite2.html</loc>
<lastmod>2010-05-01</lastmod>
<changefreq>daily</changefreq>
<priority>0.8</priority>
</url>
</urlset>
实战代码
sitemap组件代码
<?php
/**
* 通用生成sitemap文件
* User: WXiangQian
*/
namespace App\\Http\\Tools;
class CreateSiteMapXml
private $fileDir;
public function __construct($filePath)
$this->mkFolder($filePath);
$filePath = rtrim($filePath, '/') . '/';
$this->fileDir = $filePath;
/**
* 生成sitemaps 入口
* @param array $ary msps数组
* @param string $parent maps父标签
* @param string $type maps类型
* @return bool
*/
public function addSiteMap($ary, $parent, $type)
if (empty($ary))
return false;
$file = $this->fileDir . $type . ".xml";//获取最后更新文件
$content = $this->maps($ary, $parent); //生成片段 maps
$f = $this->readFile($file);
if (empty($f))
//获取新文件头部
$f = $this->typeMain();
else
$f = file_get_contents($file);
$nf = $this->strInsert($f, strpos($f, strrchr($f, '</')), $content);
$this->writeFile($file, $nf);
public function ary2maps($idAry, $loc, $cf, $pri)
$lastmod = date('Y-m-d');
$ary = array();
foreach ($idAry as $id)
$ary[] = array(
'loc' => $loc . $id,
'lastmod' => $lastmod,
'changefreq' => $cf,
'priority' => $pri,
);
return $ary;
//读取文件
public function readFile($file)
if (empty($file))
return false;
$f = file_exists($file);
return $f ?: '';
//写入文件
public function writeFile($fileName, $content)
//echo $content;
file_put_contents($fileName, $content); //更新其值
/**
* 通用 maps
* @param array $ary
* @param string $parent
* @return string
*
*/
public function maps($ary, $parent): string
$str = '';
if (is_array($ary))
foreach ($ary as $mval)
$str .= "<$parent>\\r\\n";
foreach ($mval as $key => $val)
$str .= " <$key>$val</$key>\\r\\n";
$str .= "</$parent>\\r\\n";
return $str;
/**
* 指定位置前插入字符串
* @param string $str 原字符串
* @param int $i 位置
* @param string $substr 插入的字符串
* @return string
*/
public function strInsert($str, $i, $substr): string
$lstr = substr($str, 0, $i);
$rstr = substr($str, $i, strlen($str));
$newstr = ($lstr . $substr . $rstr);
return $newstr;
// sitemap type
public function typeMain(): string
$xml = "<?xml version='1.0' encoding='UTF-8'?>\\r\\n<urlset xmlns='http://www.sitemaps.org/schemas/sitemap/0.9' \\r\\n" .
"xmlns:mobile='http://www.sitemaps.org/schemas/sitemap-mobile/1'> \\r\\n" . "</urlset>";
return $xml;
// 检查目标文件夹是否存在,如果不存在则自动创建该目录
public function mkFolder($path)
if (!is_readable($path))
// is_file($path) or mkdir($path, 0777);
is_file($path) || mkdir($path, 0777) || is_dir($path);
调用sitemap组件
<?php
namespace App\\Console\\Commands;
use App\\Http\\Tools\\CreateSiteMapXml;
use Illuminate\\Console\\Command;
class CreateSiteMapXmlCommand extends Command
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'create_sitemap_xml';
/**
* The console command description.
*
* @var string
*/
protected $description = '生成sitemap.xml文件';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
parent::__construct();
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
$idAry = [
117281450,
110532521,
105240627,
105558534,
];
$name = 'csdn';
// 服务器目录地址
$sitemaps = new CreateSiteMapXml('/Users/wxiangqian/my_project/laravel-api/sitemaps/');
$videoAry = $sitemaps->ary2maps($idAry, 'https://wxiangqian.blog.csdn.net/article/details/', 'daily', '0.8');
$sitemaps->addSiteMap($videoAry, 'url', $name);
仓库地址
https://github.com/WXiangQian/laravel-api
实战截图
相关问题
Sitemap提交后,多久能被百度处理?
Sitemap数据提交后,一般在1小时内百度会开始处理。处理完成的时间视文件大小和您设置的抓取周期而定。
提交的Sitemap都会被百度抓取并收录吗?
百度对已提交的数据,不保证一定会抓取及收录所有网址。是否收录与页面质量相关。
XML格式的 Sitemap 中,“priority”提示会影响我的网页在搜索结果中的排名吗?
不会。Sitemap 中的“priority”提示只是说明该网址相对于您自己网站上其他网址的重要性,并不会影响网页在搜索结果中的排名。
网址在 Sitemap 中的位置是否会影响它的使用?
不会。网址在 Sitemap 中的位置并不会影响百度对它的识别或使用方式。
Sitemap中提交的url能否包含中文?
因为转码问题建议最好不要包含中文。
结束语
希望本文可以帮助大家解决php生成sitemap.xml地图文件问题。👍
以上是关于XML Sitemap简介的主要内容,如果未能解决你的问题,请参考以下文章