watson / sitemap
在 Laravel 中生成 Google Sitemaps
Requires
- php: ^8.0
- illuminate/http: ^8.0|^9.0|^10.0|^11.0
- illuminate/support: ^8.0|^9.0|^10.0|^11.0
Requires (Dev)
- mockery/mockery: ^1.3.1
- phpunit/phpunit: ^9.0|^10.5
This package is auto-updated.
Last update: 2024-09-09 11:51:07 UTC
README
Sitemap 是一个专门为 Laravel 开发的包,可以帮助您生成 Google 的 XML sitemap。基于 laravel-sitemap,此包以略不同的方式运行,以更好地满足我们项目的需求。使用外观访问 sitemap 类,并且我们增加了生成 sitemap 索引以及 sitemap 的能力。此外,它已经过测试。
在 Google Webmaster Tools 上了解更多关于 sitemap 的信息以及如何高效地使用它们。
安装
composer require watson/sitemap
用法
创建 sitemap 索引
如果您有大量的链接(50,000+),您可能希望将 sitemap 分割成单独的 sitemap,并通过 sitemap 索引将它们链接起来。您可以使用 Sitemap::addSitemap($location, $lastModified)
添加 sitemap 索引,然后使用 Sitemap::renderSitemapIndex()
返回 sitemap 索引。变量 $lastModified
将被解析并转换为适合 sitemap 的格式。
以下是一个生成 sitemap 索引的示例控制器。
namespace App\Http\Controllers; use Sitemap; class SitemapsController extends Controller { public function index() { // Get a general sitemap. Sitemap::addSitemap('/sitemaps/general'); // You can use the route helpers too. Sitemap::addSitemap(route('sitemaps.posts')); // Return the sitemap to the client. return Sitemap::index(); } }
像平常一样路由到此,Route::get('sitemap', 'SitemapsController@index');
。
创建 sitemap
类似于 sitemap 索引,您只需使用 Sitemap::addTag($location, $lastModified, $changeFrequency, $priority)
为 sitemap 中的每个项目添加标签。您可以使用 Sitemap::renderSitemap()
返回 sitemap。同样,变量 $lastModified
将被解析并转换为适合 sitemap 的格式。
如果您只想获取原始 XML,只需调用 Sitemap::xml()
。
以下是一个生成博客帖子 sitemap 的示例控制器。
namespace App\Http\Controllers; use Post; use Sitemap; class SitemapsController extends Controller { public function posts() { $posts = Post::all(); foreach ($posts as $post) { Sitemap::addTag(route('posts.show', $post), $post->updated_at, 'daily', '0.8'); } return Sitemap::render(); } }
如果您只想传递模型的 updated_at
时间戳作为最后修改参数,您只需将模型作为第二个参数传递,然后 sitemap 将自动使用该属性。
如果您从数据库中拉取大量记录,您可能需要考虑通过使用 select()
方法来限制您获取的数据量。您还可以使用 chunk()
方法每次只加载一定数量的记录,以免耗尽内存。
图像 sitemap
您可以使用 Google 图像扩展为 sitemap 提供更多信息,以帮助 Google 了解您页面上的图像。 阅读规范
图像与页面相关联,并且您可以为每个页面使用最多 1000 张图像。
以下是将图像标签添加到常规页面标签的示例。
namespace App\Http\Controllers; use Page; use Sitemap; class SitemapsController extends Controller { public function pages() { $pages = Page::all(); foreach ($pages as $page) { $tag = Sitemap::addTag(route('pages.show', $page), $page->updated_at, 'daily', '0.8'); foreach ($page->images as $image) { $tag->addImage($image->url, $image->caption); } } return Sitemap::render(); } }
以下是将图像添加到标签的完整参数列表。
$tag->addImage($location, $caption, $geoLocation, $title, $licenceUrl);
配置
要发布 sitemap 包的配置文件,只需运行此 Artisan 命令
php artisan config:publish watson/sitemap
php artisan vendor:publish --provider="Watson\Sitemap\SitemapServiceProvider"
然后在 config/sitemap.php
中查看可用的配置。
缓存
默认情况下,缓存已禁用。如果您想启用缓存,只需在配置文件中将 cache_enabled
设置为 true
。然后您可以指定您希望视图缓存的时长。请注意,启用缓存时,缓存将影响对 sitemap 包发出的每个请求。
多语言标签
如果您想使用多语言标签,只需将一个实例传递给 addTag
方法。以下是如何为不同语言传递替代标签位置的粗略示例。
Sitemap::addTag(new \Watson\Sitemap\Tags\MultilingualTag( $location, $lastModified, $changeFrequency, $priority, [ 'en' => $location . '?lang=en', 'fr' => $location . '?lang=fr' ] ));