Přejít na obsah

Migrace z jiných balíčků SEO pro Laravel

Používáte už jiný balíček SEO? Přechod na Rankbeam má být práce na jeden den, nikoli přepis aplikace. Tento průvodce převádí API a úložiště běžných balíčků na dva základní prvky Rankbeamu: trait HasSEO a saveSEO(). Pro balíček, který ukládá data SEO u jednotlivých modelů, nabízí import jedním příkazem.

Přecházíte z WordPressu?

Pokud převádíte obsahový web z WordPressu s Yoastem nebo Rank Math, použijte samostatného průvodce Migrace z WordPressu. Popisuje importér CSV i čtení z existující databáze.

Zdrojový balíčekKam ukládá dataPostup migrace
ralphjsmit/laravel-seopolymorfní tabulka seophp artisan seo:import-from ralphjsmit a výměna traitu
artesaos/seotoolsnikam; běhové hodnoty a konfiguracezměna kódu: hodnoty přes saveSEO() nebo vypočítávané gettery
spatie/*nikam; generátory schema-org a map webuponechte doplňující funkce, zbytek převeďte do Rankbeamu

Pouze ralphjsmit ukládá data SEO do databázové tabulky, takže jen u něj existují data k hromadnému importu. Ostatní sestavují značky za běhu a nemají tabulku ke čtení. Jejich volání při každém požadavku nahradíte uloženými hodnotami seo_meta.


Z ralphjsmit/laravel-seo

ralphjsmit/laravel-seo ukládá pro každý model jeden polymorfní řádek do tabulky seo. Její struktura je blízká tabulce seo_meta Rankbeamu, což umožňuje přímý, idempotentní hromadný import.

1. Nainstalujte Rankbeam vedle původního balíčku

bash
composer require rankbeam/laravel-seo
php artisan vendor:publish --tag=seo-config
php artisan vendor:publish --tag=seo-migrations
php artisan migrate

Během migrace mohou oba balíčky existovat současně. Používají různé tabulky (seo a seo_meta) i různé jmenné prostory traitů.

Jeden konfigurační soubor, nikoli dva

Pokud v aplikaci zůstává zkopírovaný config/seo.php z ralphjsmit/laravel-seo, překryje konfiguraci Rankbeamu, protože oba balíčky sdílejí konfigurační klíč seo. Zálohujte ho, odstraňte a zkopírujte konfiguraci Rankbeamu: php artisan vendor:publish --tag=seo-config.

2. Spusťte importér

bash
# Preview first — writes nothing
php artisan seo:import-from ralphjsmit --dry-run

# Then import for real
php artisan seo:import-from ralphjsmit

Importér čte tabulku seo balíčku ralphjsmit, dohledá skutečný model Eloquent pro každý řádek a zapíše data do seo_meta.

VolbaÚčinek
--dry-runVypíše, co by se importovalo, a nic nezapíše.
--model="App\Models\Post"Omezí import na jednu nebo více tříd modelů; lze opakovat.
--locale=frZapíše řádky pro tento jazyk; výchozí je jazyk aplikace.
--table=legacy_seoČte přejmenovanou zdrojovou tabulku.
--connection=legacyČte zdrojovou tabulku z jiného databázového připojení.
--limit=100Importuje nejvýše N řádků; vhodné pro postupnou migraci.
--overwriteNahradí existující neprázdné hodnoty; standardně se pouze doplňují prázdná pole.
--jsonStrojově čitelný report.
--forcePřeskočí potvrzení pro použití ve skriptech nebo CI.

Import je idempotentní: opakované spuštění aktualizuje stejné řádky a nevytváří duplikáty. Ve výchozím nastavení pouze doplňuje prázdná pole a nepřepisuje data SEO, která jste už v Rankbeamu nastavili. Pokud chcete stávající hodnoty nahradit importovanými, předejte --overwrite.

3. Vyměňte trait na modelech

Nahraďte trait ralphjsmitu traitem Rankbeamu. Názvy metod se mírně liší a trait nyní čte tabulku seo_meta.

php
// Before
use RalphJSmit\Laravel\SEO\Support\HasSEO;

// After
use Rankbeam\Seo\Traits\HasSEO;

Pokud jste data SEO upravovali pomocí getDynamicSEOData() z ralphjsmitu, přesuňte logiku do getterů Rankbeamu pro vypočítávané hodnoty jednotlivých polí: getSEOTitle(), getSEODescription(), getSEOImage(), getUrlForSEO() a getSEOAlternates(). Viz Rychlý začátek. Výslovně uložené hodnoty nastavujte přes saveSEO():

php
$post->saveSEO([
    'title' => 'A hand-written SEO title',
    'description' => 'A hand-written meta description.',
    'canonical' => 'https://example.com/posts/my-post',
    'robots' => 'noindex, nofollow',
    'og_image' => 'https://example.com/og/my-post.jpg',
]);

Mapování polí

Importér mapuje pole výslovně. Nikdy slepě nekopíruje sloupec, který schéma Core 3 neobsahuje.

ralphjsmit seoRankbeam seo_metaPoznámky
model_type / model_idseoable_type / seoable_idZnovu určené ze skutečného modelu, nikoli doslovně zkopírované; viz níže.
titletitleZkráceno na 70 znaků, délku sloupce v seo_meta; příliš dlouhé hodnoty jsou v reportu.
descriptiondescriptionZkráceno na 160 znaků; příliš dlouhé hodnoty jsou v reportu.
canonical_urlcanonical
robotsrobotsZkráceno na 50 znaků.
imageog_imagetwitter:image hodnotu automaticky zdědí přes resolver.
author(neimportuje se)seo_meta v Core 3 nemá sloupec autora. Autor článku se řeší na úrovni resolveru, nejde o uložená sociální metadata. Řádky s autorem se počítají a uvádějí v reportu, abyste rozhodli, kam údaj patří, například do vypočítávané hodnoty typu getSEOData.
id, created_at, updated_at(neimportují se)Strukturální údaje.

Proč se polymorfní typ určuje znovu. Pro každý zdrojový řádek se dohledá skutečný model a klíče seoable se převezmou z jeho vlastního getMorphClass(). Vztah tak odpovídá aktuální mapě polymorfních typů aplikace, i když ralphjsmit používal jinou konvenci. Importér také může přeskočit řádky modelů, které byly mezitím odstraněny. Označí je jako přeskočené a nikdy je nezapíše jako osiřelé záznamy.

Co vám řekne report

Běh bez --json vypíše tabulku výsledků a tři části ke kontrole:

  • Truncated — hodnoty zkrácené na délku sloupce v seo_meta. Zkontrolujte je.
  • Not imported — zdrojové sloupce, například author, které obsahovaly data, ale nemají odpovídající místo v Core 3.
  • Skipped rows by reason — přeskočené řádky podle důvodu: prázdné zdroje, odstraněné modely nebo nedohledané typy modelů.

Ověření

bash
php artisan seo:audit            # confirm the imported metadata looks right

Jakmile výsledek vyhovuje, odeberte ralphjsmit/laravel-seo a odstraňte jeho tabulku seo.


Z artesaos/seotools

artesaos/seotools sestavuje značky za běhu. Hodnoty nastavujete pro každý požadavek přes fasády SEOMeta, OpenGraph, TwitterCard a JsonLd, často v controlleru, s výchozími hodnotami z config/seotools.php. U modelů se nic neukládá, takže není co importovat z tabulky. Volání pro každý požadavek převedete na uložené nebo vypočítávané hodnoty.

Volání artesaos/seotoolsEkvivalent v Rankbeamu
SEOMeta::setTitle($t)saveSEO(['title' => $t]) nebo getSEOTitle()
SEOMeta::setDescription($d)saveSEO(['description' => $d]) nebo getSEODescription()
SEOMeta::setCanonical($u)saveSEO(['canonical' => $u]) nebo getUrlForSEO()
SEOMeta::addKeyword(...)Odpovídající meta značka keywords neexistuje: hlavní klíčová slova slouží interním redakčním kontrolám. saveSEO(['focus_keywords' => [...]]); viz audit.
OpenGraph::setTitle / setDescription / addImagesaveSEO(['og_title' => …, 'og_description' => …, 'og_image' => …])
TwitterCard::setType / setTitle / setImagesaveSEO(['twitter_card' => …, 'twitter_title' => …, 'twitter_image' => …])
JsonLd::setType(...) / JsonLdMultiGraf schématu JSON-LD
Výchozí hodnoty config/seotools.phpVýchozí hodnoty webu v config/seo.php a priority resolveru
{!! SEO::generate() !!} v layoutu@seo($model); viz Blade

Mění se celkový přístup: místo nastavování značek v každém controlleru uložíte data SEO jednou pro každý model do seo_meta a resolver Rankbeamu je vykreslí. Celowebové náhradní hodnoty z config/seotools.php se stanou výchozími hodnotami konfigurace Rankbeamu. Statické stránky jednotlivých tras používají @seoForRoute().


Z balíčků Spatie

Balíček spatie/laravel-seo pro ukládání metadat neexistuje, takže není co importovat. Balíčky Spatie používané se SEO jsou doplňující generátory. Můžete je ponechat nebo nahrazovat postupně:

  • spatie/schema-org — generátor JSON-LD s řetězeným API. Rankbeam má vlastní graf schématu s typovanými generátory Article, FAQPage, Product, BreadcrumbList, LocalBusiness a Organization, které ukládají data do seo_meta.schema_jsonld a vykreslují je bez duplikátů. Pokud máte ručně sestavené objekty spatie/schema-org, předejte jejich výstup ->toArray() do saveSEO(['schema_jsonld' => $array]) nebo je přepište pomocí generátorů Rankbeamu.
  • spatie/laravel-sitemap — generátor map webu. Registr map webu Rankbeamu na něm staví. Můžete zaregistrovat modely jako zdroje a nechat Rankbeam vytvořit společnou mapu, nebo ponechat stávající mapu Spatie a vypnout trasu Rankbeamu.

(Pokud jste používali romanzipp/laravel-seo, další generátor metadat založený na běhových hodnotách a strukturách, postupujte stejně jako u artesaos: volání setTitle/addMeta při každém požadavku převeďte na saveSEO() nebo vypočítávané gettery.)


Rozšíření importéru

Za příkazem seo:import-from stojí malý registr implementací Rankbeam\Seo\Importing\Contracts\Importer. Nové zdroje tak lze přidávat bez změn příkazu. Vestavěné zdroje jsou ralphjsmit a importéry WordPressu: wordpress-csv, yoast, rank-math; viz Migrace z WordPressu. Vlastní zdroj zaregistrujte v poskytovateli služeb:

php
use Rankbeam\Seo\Importing\ImporterRegistry;

$this->app->afterResolving(ImporterRegistry::class, function (ImporterRegistry $registry) {
    $registry->register('my-source', \App\Seo\MyImporter::class);
});

rankbeam/laravel-seo je distribuován pod licencí MIT.