torann/meta-tags
Meta tags manager for Laravel that adds SEO and social metadata to models and views with a fluent, configurable API. It handles titles, descriptions, Open Graph, and Twitter cards, keeping tag setup readable and centralized.
Architecture fit
<head>.@meta directive are transitive dependencies of every template that calls them. Constrain usage to a single head partial/component so the API surface appears in exactly one file.Integration feasibility
composer.json constraints (illuminate/support, PHP ^5.6|^7.0) to hard-conflict with PHP 8.x / Laravel 10–12.composer require on a modern stack fails, (b) succeeds only with --ignore-platform-reqs (unacceptable for production), or (c) requires a maintained internal fork that widens constraints and adds a compatibility shim. A one-day spike answers this definitively via composer why-not.<meta name="description"> attribute key, property vs name conventions for OG, escaping of quotes/ampersands/non-ASCII, and single-emission per tag.Technical risk
Key questions
<meta> blocks."Recommendation: Treat as conditional / pilot-only, not a standard. Only adopt if (1) the install spike passes cleanly, or (2) we accept a fork with a named owner. Otherwise build the small internal equivalent — the package's scope is not a differentiator, and its maturity is a liability.
Stack fit
<head>, PHP 8.x, CI with Composer lock and Dependabot.Compatibility
0.0.4 (the description-attribute fix). Do not use ^0.0 — pre-1.0 semver permits behavior changes in patch releases, and there is no upstream to consult about intent.composer install with no constraint overrides plus correct tag output.config:cache and view:cache round-trip cleanly.Migration path
<meta> blocks across layouts and views; count page types. If the number is small (<5), stop — build instead.resources/views/partials/head-meta.blade.php) that owns all meta rendering. Nothing else in the codebase may call the facade or directive.&, CJK/accents).PageMetadata service or view composer — so replacing the package later is one file, not a template sweep.Sequencing
Maintenance
Support
Scaling
Failure modes
| Failure | Symptom | Detection | Blast radius |
|---|---|---|---|
| Composer constraint conflict | Install/upgrade fails | CI | Blocks Laravel upgrades |
| Wrong attribute key (name vs property) | Crawlers/social ignore the tag | Silent | SEO + share previews |
| Duplicate description tags | Conflicting metadata | Silent | SEO ranking/preview |
Escaping defect (quotes, &) |
Broken markup in <head> |
Silent or layout breakage | Page rendering |
| Empty defaults on new page type | Blank/absent title or description | Silent | SEO |
| Config cache stale | Changes don't apply | Manual | Confusing debugging |
| Upstream goes fully dark | No patch path | — | Forces fork/replace |
<head> on key URLs in staging.Ramp-up
Bottom line for the roadmap: this is a small, undifferentiated glue dependency with a stale upstream and a documented correctness defect history. It can accelerate an SEO/sharing initiative on a low-risk surface, but only behind an internal seam, pinned to 0.0.4, with a named owner and a defined exit trigger. If the install spike fails or the internal build estimate lands at ≤2 engineer-days, choose the build.
How can I help you explore Laravel packages today?