Skip to content

A complete SEO solution for Symfony projects. This bundle handles meta tags, Open Graph, Twitter Cards, canonical URLs, sitemaps, and more—helping your app stay search-engine friendly and socially shareable out of the box.

License

Notifications You must be signed in to change notification settings

abdellahrk/SeoBundle

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

157 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

This Bundle supports

Installation

Make sure Composer is installed globally, as explained in the installation chapter of the Composer documentation.

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],
];

Profiler

For full documentation, click on the desired topic above to be taken to its documentation page

Meta Tags

Example

Define Meta Tags in Two ways:

  1. 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')
    ;
}
  1. 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);
    }

enable the schema in the config:

seo:
  schema:
    enabled: true

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

About

A complete SEO solution for Symfony projects. This bundle handles meta tags, Open Graph, Twitter Cards, canonical URLs, sitemaps, and more—helping your app stay search-engine friendly and socially shareable out of the box.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •