优雅 / laravel-seo
为Laravel提供优雅且灵活的SEO标签构建器
v1.1.6
2024-09-14 17:55 UTC
Requires
- php: ^8.2
- illuminate/contracts: ^10.0||^11.0
- spatie/laravel-package-tools: ^1.16
Requires (Dev)
- larastan/larastan: ^2.9
- laravel/pint: ^1.14
- nunomaduro/collision: ^8.1.1||^7.10.0
- orchestra/testbench: ^9.0.0||^8.22.0
- pestphp/pest: ^2.34
- pestphp/pest-plugin-arch: ^2.7
- pestphp/pest-plugin-laravel: ^2.3
- phpstan/extension-installer: ^1.3
- phpstan/phpstan-deprecation-rules: ^1.1
- phpstan/phpstan-phpunit: ^1.3
README
简介
laravel-seo
是一个用于管理Laravel应用中SEO标签的灵活且强大的包。
使用此包,您可以轻松处理
- 标准HTML标签,如
<title>
和<meta name="robots">
- 使用替代标签进行本地化(Google SEO本地化)
- Open Graph标签,具有结构化属性、数组和对象类型
- Twitter (X) 标签
- 结构化数据(JSON-LD)
安装
您可以通过Composer安装此包
composer require elegantly/laravel-seo
接下来,发布配置文件
php artisan vendor:publish --tag="seo-config"
配置文件概览
配置文件(config/seo.php
)允许您自定义应用程序的默认SEO行为。以下是所有可用设置的片段
return [ 'defaults' => [ /* |-------------------------------------------------------------------------- | Default Title |-------------------------------------------------------------------------- | | This is the default value used for <title>, "og:title", "twitter:title" | */ 'title' => env('APP_NAME', 'Laravel'), /* |-------------------------------------------------------------------------- | Default Description |-------------------------------------------------------------------------- | | This is the default value used for <meta name="description">, | <meta property="og:description">, <meta name="twitter:description"> | */ 'description' => null, /* |-------------------------------------------------------------------------- | Default Author |-------------------------------------------------------------------------- | | This is the default value used for <meta name="author"> | */ 'author' => null, /* |-------------------------------------------------------------------------- | Default Generator |-------------------------------------------------------------------------- | | This is the default value used for <meta name="generator"> | */ 'generator' => null, /* |-------------------------------------------------------------------------- | Default Keywords |-------------------------------------------------------------------------- | | This is the default value used for <meta name="keywords"> | Types supported: string or array of strings | */ 'keywords' => null, /* |-------------------------------------------------------------------------- | Default Referrer |-------------------------------------------------------------------------- | | This is the default value used for <meta name="referrer"> | */ 'referrer' => null, /* |-------------------------------------------------------------------------- | Default Theme color |-------------------------------------------------------------------------- | | This is the default value used for <meta name="theme-color"> | */ 'theme-color' => null, /* |-------------------------------------------------------------------------- | Default Color Scheme |-------------------------------------------------------------------------- | | This is the default value used for <meta name="color-scheme"> | */ 'color-scheme' => null, /* |-------------------------------------------------------------------------- | Default Image path |-------------------------------------------------------------------------- | | This is the default value used for <meta property="og:image">, <meta name="twitter:image"> | You can use relative path like "/opengraph.png" or url like "https://example.com/opengraph.png" | */ 'image' => null, /* |-------------------------------------------------------------------------- | Default Robots |-------------------------------------------------------------------------- | | This is the default value used for <meta name="robots"> | See Google documentation here: https://developers.google.com/search/docs/crawling-indexing/robots-meta-tag?hl=fr#directives | */ 'robots' => 'max-snippet:-1,max-image-preview:large,max-video-preview:-1', /* |-------------------------------------------------------------------------- | Default Sitemap path |-------------------------------------------------------------------------- | | This is the default value used for <link rel="sitemap"> | You can use relative path like "/sitemap.xml" or url like "https://example.com/sitemap.xml" | */ 'sitemap' => null, ], /** * @see https://ogp.me/ */ 'opengraph' => [ /* |-------------------------------------------------------------------------- | Default Site Name |-------------------------------------------------------------------------- | | This is the default value used for <meta property="og:site_name" /> | If null: config('app.name') is used. | */ 'site_name' => null, /* |-------------------------------------------------------------------------- | Default Determiner |-------------------------------------------------------------------------- | | This is the default value used for <meta property="og:determiner" /> | Possible values are: a, an, the, "", auto | */ 'determiner' => '', ], /** * @see https://developer.x.com/en/docs/x-for-websites/cards/overview/abouts-cards */ 'twitter' => [ /* |-------------------------------------------------------------------------- | Default Twitter username |-------------------------------------------------------------------------- | | This is the default value used for <meta name="twitter:site" /> | Example: @X | */ 'site' => null, ], /** * @see https://schema.org/WebPage */ 'schema' => [ /* |-------------------------------------------------------------------------- | Default WebPage schema |-------------------------------------------------------------------------- | | This is the default value used for the schema WebPage | @see https://schema.org/WebPage for all available properties | */ 'webpage' => [], ], ];
用法
显示SEO标签
您可以通过调用 seo()
辅助函数轻松地在Blade视图中渲染所有SEO标签
<head> {!! seo() !!} </head>
这将渲染所有默认标签,例如
<title>Home</title> <meta name="robots" content="max-snippet:-1,max-image-preview:large,max-video-preview:-1" /> <link rel="canonical" href="https://example.com" /> <!-- Open Graph --> <meta property="og:title" content="Home" /> <meta property="og:url" content="https://example.com" /> <meta property="og:locale" content="en" /> <meta property="og:site_name" content="My App" /> <meta property="og:type" content="website" /> <!-- Twitter (X) --> <meta name="twitter:card" content="summary" /> <meta name="twitter:title" content="Home" /> <!-- JSON-LD --> <script type="application/ld+json"> { "@context": "https://schema.org", "@type": "WebPage", "name": "Home", "url": "https://example.com" } </script>
在控制器中设置SEO标签
通常您希望在控制器中动态定义您的SEO标签。您可以使用 seo()
辅助函数或 SeoManager
门面来完成此操作
namespace App\Http\Controllers; use \Elegantly\Seo\Facades\SeoManager; use Elegantly\Seo\Standard\Alternate; class HomeController extends Controller { public function __invoke() { // Using the helper seo() ->setTitle("Homepage") ->setImage(asset('images/opengraph.jpg')) ->setDescription("The homepage description") ->when(!App::isProduction(), fn($seo) => $seo->noIndex()) ->setLocale("fr") ->setAlternates([ new Alternate( hreflang: "en", href: route('home', ['locale' => "en"]), ), new Alternate( hreflang: "fr", href: route('home', ['locale' => "fr"]), ), ]) ->setOpengraph(function(OpenGraph $opengraph){ $opengraph->title = "Custom opengraph title"; return $opengraph; }); // Using the facade SeoManager::current() ->setTitle("Homepage") ->setDescription("The homepage description"); // ... return view('home'); } }
然后,在您的Blade视图中,只需像这样渲染标签即可
<head> {!! seo() !!} </head>
高级用法
对于更复杂的SEO需求,您可以直接实例化和配置 SeoManager
类。这使您能够完全控制每个标签,包括Open Graph、Twitter、JSON-LD和自定义方案标签。
use Elegantly\Seo\SeoManager; use Elegantly\Seo\Standard\Standard; use Elegantly\Seo\OpenGraph\OpenGraph; use Elegantly\Seo\Twitter\Cards\Card; use Elegantly\Seo\Schemas\Schema; use Elegantly\Seo\SeoTags; $seo = new SeoManager( standard: new Standard(/* ... */), opengraph: new OpenGraph(/* ... */), twitter: new Card(/* ... */), webpage: new WebPage(/* ... */), schemas: [/* ... */], customTags: new SeoTags(/* ... */) );
然后,在您的Blade视图中
<head> {!! $seo !!} </head>
测试
要运行测试
composer test
更改日志
请参阅 CHANGELOG 了解最近更新的详细信息。
贡献
有关向此项目贡献的指南,请参阅 CONTRIBUTING。
安全
有关报告漏洞,请参阅我们的 安全策略。
鸣谢
许可
此包根据 MIT许可 许可。