Skip to content
No description, website, or topics provided.
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.


Realy good SEO app for django.

Allows you:

  • Configure robots.txt
  • Setup 301 redirects with RegExp support
  • Setup meta data by absoulute puth-url
  • Create extra settings
  • Switch domain language
  • Switch domain template

Last test on Django 1.9.4, but I thitk in will work prety well on all major versions.


  • Add to INSTALLED_APPS 'apps.seo',
  • Add to TEMPLATE_CONTEXT_PROCESSORS 'apps.seo.context_processors.seo',
'apps.seo.middleware.Host', # Don't use SITE_ID with it
'apps.seo.middleware.Redirect', # For redirects
'apps.seo.middleware.SwitchLocale', # For multilanguages sites
'apps.seo.middleware.SwitchTemplate', # For site with difference templates
  • Add to url(r'^', include('apps.seo.urls')),

  • Add this code in your template between <head> and </head>

<title>{% firstof seo.title title %} &rarr; {{ }}</title>
<meta name='keywords' content='{% firstof seo.keywords keywords %}'>
<meta name='description' content='{% firstof seo.description description %}'>
{{ seo.head_code|safe }}
  • Add {{ seo.footer_code|safe }} to footer
  • Add {{ seo.intro|safe }} before main content
  • Add {{ seo.outro|safe }} after main content
  • Add {{ site.settings.code_head|safe }} to head global settings for site
  • Add {{ site.settings.code_footer|safe }} to footer global settings for site
  • Migratepython migrate seo


  • Sitemap
  • Documentation
  • PyPI
  • Exptra meta data

Thing about

  • Language as model
  • Site languages for multi languages sites
  • Language changer type
  • Add logic to redirects
  • Add logic to template changer

May be added to SiteSettings model as part of django-lp

title = models.CharField(verbose_name=_('Title'), max_length=128)
email = models.EmailField(max_length=128, verbose_name=_('E-Mail'))
send_email = models.BooleanField(verbose_name=_('Send E-Mail'), default=True)
phone = models.CharField(max_length=32, verbose_name=_('Phone'))
send_sms = models.BooleanField(verbose_name=_('Send SMS'), default=True)
sms_key = models.CharField(verbose_name=_('SMS.RU Key'), max_length=64, blank=True, null=True)
sms_name = models.CharField(verbose_name=_('SMS Name'), help_text=_('From 2 to 11 Latin characters.'), max_length=11)
You can’t perform that action at this time.