abdellahramadan / seo-bundle
All in One Symfony Seo Bundle
Installs: 7
Dependents: 0
Suggesters: 0
Security: 0
Stars: 17
Watchers: 2
Forks: 0
Open Issues: 1
Type:symfony-bundle
Requires
- php: ^8.0
- ext-dom: *
- doctrine/persistence: ^3.4 || ^4.0
- symfony/cache: ^5.4 || ^6.0 || ^7.0
- symfony/config: ^5.4 || ^6.0 || ^7.0
- symfony/console: ^5.4 || ^6.0 || ^7.0
- symfony/dependency-injection: ^5.4 || ^6.0 || ^7.0
- symfony/event-dispatcher: ^5.4 || ^6.0 || ^7.0
- symfony/http-kernel: ^5.4 || ^6.0 | ^7.0
- symfony/messenger: ^5.4 || ^6.0 || ^7.0
- symfony/routing: ^5.4 || ^6.0 || ^7.0
- twig/twig: ^2.0 || ^3.0
Requires (Dev)
- phpstan/phpstan: ^2.1
- phpunit/phpunit: ^9.6 || ^10 || ^11 || ^12.1
- symfony/framework-bundle: ^5.4 || ^6.0 || ^7.0
- symfony/profiler-pack: ^1.0
- symfony/test-pack: ^1.0
- symfony/yaml: ^5.4 || ^6.0 || ^7.0
README
- Meta Tags
- OpenGraph (Twitter Cards, Facebook, LinkedIn, Instagram, Discord and more)
- Structured Data (Schema)
- Sitemap Generation
- Google Tag
- Facebook Pixel
- SEO Profiling [Dev mode]
- Breadcrum Generation
Installation
Make sure Composer is installed globally, as explained in the installation chapter of the Composer documentation.
Applications that use Symfony Flex
Open a command console, enter your project directory and execute:
composer require rami/seo-bundle
This will enable the bundle by adding it to the list of registered bundles
in the config/bundles.php
file of your project:
// config/bundles.php return [ // ... Abdellahramadan\SeoBundle\SeoBundle::class => ['all' => true], ];
Meta Tags
Example
Define Meta Tags in Two ways:
- Type hint the
MetaTagsInterface
into a controller
use Abdellahramadan\SeoBundle\Metas\MetaTagsManagerInterface; public function myController(MetaTagsManagerInterface $metaTags): Response { $metaTags->setTitle('My Title') ->setDescription('This is the description of the page') ->setKeywords(['keywords', 'seo', 'meta']) ->setCanonical('https://canonical.com') ; }
- Directly in twig
{{ meta_tags(title: 'My Title', description: 'This is the description of the page' ...)}
Make sure you add this {{ meta_tags }}
to the head your Twig file (preferably the base template)
<head>
{{ meta_tags() }}
</head>
This will render in the head the following
<head> <title>My Title</title> <meta name="description" content="This is the description of the page'"> <meta name="keywords" content="keywords, seo, meta"> <link rel="canonical" href="https://canonical.com"> </head>
Open Graph
Example
Add to template file
Add {{ open_graph() }}
to the base template or any page where the meta information will be injected
Add meta inforation
In your controller, type-hint OpenGraphInterface
Example
use Abdellahramadan\OpenGraphBundle\OpenGraph\OpenGraphManagerInterface; class HomeController extends AbstractController { public function index(OpenGraphManagerInterface $openGraph): Response { $openGraph ->setTitle('My website') ->setDescription('Some descriptions ...') ->setSiteName('My Blog') ; ... return $this-render('index.html.twig'); } }
This will render
<meta property="og:title" content="My website"> <meta property="og:description" content="Some descriptions ..."> <meta property="og:site_name" content="My Blog">
You can also leave out setting the properties in the controller and set directly in Twi
{{ meta_tags(title: 'My website', siteName: 'My Blog') }}
full document at Open Graph Docs
Schema Org [Rich Result]
Usage
use Rami\SeoBundle\Schema\SchemaInterface; use Symfony\Component\HttpFoundation\Response; ... #[Route('/', name: 'app_home')] public function index(SchemaInterface $schema): Response { $person = $schema ->person() ->name('Abdel Ramadan') ->email('abdellah@hey.cm') ->children([ $schema->person()->name('Rami')->email('ramadanabdel24@gmail.com')->givenName('Ramadan'), $schema->person()->name('Rami 3')->email('test@gmail.com') ]); $schema->render($person); }
This is an example using the Person
object which will render
<script type="application/ld+json"> { "@context": "https://schema.org", "@type": "Person", "name": "Abdel Ramadan", "email": "abdellah@hey.cm", "children": [ { "@type": "Person", "name": "Rami", "email": "ramadanabdel24@gmail.com", "givenName": "Ramadan" }, { "@type": "Person", "name": "Rami 3", "email": "test@gmail.com" } ] } </script>
Full Schema docs at Schema Org Docs
Sitemap Generation
This package automates the generation of sitemaps.
Usage
#[Sitemap()] #[Route('/', name: 'app_home')] public function index() { ... } #[Sitemap()] #[Route('/blog', name: 'blog')] public function blogIndex() { ... }
This will add the the url entries into sitemaps/default.xml
<?xml version="1.0" encoding="UTF-8"?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <url> <loc>https://mysite.com/blog</loc> </url> <url> <loc>https://mysite.com/</loc> </url> </urlset>
Full Sitemap docs Sitemap Docs
Full documentation at Documentation