Szybki start
Zacznij od istniejącej aplikacji Laravel 11, 12 lub 13 z działającą bazą danych. Laravel 11: PHP 8.2–8.4; Laravel 12: PHP 8.2–8.5; Laravel 13: PHP 8.3–8.5. Rdzeń jest bezpłatny na licencji MIT; nie potrzebujesz konta ani licencji Pro.
Instalacja
Uruchom te polecenia w katalogu aplikacji:
composer require rankbeam/laravel-seo
php artisan vendor:publish --tag=seo-config
php artisan migrateDostawca usług jest wykrywany automatycznie. Migracja tworzy tabele SEO; nie tworzy modeli treści Twojej aplikacji.
Zanim zaczniesz przykład
Poniższe kroki zakładają, że masz już model Post, zapisany wpis i trasę posts.show, której widok Blade otrzymuje ten wpis jako $post. Dostosuj nazwy do swojej aplikacji. Ten przewodnik dodaje SEO do istniejącej strony; nie buduje bloga.
W pliku .env ustaw APP_URL na publiczny adres bazowy witryny. Jeśli używasz innego sposobu renderowania, skorzystaj z przewodnika Inertia i JSON lub przewodnika Livewire.
1. Dodaj cechę do modelu
use Illuminate\Database\Eloquent\Model;
use Rankbeam\Seo\Traits\HasSEO;
class Post extends Model
{
use HasSEO;
public function getUrlForSEO(): string
{
return route('posts.show', $this);
}
}getUrlForSEO() wskazuje resolverowi kanoniczny URL modelu. Na tej podstawie powstają adresy kanoniczne, og:url i wpisy w mapie witryny.
2. Wygeneruj sekcję head
<!DOCTYPE html>
<html>
<head>
@seo($post)
</head>@seo($post) generuje tytuł, metaopis, kanoniczny URL, dyrektywę robots, tagi Open Graph i Twitter Card oraz JSON-LD dołączone do rozstrzygniętych danych. Jeśli nie zapisano jeszcze jawnych wartości, wszystko pochodzi z wyliczanych wartości zastępczych (atrybutów samego wpisu) i skonfigurowanych wartości domyślnych. Zobacz priorytety resolvera.
3. Ustaw jawne wartości
$post->saveSEO([
'title' => 'Custom SEO Title',
'description' => 'Custom meta description',
]);Jawne wartości mają pierwszeństwo przed każdą warstwą zastępczą. Dla przetłumaczonych metadanych podaj locale: $post->saveSEO(['title' => 'Titre'], 'fr').
Zasilasz bazę seederami?
Domyślny DatabaseSeeder w Laravel używa cechy WithoutModelEvents, która bez ostrzeżenia wyłącza automatyczne tworzenie rekordów przez HasSEO. Usuń tę cechę albo jawnie wywołuj saveSEO() w seederach.
4. Sprawdź wynik
Otwórz publiczną stronę wpisu i wybierz Wyświetl źródło strony. W sekcji <head> sprawdź, czy tytuł zawiera Custom SEO Title, opis ma wartość Custom meta description, a adres kanoniczny prowadzi do publicznego URL-a wpisu. Po tytule może występować skonfigurowany sufiks.
Użyj @seo($post) tylko raz na stronie. Jeśli układ już generuje tytuł lub tagi meta, zastąp je, aby uniknąć duplikatów. Gdy wartość jest nieoczekiwana, przewodnik po wyjaśnianiu wyników resolvera pomoże ustalić jej źródło.
5. Dodaj mapę witryny (opcjonalnie)
// e.g. in AppServiceProvider::boot()
use App\Models\Post;
use Rankbeam\Seo\Facades\SEO;
SEO::sitemaps()->register('posts', Post::class);composer require spatie/laravel-sitemap
php artisan seo:sitemap/sitemap.xml udostępnia teraz wygenerowany indeks. Pełną listę opcji znajdziesz w przewodniku po rejestrze map witryny.
Co dalej?
- Priorytety resolvera — jak wybierane są wartości
- Przewodnik Blade — wszystkie siedem dyrektyw
- Inertia i JSON — renderowanie niezależne od interfejsu
- Graf schematu — powiązane JSON-LD
- Pola Filament — interfejs administracyjny w dwóch liniach