noeldemartin/laravel-semantic-seo

为 Laravel 应用程序提供添加语义 SEO 的实用工具。

v0.2.0 2020-10-13 06:23 UTC

This package is auto-updated.

Last update: 2024-09-05 17:15:09 UTC


README

使用此包通过元标签和结构化数据类型定义语义 SEO 信息。

安装

使用 composer 安装

composer require noeldemartin/laravel-semantic-seo

该包将通过 Laravel 的 包发现机制 自动加载。

(如果您使用的是 6.0 之前的 Laravel 版本,请使用 composer require noeldemartin/laravel-semantic-seo:0.0.1 替代)

用法

此包帮助为网站构建 语义 HTML,定义两个事物

  • 元标签:在网站上定义语义信息的最常见方法是在当前页面上包含具有特定信息的元标签。例如,大多数社交网络在分享链接时创建预览,例如 Twitter CardsFacebook Open Graph。搜索引擎也使用其中一些标签来格式化搜索结果中的链接。

  • 类型:为了提供更丰富的语义,可以为特定用例(如博客文章、人物、Web 应用程序等)定义类型。此包中使用的类型系统提供了 schema.org 模式,这是一种定义 结构化数据 的常用方式。定义这种更丰富的数据的优势之一是,可以从这些类型中推断出元标签,且信息不需要重复。

使用此包生成的标记应放置在 head 元素上。此包包括一个名为 semanticSEO 的 Blade 指令。

<html>
    <head>
        @semanticSEO

        // Other tags in head such as css or js assets
    </head>
    <body>
        // Page content
    </body>
</html>

为了定义类型和元标签,请使用 SemanticSEO 门面。

使用类型

并非所有类型都包含在此包中,但大多数常用类型都包含在内。例如,您可以在页面中定义 WebSite 模式的信息,如下所示

SemanticSEO::website()
    ->url(route('home'))
    ->name('My Website');

您可以将此代码放置在您想要的位置,例如在控制器处理方法中。

类型会自动添加有意义的元标签,例如上面的代码将生成以下标记

<title>My Website</title>
<link rel="canonical" href="https://mywebsite.com">
<meta property="og:type" content="website">
<meta property="og:title" content="My Website">
<meta property="og:url" content="https://mywebsite.com">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="My Website">
<meta name="twitter:url" content="https://mywebsite.com">
<script type="application/ld+json">
    {
        "@context":"http:\/\/schema.org",
        "url":"https:\/\/mywebsite.com",
        "name":"My Website",
        "@type":"WebSite"
    }
</script>

除了可用的类型外,还可以使用 is 方法使用任何新类型,如下所示

SemanticSEO::is(MyType::class)
    ->myAttribute('foobar');

要查看更多示例以及如何使用现有类型,请查看位于 /tests/Unit 下的 TypesTests.php 文件中的测试。

使用元标签

有时需要显式定义元标签。也可能出于某种原因您不想使用类型,在这种情况下,可以逐个定义元标签。

SemanticSEO::meta('title', 'My Website');
SemanticSEO::meta('description', 'My Website is awesome');

请注意,此包了解一些特殊的元标签,例如使用 "title" 元标签实际上将渲染为 <title> 标签而不是 <meta>。还可以一次定义多个元标签(例如,如果您将这些标签的内容保存在翻译文件中)。

SemanticSEO::meta([
    'title' => trans('seo.title'),
    'description' => trans('seo.description'),
]);

要查看更多示例以及如何使用现有元标签,请查看位于 /tests/Unit 下的 MetaTagsTests.php 文件中的测试。

其他一些特殊的元标签如下

机器人

要隐藏一个页面不被爬虫抓取,请调用 SemanticSEO::hide(),这将生成

<meta name="robots" content="noindex, nofollow">

还注册了一个中间件,以防需要从路由文件中调用它(例如,当使用 view 速记来定义路由时)。

Route::view('secret', 'secret')->middleware('semantic-seo:hide');

网站地图和RSS

为了定义网站地图或rss xml位置(这可以放在服务提供者中,以防止在每个控制器中调用此功能)。

SemanticSEO::rss(url('blog/rss.xml'), 'My RSS Feed');
SemanticSEO::sitemap(url('sitemap.xml'), 'My Sitemap');

这将生成

<link rel="alternate" type="application/rss+xml" title="My RSS Feed" href="https://mywebsite.com/blog/rss.xml">"
<link rel="sitemap" type="application/xml" title="My Sitemap" href="https://mywebsite.com/sitemap.xml">"

规范URL

每页都会自动生成页面的规范位置,可以通过将其设置为 false 来禁用此功能(以及由Types覆盖的任何元数据)。

SemanticSEO::canonical(false);

社交网络

还定义了一些用于twitter和open graph的速记,这将自动包含 twitter:og: 前缀。

SemanticSEO::twitter('title', 'Twitter title');
SemanticSEO::openGraph('title', 'Open Graph title');

这将生成

<meta name="twitter:title" content="Twitter title">
<meta property="og:title" content="Open Graph title">

扩展

此包的基本功能已完成,但它缺少一些类型定义。然而,它们非常容易添加。为了创建一个新类型(或扩展现有类型),需要做三件事:

  • NoelDeMartin\SemanticSEO\Types 命名空间下扩展一个现有类型。如果不存在合适的类型,请使用 Thing
  • 如果您的类名不是类型名称(例如,如果您正在定义一个类来重用参数),则覆盖 getType 方法并返回适当的名称。
  • 如果您想在使用类型时自动添加元标签,则覆盖 beforeRender 方法。
  • 如果您想添加额外的字段属性,则覆盖 getAttributeDefinitions 方法。

有关如何执行此操作的示例,可以在 /src/Types 文件夹下找到,因为现有类已经使用这种方法。我鼓励您创建添加扩展的PR,这些扩展位于schema.org规范内。类型及其字段的层次结构可以在这里找到。