lee-to / laravel-seo-by-url
为 Laravel 和 MoonShine 提供简易 SEO
1.0.2
2024-07-08 07:51 UTC
Requires
- php: ^8.0|^8.1|^8.2
Requires (Dev)
- fakerphp/faker: ^1.9.2
- mockery/mockery: ^1.4.4
- orchestra/testbench: ^7.5
- phpunit/phpunit: ^9.5.8
README
序言
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>