Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Laravel Seo Laravel Package

lara-zeus/laravel-seo

Lara Zeus Laravel SEO is a lightweight toolkit for adding search-friendly meta tags, Open Graph and Twitter cards, canonical URLs, robots directives, sitemaps, and structured data to Laravel apps, with sensible defaults and simple per-page overrides. Keep titles, descriptions, and social previews co...

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. This is a presentation-layer package: a fluent metadata builder, a config file of site-wide defaults, per-page overrides, and a Blade render directive. It fits Laravel applications that render HTML through Blade — marketing pages, blogs, docs, CMS-driven content, product detail pages. It does not fit API-only services, SPAs/headless front ends where meta is injected client-side or by a separate CMS, or authenticated apps where organic search is not an acquisition channel. The single most consequential architecture question is whether the package ships a database/migrations directory: if it does, it owns a polymorphic SEO table that becomes our schema to migrate, back up, tenant-scope, and eventually own; if it doesn't, it's a stateless facade over attributes we already have and is effectively free to remove.

Integration feasibility. High and cheap. composer require, publish config, add one render directive in the layout <head>, and set metadata in a controller or model accessor. A TPM can reasonably scope the technical spike at one day for a developer to get a single content detail page emitting title, description, canonical, Open Graph, and Twitter tags, verified by view-source. The integration surface is small enough that reversibility is a realistic commitment — a trait, a presenter, and a directive — provided we enforce that boundary from day one rather than letting package calls spread across fifty Blade files.

Technical risk. The dominant risk is maturity, not technology. One star, zero dependents, a single maintainer, and a release history (v1.0.1) consisting entirely of Dependabot CI bumps — meaning there is no evidence of functional hardening in the wild. Documentation is README-thin; the source is the specification, so estimates must be grounded in a spike, not the description. Secondary risks are scope misrepresentation (the package does not cover sitemaps, JSON-LD/structured data, robots directives, redirects, hreflang, or canonical conflict resolution) and integration defects that only surface in production: duplicate tag sets, escaping of quotes/ampersands, canonical URLs broken behind a proxy/CDN, relative og:image paths, double-applied title suffixes, and full-page caching baking stale metadata into rendered HTML. A final risk to screen early: whether it pulls Filament or sibling Zeus packages transitively — an admin UI as a dependency of a meta-tag renderer is a hard no for a lean service.

Key questions.

  • Does the package ship migrations, and if so, is the table tenant-scoped? (Retrofitting tenancy is far more expensive than deciding in the spike.)
  • What are the exact PHP/Laravel constraints in composer.json, and does it pull Filament or other Lara Zeus packages transitively?
  • Is rendering done via a builder, a model trait, a Blade directive, or all three — and which do we standardize on?
  • Does it support localized metadata or hreflang at all, or is multi-locale entirely out of scope?
  • Who authors the copy — developers in code, or content editors through admin fields — and does the package's model surface support that split?
  • What is our written acceptance criterion for "SEO done" (exactly one tag set, absolute canonical, valid OG image dimensions, escaped content), and who signs off?

Integration Approach

Stack fit. Best fit is a Laravel monolith on Blade, ideally already running Lara Zeus/Filament admin tooling — in that case this is a low-friction add from a maintainer the team already depends on, with no new supply-chain or admin paradigm. Weak fit for headless, API-first, or JS-rendered front ends. Treat "does the team already run Filament?" as the fastest triage question.

Migration path. Three realistic starting states, each with a different cost:

  • Scattered hardcoded meta tags → consolidate to a single render point in the layout and move authoring into controllers/models. The migration work is deletion plus grep, not new code; budget review time to enforce one render point.
  • No metadata at all → configure site-wide defaults (site name, title suffix, fallback description, default OG image) so every page ships credible tags before any per-page work. This is the highest-ratio first step: minimal effort, immediate coverage across the whole site.
  • Replacing artesaos/seotools or similar → the migration is a one-file swap if we have kept all package calls behind our own PageSeo presenter. If we haven't, this becomes a template-by-template refactor.

If the package ships migrations, treat it as a real schema change with a backfill plan, a rollback path, and a decision on whether existing SEO fields in our models are migrated into the new table or left as source of truth.

Compatibility. Pin to "lara-zeus/laravel-seo": "1.0.*" and verify constraints against our current Laravel/PHP versions in the spike. Confirm the directive name and the builder's method names in source before writing controller code — the README examples are illustrative. Validate config caching (php artisan config:cache) matches production behavior, and confirm APP_URL and TrustProxies are correct so canonicals are absolute and scheme/host-accurate.

Sequencing.

  1. Spike (day 1): install, publish config, wire one detail page, view-source verify exactly one tag set, test a title containing " and &, confirm no Filament transitive dependency, confirm whether migrations ship.
  2. Foundation (week 1): config defaults, PageSeo presenter wrapper, a HasSeo trait or accessors on 2–3 content models, single render point in the layout.
  3. Hardening: a middleware for route-group defaults (section title prefix, canonical always current URL), plus a CI snapshot test asserting canonical, og:title, og:image, and the title tag render.
  4. Rollout by template family: content detail pages → listing/index pages → static marketing pages. Each family gets its own acceptance check, not a blanket flip.
  5. Explicitly deferred scope: sitemaps, JSON-LD, robots, redirects, multi-locale. These go in a separate backlog item with their own estimate — do not let the package's existence imply they're handled.

Operational Impact

Maintenance. Code churn should be low, but the release signal is weak: a single maintainer and a changelog composed entirely of CI action bumps gives little confidence about future functional maintenance or responsiveness to issues. Mitigations are cheap and should be non-negotiable: pin the minor version, name a single internal steward for upgrade testing, and keep the exit path real by vendoring or forking if tenant-awareness or localization is needed. Budget a light quarterly review (dependency freshness, open issues, whether the fork plan needs to activate). If the package owns a migration, database maintenance — backups, tenant scoping, schema evolution — is ours permanently.

Support. There is no vendor, no SLA, and effectively no community to lean on. Support capacity is internal: whoever reads the source becomes the authority. This is acceptable for a commodity renderer and unacceptable if the package ends up load-bearing for revenue-critical pages with no owner. The presenter wrapper plus the snapshot test are the support strategy — they make upgrades verifiable by CI rather than by manual QA of every template.

Scaling. Rendering cost is negligible at any realistic traffic level; scaling risk is architectural, not computational. Two concerns: (1) caching — full-page or response caching bakes metadata into HTML, so per-page or per-model meta freezes; cache keys must incorporate SEO-relevant model state, or metadata must be resolved before the cache write. (2) multi-tenancy and multi-locale — assume no hreflang, no translated metadata, and no tenant scoping until the source proves otherwise. If either is on the roadmap, this package becomes a rendering tool only and we model translated/tenant-scoped metadata ourselves; a polymorphic SEO table without tenant scoping is both a correctness bug and a data-leakage risk.

Failure modes, ordered by how hard they are to detect:

  • Silent regressions after upgrade — tags stop rendering and nobody notices until rankings move. Detected only by the CI snapshot test. Highest priority to build.
  • Duplicate tag sets — defaults plus overrides, or a directive plus a component, emit two <title>/og:image tags; search engines pick unpredictably. Prevented by one documented render point and code-review grep.
  • Wrong canonical — http:// or internal host behind a load balancer, or a stale canonical on a paginated/filtered URL. Worse than no canonical. Prevented by proxy/APP_URL validation in the spike.
  • Escaping defects — titles with quotes, ampersands, or emoji break markup or double-escape. Surfaces in production, not in happy-path spikes; test deliberately.
  • Double title suffix — config appends — Site Name and the controller does too. Decide once: config owns the suffix.
  • Relative og:image — silently ignored by scrapers; always pass an absolute URL, prefer 1200×630.
  • Stale metadata ownership — content team ships pages with no one accountable for titles/descriptions, so tags are technically valid and editorially wrong. An org failure mode, not a package one.

Ramp-up. A Laravel developer is productive in roughly half a day; the package's API is small and conventional. The real ramp is on conventions, and that's the TPM's job to set: which layer authors metadata (model trait vs. controller vs. middleware), whether content editors own the copy through admin fields or developers hardcode it, what the template/route matrix looks like for the rollout, and what the written acceptance criterion for "SEO done" is. That criterion — exactly one tag set, absolute canonical, absolute OG image, correctly escaped content, verified in CI — is the reusable artifact this package gives product beyond the code itself: a concrete, shippable definition of baseline on-page SEO to align product and engineering before anyone scopes a larger build.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
se7enxweb/flysystem
lampwick/laravel
jeslage/statamic-emojis
micahdshackelford/rmap-laravel
draftsmaninc/draftsman
square-bit/laravel-volition
himito/laravel-mailman
htinlynn/genius-helper
maco-studios/hephaestus
elmogy/larafast
xeviant/laravel-paystack
gorilladash/laravel-website-sdk
martialbe/flysystem-oss
chondal/3312client
jeroen-g/flickr
opscale-co/nova-genbi
itsjustvita/laravel-retention
tequilarapido/trackit
gregsphotography/site-builder-filament
cabaoctavio/laravel-query-log