站点地图可以帮助搜索引擎更好的收录我们的站点,所以我们建站、建博客都最好有站点地图。
这里介绍如何在使用PHP建立站点地图(sitemap)。自己从零开始写,是不可能滴啦。
这里介绍两个库:
1、tackk/cartographer【https://packagist.org/packages/tackk/cartographer】
2、laravelium/sitemap【https://packagist.org/packages/laravelium/sitemap】
第一个是比较老的了,但更接近类库【引用范围更广一点】。但是在Laravel5.8中是无法安装这个库的,提示冲突。 第二个是和Laravel结合在一起的,所以要想在其他地方使用可能有点难度。
其实站点地图就是一个xml格式的文档而已,当然它遵循xml格式语法,其实不嫌麻烦都可以自己写。
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="/vendor/sitemap/styles/xml.xsl" type="text/xsl"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1">
<url>
<loc>https://www.misiyu.cn</loc>
<priority>1.0</priority>
<lastmod>2019-08-04T19:27:06+08:00</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>https://www.misiyu.cn/about.html</loc>
<priority>0.9</priority>
<lastmod>2019-08-04T19:27:06+08:00</lastmod>
<changefreq>monthly</changefreq>
</url>
<url>
</urlset>
<!--必填标签--> <url> <!--必填标签,每一条数据都要用<url>和</url>包含在里面 --> <loc>https://www.misiyu.cn</loc> <!--必填,URL链接地址,长度不得超过256字节--> <lastmod>2019-06-23</lastmod> <!--可以不提交该标签,用来指定该链接的最后更新时间--> <changefreq>daily</changefreq> <!--可以不提交该标签,用这个标签告诉此链接可能会出现的更新频率:always ,hourly ,daily ,weekly ,monthly ,yearly ,never --> <priority>0.8</priority> <!--可以不提交该标签,用来指定此链接相对于其他链接的优先权比值,此值定于0.0-1.0之间--> </url>
安装
composer require tackk/cartographer:1.0.*
使用
<?php
require 'vendor/autoload.php';
use Tackk\Cartographer\Sitemap;
use Tackk\Cartographer\ChangeFrequency;
$sitemap = new Sitemap();
$sitemap->add('https://www.misiyu.cn', date("Y-m-d"), ChangeFrequency::WEEKLY, 1.0);
header('Content-Type:text/xml');
echo $sitemap->toString();
建立文件,引入composer autoload文件,访问网址即可显示
不同laravel版本,需要安装不同的该库版本:
For Laravel 5.8
"laravelium/sitemap": "3.1.*"
(development branch)
"laravelium/sitemap": "3.1.x-dev"
For Laravel 5.7
"laravelium/sitemap": "3.0.*"
(development branch)
"laravelium/sitemap": "3.0.x-dev"
For Laravel 5.6
"laravelium/sitemap": "2.8.*"
(development branch)
"laravelium/sitemap": "2.8.x-dev"
For Laravel 5.5
"laravelium/sitemap": "2.7.*"
(development branch)
"laravelium/sitemap": "2.7.x-dev"
具体请看:https://packagist.org/packages/laravelium/sitemap
使用
发布:
php artisan vendor:publish --provider="Laravelium\Sitemap\SitemapServiceProvider"
使用用例:
$sitemap = App::make('sitemap');
$sitemap->setCache('laravel.sitemap', 60);
// check if there is cached sitemap and build new only if is not
if (!$sitemap->isCached()) {
// add item to the sitemap (url, date, priority, freq)
$sitemap->add(route('index'), date("c"), '1.0', 'daily');
$sitemap->add(route('about'), date("c"), '0.9', 'monthly');
$sitemap->add(route('says'), date("c"), '0.8', 'weekly');
$sitemap->add(route('note_list'), date("c"), '0.8', 'weekly');
$sitemap->add(route('snippet'), date("c"), '0.8', 'weekly');
// for all articles/posts
$articles = Article::orderBy('updated_at', 'desc')->get(['id', 'updated_at']);
// add every post to the sitemap
foreach ($articles as $article) {
$sitemap->add(route('read', $article->id), date("c", strtotime($article->updated_at)), 0.8, 'monthly');
}
}
// show your sitemap (options: 'xml' (default), 'html', 'txt', 'ror-rss', 'ror-rdf')
return $sitemap->render('xml');
具体更多用法请看官方文档:https://gitlab.com/Laravelium/Sitemap/wikis/Dynamic-sitemap