wizardstool/seo-audit

SEO审计工具包

1.0.2 2023-09-17 14:18 UTC

This package is auto-updated.

Last update: 2024-09-28 12:54:44 UTC


README

此工具对HTML页面应用不同的SEO审计。

工作原理

  1. 提供HTML文档作为输入
  2. 工具将解析、提取重要数据并进行一些测试。
  3. 输出
    • 提取的SEO数据
    • 审计结果

功能

  • 提取主要SEO数据:标题、描述、关键词、规范URL等。
  • 标题审计
    • 标题存在
    • 标题非空
    • 标题长度适中
    • 无标题重复
    • 标题在head中
  • 描述审计
    • 描述存在
    • 描述非空
    • 描述长度适中
    • 无描述重复
    • 描述在head中
  • 规范URL审计
    • 规范URL存在
    • 规范URL非空
    • 规范URL不等于页面URL
    • 无规范URL重复
    • 规范URL在head中
  • 可以创建自定义审计并传递给AuditBuilder

快速入门

<?php

require_once __DIR__.'/vendor/autoload.php';

use Wizardstool\SeoAudit\AuditBuilder;
use Wizardstool\SeoAudit\Audits\DescriptionAudit;
use Wizardstool\SeoAudit\Audits\CanonicalUrlAudit;
use Wizardstool\SeoAudit\Audits\TitleAudit;
use Wizardstool\SeoAudit\AuditIssues;

$subAudits = [
    new TitleAudit(),
    new DescriptionAudit(),
    new CanonicalUrlAudit(),
];

$html = <<<'HTML'
<html>
    <head>
        <title>This is title</title>
        <meta name="description" content="This is document with description." />
        <link rel="canonical" href="https://my-second-url-for-test.com">
    </head>
</html>
HTML;

$audit     = new AuditBuilder('https://my-url-for-test.com', $html, $subAudits);
$audit->run();
$result = $audit->getAuditResult();
var_dump($result);

此数据是审计结果

object(Wizardstool\SeoAudit\AuditResult)#6 (4) {
  ["title":"Wizardstool\SeoAudit\AuditResult":private]=>
  string(13) "This is title"
  ["description":"Wizardstool\SeoAudit\AuditResult":private]=>
  string(34) "This is document with description."
  ["canonicalUrl":"Wizardstool\SeoAudit\AuditResult":private]=>
  string(34) "https://my-second-url-for-test.com"
  ["issues":"Wizardstool\SeoAudit\AuditResult":private]=>
  array(1) {
    ["seo"]=>
    array(3) {
      ["Wizardstool\SeoAudit\Audits\TitleAudit"]=>
      array(1) {
        [4]=>
        array(1) {
          ["length"]=>
          int(13)
        }
      }
      ["Wizardstool\SeoAudit\Audits\DescriptionAudit"]=>
      array(1) {
        [4]=>
        array(1) {
          ["length"]=>
          int(34)
        }
      }
      ["Wizardstool\SeoAudit\Audits\CanonicalUrlAudit"]=>
      array(1) {
        [7]=>
        array(2) {
          ["canonical_url"]=>
          string(34) "https://my-second-url-for-test.com"
          ["page_url"]=>
          string(27) "https://my-url-for-test.com"
        }
      }
    }
  }
}

数组issues的第一级键是审计类型(SEO、安全性、性能等)。第二级数组键是审计类,例如Wizardstool\SeoAudit\Audits\TitleAudit,其键来自\Wizardstool\SeoAudit\AuditIssues。例如,4来自常量\Wizardstool\SeoAudit\AuditIssues::TITLE_TOO_SHORT。因此,您可以这样处理标题太短的情况

$result = $audit->getAuditResult();

$titleTooShortResult = $result->getIssues()['seo'][TitleAudit::class][AuditIssues::TITLE_TOO_SHORT];
if (isset($titleTooShortResult['length'])) {
    echo sprintf('Title "%s" is too short, its length %d. It should be atleast %d characters.', $result->getTitle(),
        $titleTooShortResult['length'], (new TitleAudit())->getTitleMinLength());
}

输出

Title "This is title" is too short, its length 13. It should be atleast 50 characters.

自定义审计

$titleAudit = new TitleAudit();
// setup custom title limits
$titleAudit->setTitleMinLength(45);
$titleAudit->setTitleMaxLength(70);

$subAudits = [
    $titleAudit,
    new DescriptionAudit(),
    new CanonicalUrlAudit(),
];

测试

执行测试

make test