vulcandigital/silverstripe-seo

此包已被废弃且不再维护。作者建议使用quinninteractive/silverstripe-seo包。

SilverStripe的全功能SEO模块

安装次数: 3,879

依赖者: 0

建议者: 0

安全: 0

星标: 30

关注者: 8

分支: 11

开放问题: 8

类型:silverstripe-vendormodule

1.0.3 2019-03-18 07:02 UTC

This package is auto-updated.

Last update: 2019-08-14 07:38:55 UTC


README

Build Status codecov Latest Stable Version Total Downloads Latest Unstable Version License Monthly Downloads

silverstripe-seo

SilverStripe的全功能SEO模块

半废弃

遗憾的是,我没有时间再管理这个仓库了,鉴于它相当受欢迎,我想知道是否有人愿意接管这个模块的管理。如果是这样,请随时通过邮箱reece.alexander [at] gmail.com联系我。

功能

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

示例元标签输出

<link rel="canonical" href="http://atmtanks.local/"/>
<meta property="og:title" content="Home"/>
<meta property="og:description" content="ATM Industrial Panel Tanks (ATM) specialises in tank builds, modifications and maintenance. ATM has performed significant tank refurbishments, re-lines and roof replacements for Government Hospitals, Power Stations, Food Process Companies, Mines and more."/>
<meta property="og:type" content="website"/>
<meta property="og:url" content="http://atmtanks.local/"/>
<meta property="og:locale" content="en_GB" />
<meta property="og:site_name" content="ATM Industrial Panel Tanks" />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="Home"/>
<meta name="twitter:description" content="ATM Industrial Panel Tanks (ATM) specialises in tank builds, modifications and maintenance. ATM has performed significant tank refurbishments, re-lines and roof replacements for Government Hospitals, Power Stations, Food Process Companies, Mines and more."/>
<meta name="twitter:creator" content="@zanderwar"/>
<meta name="twitter:site" content="@vulcandigital" />
<meta property="article:published_time" content="2018-04-08T00:22:10+10:00" />
<meta property="article:modified_time" content="2018-04-16T21:52:52+10:00" />

如果您认为可以为此输出添加一些有益的内容,请毫不犹豫地提交PR或打开一个问题来讨论其添加。

要求

  • silverstripe/cms: ^4.1

安装

composer require vulcandigital/silverstripe-seo

入门

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

编写自己的分析

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

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

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

首先创建以下文件

mysite\code\Analysis\HelloWorldTitleAnalysis.php:

<?php

namespace Vendor\Project\Analysis;

use Vulcan\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 对象,因此您的响应也可以是动态的。

如果您创建了一个分析,并认为它作为此模块的补充将是有益的,我们强烈建议您提交一个Pull Request,您将获得您工作的全部信用。

解释:run()

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

解释:responses()

所有分析都必须重写 responses() 方法,以提供响应消息和响应级别(用于指标)。

run() 应返回一个整数,该整数与 responses() 返回的数组中的键匹配。例如,如果 run() 返回 1,那么在上面的示例中显示的消息将是 “Hoorah!!! "Hello World!" 出现在页面标题中,指标级别为 success

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

您可以可选地阻止某些级别在内容分析选项卡中显示。在上述示例中添加以下内容会导致仅当指标级别不是值为 success 时才显示条目。

private static $hidden_levels = [
    'success'
];

配置选项

enable_creator_tag

默认情况下,此模块向 \SilverStripe\Securit\Member 添加了一个扩展,该扩展添加了一个名为 TwitterAccountName 的单个字段,如果设置了此字段,并且当此特定用户创建页面时,将自动生成 twitter:creator 元标签,其中包含成员的账户名称。

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

Vulcan\Seo\Extensions\PageSeoExtension:
    enable_creator_tag: false

假设

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

它们应按用户看到的正确顺序排列。

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

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

错误

据我们所知,此模块目前没有错误,如果您发现错误,请立即创建问题(或者更好的是,提交修复问题的PR),我们将及时调查、修复并相应地发布新版本。

路线图

  • 完成对此模块及其分析的国际化实施。
  • 更多内容分析。
  • 鉴于内容可以从SilverStripe页面的任何地方实际获得,引入了 seoContentFields 方法来更好地通过汇总所有内容字段为一个单个字符串来改进内容分析。这支持点表示法用于 has_one 关系,但可能不支持(或当前不支持)has_manymany_many 关系。理想情况下,未来我们将希望使用DOM解析器(部分实现)并依赖于此。
  • 寻找社区支持,以帮助改进和提升本模块,使其对所有 SilverStripe 用户更加完善

许可

BSD-3-Clause - Vulcan Digital Ltd