Laravelで使用できるSEOライブラリの調査
Laravelで作るWebサイトにSEOを導入するために、ツール等を検索した結果、色々ヒットしたので、簡単にまとめてみました。
今回はGithubに公開されているものから、SEO用のmetaタグを一通り出力してくれるものを3つピックアップしています。
■artesaos/seotools
下記のタグ出力を補完してくれるライブラリです。
- 一般的なSEO用metaタグ
- OpenGraphタグ
- Twitterカード用タグ
- JSON LDデータ
- etc.
ontrollerでコンテンツデータをもとにmetaタグ用のデータをセットし、Viewで出力したいタグのファサードを記述する、というシンプルな構造です。セットアップ時に作成される”config/seotools.php”にタグごとの初期値を入れておけば、Controllerで値をセットしていないタグに関しても、適切なタグ出力が可能となります。
また、SEOMeta::addMeta()を使用すれば、特殊なタグネームに関しても対応可能です。
特徴としては、ファサードが充実しており、ソースコードの可読性が高いです。
例えば、Twitterカード用のファサードを例にとります。
<?php
use Artesaos\SEOTools\Facades\TwitterCard;
TwitterCard::addValue($key, $value); // value can be string or array
TwitterCard::setType($type); // type of twitter card tag
TwitterCard::setTitle($type); // title of twitter card tag
TwitterCard::setSite($type); // site of twitter card tag
TwitterCard::setDescription($type); // description of twitter card tag
TwitterCard::setUrl($type); // url of twitter card tag
TwitterCard::setImage($url); // add image url
実際のコーディングでは、
TwitterCard::addValue($key, $value)
->setType($type)
->setImage($url)
->setTitle($title)
->setDescription($description)
->setUrl($url)
->setSite($name);
のように記述可能です。
Viewで出力する場合は、下記を記述します。
TwitterCard::generate();
■romanzipp/Laravel-SEO
下記のタグ出力を補完してくれます。
- 一般的なSEO用タグ
- OpenGraphタグ
- Twitterカード用タグ
- JSON LDデータ
- prefetch/preloadリンク
- etc.
artesaos/seotoolsと同じように、Contloeerでタグ用データをセットし、Viewで出力しますが、ファサードは用意されていません。ControllerからViewへSEOクラス変数を渡し、blade内でメソッドを呼び出すことで、metaタグを出力します。特殊なタグを追加する場合は、add()、addmany()、addif()などのメソッドがあります。特徴的な機能として、は下記の2点です(他にもありますが、全部を追い切れていません)。
・同種タグに関する記述の省略
例えば、SEOタグ、OpenGraphタグ、Twitterカード用タグには、"title"、description等の同じ意味を持つタグがありますが、これらはまとめて記述することが可能です。
例えば、
seo()->title("hoge");
のように"title"の値をセットすると、タグ出力時は、
<title>hoge</title>
<meta property="og:title" content="hoge" />
<meta name="twitter:title" content="hoge" />
と、3種類まとめて出力されます。
・section機能
SEOクラスにsectionというメソッドがあります。sectionごとにタグ用データを使い分けることが可能です。
seo()->title("Title1");
seo()->section("secondary")->title("Title2");
View側でタグを使い分けたい時は重宝しそうです。
■butschster/LaravelMetaTags
SEO関連のmetaタグだけではなく、<script>等などのhtmlタグの出力のコントロールを可能とするライブラリです。SEO関連のタグに関しては、下記の出力をサポートしています。
- 一般的なSEO用タグ
- OpenGraphタグ
- Twitterカード用タグ
- etc.
インストール・設定を行うとconfig/meta_tags.phpが作成され、各metaタグのデフォルト値はここに記載することになります。
基本的に、Controllerでmetaタグの値をセットし、Viewで出力する、というこれまでの2つと同様の使い方ですが、Controller側でタグをコントロールすることを主眼に置いているようです。<script>やcssのリンクもControllerで設定可能なので、Controllerで状況判断してブラウザ側の見た目や動作をコントロールする、ということをサポートしてくれます。
他に特徴的なのは「パッケージ」という概念でしょうか。LaravelMetaTagsでいう「パッケージ(Package)」は、機能を1つにまとめたクラスのようなものです。
例えば、フロントエンドフレームワークであるBootStrap4.5に関するリンクを作成するケースを考えます。BootStrap4.5を使用するには、cssのリンクと<body>の一番最後に、jquery、popper.js、bootstrap.jsの<script>リンクを置く必要があります。これをServiceProvider等に記述する場合、下記のようになります。
PackageManager::create("jquery", function($package) {
$package->addScript("jquery.js", "https://code.jquery.com/jquery-3.5.1.slim.min.js");
});
PackageManager::create("bootstrap4.5", function($package) {
$package->requires("jquery");
$package->addScript("bootstrap4.5.js", "https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js");
$package->addScript("popper.js", "https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js");
$package->addStyle("bootstrap4.5.css", "https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css");
Viewの出力は以下の通り。
Meta::includePackages("bootstrap4.5"); //出力
//ページ上部
<link media="all" type="text/css" rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" />
// ページ下部
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"></script>
場合によっては、CSSスタイルシートはカスタムしたものと使い分けたい、ということもあるかもしれません。その場合は、新たにパッケージを追加します。
ackageManager::create("bootstrap4.5-custom", function($package) {
$package->requires("jquery");
$package->addScript("bootstrap4.5.js", "https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js");
$package->addScript("popper.js", "https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js");
$package->addStyle("bootstrap4.5.css", "https://example.com/css/custom.css");
});
View出力は下記。
Meta::includePackages("bootstrap4.5-custom");
パッケージは、たくさんの種別があり、Twitterカード、OpenGrasphの他、FaviconやGoogle Analytics、Google TagManager等、機能がかなり豊富です。その分使いこなすにはそれなりの時間を必要になりそうです。