watson/sitemap

在 Laravel 中生成 Google Sitemaps

5.2.0 2024-02-27 23:09 UTC

README

Build Status Total Downloads Latest Stable Version Latest Unstable Version License

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'
    ]
));