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

Meta Tags Laravel Package

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.

View on GitHub
Deep Wiki
Context7

Product Decisions This Supports

  • Build vs. buy on the SEO/metadata layer — the honest framing here is "vendor vs. write 40 lines." The package's job is narrow: collect title, description, keywords, canonical, Open Graph, and Twitter Card values from controllers/Blade, apply config defaults and per-section fallbacks, and render them once in <head>. That is roughly a config array plus a Blade component. This package is worth adopting only if it saves more time than the fork-and-own cost, which for a package last released in January 2017 with 0 dependents and 6 stars is a genuine question rather than a formality.
  • Roadmap input for shareability and organic acquisition — if social previews, shareable link quality, or organic search are on the roadmap, correct meta rendering is a prerequisite, not a differentiator. This package is a shortcut to the prerequisite. It should not appear on a roadmap as a feature; it should appear as an enabler inside one.
  • Content-ownership model (CMS / marketing pages) — the real product value is letting non-engineers author titles, descriptions, canonical URLs, and OG images per page, stored on Eloquent models and mapped in. That reduces per-page release overhead and is the strongest argument for a pattern like this, independent of which implementation we pick.
  • Locale, tenant, and multi-brand variants — if we ship hreflang, per-tenant branding, or per-market copy, metadata must vary per request. That requirement justifies a metadata service over static Blade includes. It does not, by itself, justify this metadata service.
  • Risk posture on a 0.0.x, unmaintained dependency — the last release fixed the attribute key on the description tag. Basic field output was wrong in the wild and stayed wrong until a patch. Combined with a seven-year-old release history and no downstream dependents to absorb the risk, the PM decision this most directly supports is scoping: treat it as reference implementation and design input, not as a dependency to plan around.

When to Consider This Package

Consider adopting (or, more realistically, forking) when:

  • You render HTML server-side in Laravel (Blade/Livewire) and metadata must reflect per-request data.
  • You have several page types where metadata is authored by non-engineers, and scattered <meta> blocks are already causing drift.
  • You need a working reference for the defaults-plus-overrides pattern — config-level site defaults, section fallbacks, per-page overrides — and want to see the shape before writing your own.
  • BSD-2-Clause makes vendoring, forking, or lifting the approach outright legally uncomplicated. If the code is small, "buy" collapses into "copy with attribution," which is the pragmatic path.

Look elsewhere or build in-house when:

  • You are on Inertia/React/Vue with client-side head management already solved — adopting this adds a second source of truth for <head>.
  • Metadata is static and global; a layout partial is cheaper than any dependency.
  • You need anything the 2017-era package predates: JSON-LD / schema.org structured data, hreflang generation, modern Twitter Card variants, or Laravel versions released after it was abandoned. Verify Laravel compatibility before it reaches a spike, not after.
  • You require a security policy, a support contract, or a maintained release cadence. There is no signal here that any of those exist, and 0 dependents means no community has absorbed the risk for you. Assume thin or absent test coverage until proven otherwise; the description-attribute bug is evidence, not an edge case.
  • The team is small enough that a 40-line Blade component plus a config array is genuinely cheaper to own than a dependency with an unknown upgrade path. At <5 templates, that is the default answer.

How to Pitch It (Stakeholders)

To executives: We are evaluating a small Laravel package that standardizes page metadata — the titles, descriptions, and social preview tags that shape how our pages appear in Google and when shared on Slack, LinkedIn, or X. The functional upside is real: fewer broken or missing descriptions, consistent social cards, and per-page metadata that marketing can own without an engineering ticket. The maturity picture is the deciding factor. It is at version 0.0.4, its last release was January 2017, it has no downstream dependents, and that final release was a fix for an incorrect description tag attribute — meaning core output was wrong in production for anyone using it. Recommendation: do not adopt as a dependency. Use it as a design reference, build the equivalent behind our own small metadata service, and revisit third-party options only if a maintained 1.0-class package emerges. Cost of building is on the order of days; cost of an unmaintained head-tag dependency is measured in a single bad deploy.

To engineering: The package does one thing well conceptually — a fluent API plus a @meta Blade directive, configurable defaults, section fallbacks, and per-page overrides, rendered once in the layout head. The implementation is the problem: pre-1.0, untouched since 2017, no dependents, and the last commit fixed the attribute key on <meta name="description">. Assume no meaningful test suite and no compatibility work for current Laravel. The pattern is worth stealing; the code is not worth depending on. If we build it ourselves, the spec is: a config file for site defaults (title suffix, default description, OG defaults), a per-request value object resolvable from a controller or model, one Blade component rendered exactly once in <head>, and feature tests asserting a single name="description" tag with correct escaping for quotes and non-ASCII. Wrap it so swapping implementations later is a one-file change. If someone insists on trialing the package anyway, pin the exact version, confine it to one non-critical marketing surface, run config:clear/view:clear after any config change, and audit the rendered head for duplicate description tags — the most common failure mode is a hand-written tag in the layout colliding with the package's output.

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.
abbasudo/artisan-route
mirvan/ippanel
ignibyte/aic-framework
glavweb/data-schema-bundle
glavweb/datagrid-bundle
tacticmedia/scim-server
uni-method/frame
neika-ai/sdk
adachsoft/php-code-style
pharaonic/laravel-notification-dependencies
beautinow/translug
dev-brainiac/bot-cloaked
octoberrain/html
octoberrain/extension
octoberrain/exception
octoberrain/contracts
adachsoft/api-version-bundle
cgv/localized-resource
noith/settings
kda/laravel-package