jellygnite/silverstripe-seo

适用于 SilverStripe 的全功能 SEO 模块。

安装: 48

依赖项: 1

建议者: 0

安全性: 0

星标: 0

关注者: 1

分支: 1

开放性问题: 0

类型:silverstripe-vendormodule

4.1 2021-04-29 03:47 UTC

This package is auto-updated.

Last update: 2024-08-29 05:31:14 UTC


README

适用于 SilverStripe 的全功能 SEO 模块。

注意:原始模块请参阅 quinninteractive/silverstripe-seo.

功能

  • 页面编辑器中的 SEO 健康分析 ![SEO 健康分析]
  • 自动生成 Facebook OpenGraph 元标签(可覆盖) ![Facebook SEO 控制]
  • 自动生成 Twitter 元标签(可覆盖) ![Twitter SEO 控制]
    • 还将一个 TwitterAccountName 字段添加到 SilverStripe\Security\Member,该字段用于创建者标签。创建新页面时将记录创建者信息,并使用其 Twitter 账户名称作为元标签。

示例元标签输出

<link rel="canonical" href="http://sample.com/"/>
<meta property="og:title" content="Home"/>
<meta property="og:description" content="Sample Website creates boring old samples."/>
<meta property="og:type" content="website"/>
<meta property="og:url" content="http://sample.com/"/>
<meta property="og:locale" content="en_GB" />
<meta property="og:site_name" content="Sample Website" />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="Home"/>
<meta name="twitter:description" content="Sample Website creates boring old samples."/>
<meta name="twitter:creator" content="@sample"/>
<meta name="twitter:site" content="@sample" />
<meta property="article:published_time" content="2020-04-08T00:22:10+10:00" />
<meta property="article:modified_time" content="2020-04-16T21:52:52+10:00" />

要求

有关详细信息,请参阅 composer.json.

安装

composer require jellygnite/silverstripe-seo

入门

安装此模块后,将自动应用必要的扩展,并进行 dev/build。

编写自己的分析

健康分析已被抽象化,以便开发人员能够创建自己的分析检查。

为此,您只需创建一个新的类,该类扩展 Jellygnite\Seo\Analysis\Analysis

例如,让我们创建一个新的分析,检查当前页面的标题是否为 Hello World!

首先创建以下文件

mysite\code\Analysis\HelloWorldTitleAnalysis.php

<?php

namespace Vendor\Project\Analysis;

use Jellygnite\Seo\Analysis\Analysis;

class HelloWorldTitleAnalysis extends Analysis
{
    const FAILED = 0;
    const SUCCESS = 1;

    public function run()
    {
        if (!strstr($this->getPage()->Title, 'Hello World!')) {
            return static::FAILED;
        }

        return static::SUCCESS;
    }

    public function responses()
    {
        return [
            static::FAILED  => ['The string "Hello World!" does not appear in the page title', 'danger'],
            static::SUCCESS => ['Hoorah!!! "Hello World!" appears in the page title', 'success'],
        ];
    }
}

然后执行 dev/build。您将立即在 CMS 中看到此新分析在“SEO 健康分析”折叠面板中运行,在编辑任何页面时,将标题更改为包含“Hello World”,您将注意到指示器将显示成功。

需要注意的一点是,分析始终可以通过 $this->getPage() 访问其正在运行的 \Page 对象,因此您的响应也可以是动态的。

如果您已创建分析,并认为它作为此模块的补充将很有益,我们强烈建议您提交拉取请求,并将获得您工作的全部信用。请参阅 CONTRIBUTING.md.

解释:run()

您必须覆盖此方法,因为这将是您执行所有检查的地方,然后返回与您在 responses() 中定义的键相对应的整数。使用表示这些整数的常量以提高可读性是个好主意。

解释:responses()

所有分析都必须覆盖 responses() 方法以提供响应消息和响应级别(用于指示器)。

run() 应返回一个与 responses() 返回的数组中的键匹配的整数,例如,如果 run() 返回 1,则使用上述示例,显示的消息将是 Hoorah!!! "Hello World!" appears in the page title,指示器级别为 success

可用的指示器级别是:defaultdangerwarningsuccess,分别对应灰色、红色、橙色和绿色。

您可以可选地防止某些级别在内容分析选项卡中显示。以下添加到上述示例将导致只有当指示器级别不是值 success 时才显示条目

private static $hidden_levels = [
    'success'
];

配置选项

enable_creator_tag

默认情况下,此模块向 \SilverStripe\Security\Member 添加一个名为 TwitterAccountName 的字段。如果设置了该字段且特定用户创建页面时,会自动生成带有成员账户名称的 twitter:creator 元标签。

您可以通过 YML 禁用此功能。

Jellygnite\Seo\Extensions\PageSeoExtension:
  enable_creator_tag: false

假设

此模块假设您使用由 \Page 提供的默认 Content 字段。如果特定页面没有使用该字段,您可以指定一个或多个包含您的内容的字段。

它们应该按照它们在最终用户中显示的正确顺序排列。

在您的 \Page 子类中,您将会有

public function seoContentFields()
{
    return [
        'Content',
        'MyBlock.Title',
        'MyBlock.Content',
        'BottomTitle',
        'BottomContent',
    ];
}

许可

BSD-3-Clause