Laravel Sitemap v8 发布:自动分割,XSL 样式表及 crawler v9
Laravel Sitemap v8 版本发布。这个包可以通过爬取整个网站或手动添加网址来生成站点地图。此版本将底层爬虫升级到 v9,增加了一些不错的新功能,并清理了内部结构。
接下来将详细介绍这包的功能以及 v8 版本中的新特性。
通过爬取生成 Sitemap
使用该包最简单的方法是将其指向你的网站,并让它抓取每个页面。
use Spatie\Sitemap\SitemapGenerator;
SitemapGenerator::create('https://example.com')->writeToFile($path);
就是这样。生成器会跟踪所有内部链接,并生成一个完整的 sitemap.xml。你可以使用 shouldCrawl 回调函数来过滤哪些网址最终会出现在站点地图中。
SitemapGenerator::create('https://example.com')
->shouldCrawl(function (string $url) {
return ! str_contains(parse_url($url, PHP_URL_PATH) ?? '', '/admin');
})
->writeToFile($path);
手动生成 Sitemap
如果你更希望拥有完全的控制权,你可以自己构建站点地图。
use Carbon\Carbon;
use Spatie\Sitemap\Sitemap;
use Spatie\Sitemap\Tags\Url;
Sitemap::create()
->add(Url::create('/home')
->setLastModificationDate(Carbon::yesterday())
->setChangeFrequency(Url::CHANGE_FREQUENCY_YEARLY)
->setPriority(0.1))
->add(Url::create('/contact'))
->writeToFile($path);
你也可以将这两种方法结合起来:让爬虫完成繁重的工作,然后再添加额外的网址。
SitemapGenerator::create('https://example.com')
->getSitemap()
->add(Url::create('/extra-page'))
->writeToFile($path);
直接添加模型
如果你的模型实现了 Sitemapable 接口,你可以直接将其添加到 Sitemap 中。
use Spatie\Sitemap\Contracts\Sitemapable;
use Spatie\Sitemap\Tags\Url;
class Post extends Model implements Sitemapable
{
public function toSitemapTag(): Url | string | array
{
return route('blog.post.show', $this);
}
}
现在,你可以传递单个模型或整个集合。
Sitemap::create()
->add($post)
->add(Post::all())
->writeToFile($path);
Sitemap 自动分割
大型网站很容易超过站点地图协议对每个文件所允许的 50,000 个 URL 的限制。在 v8 版本中新增了一项功能,你可以在站点地图上调用 maxTagsPerSitemap(),该包将自动将其拆分为多个包含站点地图索引的文件。
Sitemap::create()
->maxTagsPerSitemap(10000)
->add($allUrls)
->writeToFile(public_path('sitemap.xml'));
如果你的站点地图(Sitemap)包含的网址超过 10,000 个,那么它将生成 sitemap_1.xml、sitemap_2.xml 等文件,以及一个引用所有这些文件的 sitemap.xml 索引文件。如果你的站点地图未超过限制,则它会像往常一样只生成一个文件。
XSL 样式表支持
站点地图是 XML 文件,在浏览器中打开时看起来相当粗糙。在 v8 版本中新增了一项功能,你可以附加一个 XSL 样式表,使它们变得易于阅读。
Sitemap::create()
->setStylesheet('/sitemap.xsl')
->add(Post::all())
->writeToFile(public_path('sitemap.xml'));
这在 Sitemap 和 SitemapIndex 上都有效。当与 maxTagsPerSitemap() 函数结合使用时,样式表会自动应用于所有拆分的文件和索引。
小结
在幕后,该包已升级为使用 spatie/crawler v9 版本。
该软件包已在 GitHub 上发布。