jellygnite / silverstripe-seo
适用于 SilverStripe 的全功能 SEO 模块。
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
。
可用的指示器级别是:default
、danger
、warning
、success
,分别对应灰色、红色、橙色和绿色。
您可以可选地防止某些级别在内容分析选项卡中显示。以下添加到上述示例将导致只有当指示器级别不是值 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', ]; }