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
Requires
- php: ^8.3
- illuminate/support: ^11.0 | ^12.0
Requires (Dev)
- driftingly/rector-laravel: ^2.0.7
- larastan/larastan: ^3.0
- laravel/pint: ^1.17
- mockery/mockery: ^1.6
- orchestra/testbench: ^9.0 | ^10.5
- pestphp/pest: ^4.0
- pestphp/pest-plugin-laravel: ^4.0
- pestphp/pest-plugin-profanity: ^4.0
- pestphp/pest-plugin-type-coverage: ^4.0
- rector/rector: ^2.1.2
- symfony/var-dumper: ^7.0
This package is auto-updated.
Last update: 2025-10-20 19:36:38 UTC
README
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.