fkrzski/laravel-canonical

Laravel package for managing canonical URLs and preventing duplicate content

Fund package maintenance!
fkrzski

Installs: 0

Dependents: 0

Suggesters: 0

Security: 0

Stars: 0

Watchers: 0

Forks: 0

Open Issues: 0

pkg:composer/fkrzski/laravel-canonical

1.0.0 2025-10-20 19:30 UTC

This package is auto-updated.

Last update: 2025-10-20 19:36:38 UTC


README

Latest Version on Packagist Tests Total Downloads

A lightweight Laravel package for generating canonical URLs to prevent duplicate content issues and improve SEO. Automatically normalizes URLs by removing trailing slashes while preserving query parameters.

Version Compatibility

Package Version PHP Version Laravel Version
1.x.x 8.3+ 11.x, 12.x

Installation

Install via Composer:

composer require fkrzski/laravel-canonical

The package will auto-register via Laravel's package discovery.

Configuration

Publish the configuration file (optional):

php artisan vendor:publish --tag="canonical-config"

Set your canonical domain in .env:

CANONICAL_DOMAIN=https://example.com

If not set, it falls back to APP_URL.

Usage

In Blade Templates

Generate canonical URLs in your views:

<head>
    <link rel="canonical" href="{{ Canonical::generate() }}">
</head>

Generate for Specific Paths

use Fkrzski\LaravelCanonical\Facades\Canonical;

// Current request URI
Canonical::generate(); // https://example.com/blog/post

// Override with a custom path
Canonical::generate('/products/item'); // https://example.com/products/item

// Current request with query parameters (preserved)
// Request: /search?q=laravel&page=2
Canonical::generate(); // https://example.com/search?q=laravel&page=2

// Override path even when on different URL
// Current: /old-url, Generate: /new-canonical-url
Canonical::generate('/new-canonical-url'); // https://example.com/new-canonical-url

URL Normalization

The package automatically:

  • Removes trailing slashes: /blog//blog
  • Preserves query parameters: /search?q=test stays intact
  • Normalizes root URL: /https://example.com

Use Cases

Prevent duplicate content penalties:

{{-- Both /blog and /blog/ point to same canonical --}}
<link rel="canonical" href="{{ Canonical::generate() }}">

Multi-domain environments:

// config/canonical.php
return [
    'domain' => env('CANONICAL_DOMAIN', config('app.url')),
];

Testing

composer test

Changelog

Please see CHANGELOG for more information on what has changed recently.

Contributing

Please see CONTRIBUTING for details.

Security Vulnerabilities

Please review our security policy on how to report security vulnerabilities.

Credits

License

The MIT License (MIT). Please see License File for more information.