lee-to/laravel-seo-by-url

为 Laravel 和 MoonShine 提供简易 SEO

1.0.2 2024-07-08 07:51 UTC

This package is auto-updated.

Last update: 2024-09-08 08:10:26 UTC


README

Laravel 9+ PHP 8+

序言

SEO 数据存储在数据库的 seo 表中,并根据 URL 与页面关联,URL 对网站来说是唯一的,因此本包中的 SEO 就是基于 URL 构建的

  • 易于使用
  • 不绑定到实体
  • 所有数据都相对于 URL 缓存,并由模型上的事件重置

安装

composer require lee-to/laravel-seo-by-url

发布配置

php artisan vendor:publish --provider="Leeto\Seo\Providers\SeoServiceProvider"
php artisan migrate

你是视觉学习者吗?

我们录制了一个 视频,演示如何使用此包。这是开始使用媒体库的最好方法

MoonShine

如果你使用 MoonShine,则可以使用此命令发布资源

php artisan seo:moonshine

开始使用

对于初学者,你可以选择最适合你的使用方法

  • 门面
use Leeto\Seo\Seo;

// ...

Seo::title('Hello world')
  • 辅助函数
seo()->title('Hello world')
  • 依赖注入
use Leeto\Seo\SeoManager;

// ...

public function __invoke(SeoManager $seo)
{
    //
}
  • 我更喜欢使用辅助函数

Blade 指令

渲染元标签

标题、描述、关键词、og

<html>
<head>
    <!-- // ... -->

    @seo

    <!-- // ... -->
</head>

渲染 SEO 文本

<div>
    @seoText('Default text')
</div>

设置和保存 SEO 数据

  • 设置
seo()->title('Im page title')
  • 设置并保存到数据库
seo()->title('Im page title', true)
  • 其他标签
seo()->description('Im page description')
seo()->keywords('Im page description')
seo()->text('Im page description')
seo()->og(['image' => 'link to image'])
  • 获取值
seo()->meta()->title()
seo()->meta()->description()
seo()->meta()->keywords()
seo()->meta()->text()
seo()->meta()->og()
  • 获取 HTML 标签
seo()->meta()->html()
  • 通过模型保存
use Leeto\Seo\Models\Seo;

Seo::create([
    'url' => '/',
    'title' => 'Im title'
]);

默认值

在 SEO 配置 config/seo.php 中设置

return [
    'default' => [
        'title' => 'Im title'
    ]
]);

Inertia

使用共享数据

class HandleInertiaRequests extends Middleware
{
    //
    public function share(Request $request)
    {
        return array_merge(parent::share($request), [
            // ...

            'seo' => [
                'title' => seo()->meta()->title(),
                'description' => seo()->meta()->description(),
                'keywords' => seo()->meta()->keywords(),
                'og' => seo()->meta()->og(),
                'text' => seo()->meta()->text(),
            ]
        ]);
    }
    //
}
import { Head } from '@inertiajs/vue3'

<Head>
  <title>{{ $page.props.seo.title }}</title>
  <meta name="description" :content="$page.props.seo.description">
</Head>