Replacing some features of Yoast or SEMrush for Django & Django-CMS users.
In other words, django-check-seo will tell you if you have problems concerning a broad range of SEO aspects of your pages.
Only for django >= 2.2 & python >= 3.7, see here for a python2/django 1.8-1.11 version (tl;dr: install version <0.6).
-
Install the module from PyPI:
python3 -m pip install django-check-seo
-
Add it in your
INSTALLED_APPS
:"django_check_seo",
-
Add this in your
urls.py
(if you're using django-cms, put it before thecms.urls
line or it will not work):path("django-check-seo/", include("django_check_seo.urls")),
-
Update your Django Site object parameters with a working url (here's an example for dev environment).
-
Add
testserver
(and maybewww.testserver
) to yourALLOWED_HOSTS
list in your settings.py (django-check-seo uses the Test Framework in order to get content, instead of doing an HTTP request). -
Add the permission (
use_django_check_seo
) to the users/groups you want to give access to. -
(optional) Configure the settings (see config).
This application needs beautifulsoup4
(>=4.7.0) and djangocms_page_meta
(==0.8.5 if using django < 1.11). It may be used with or without django-cms
(a django-check-seo button will appear in the topbar if you're using django-cms).
If you're not using Django CMS (only Django), here's the link format to access your pages reports:
https://example.com/django-check-seo/?page=/example-page/
-> will check https://example.com/example-page/
https://example.com/fr/django-check-seo/?page=/example-page/
-> will check https://example.com/example-page/
(using localized url (if you add django-check-seo in i18n_patterns))
The basic config (used by default) is located in django-check-seo/conf/settings.py
and looks like this:
DJANGO_CHECK_SEO_SETTINGS = {
"content_words_number": [300, 600],
"internal_links": 1,
"external_links": 1,
"meta_title_length": [30, 60],
"meta_description_length": [50, 160],
"keywords_in_first_words": 50,
"max_link_depth": 3,
"max_url_length": 70,
}
If you need to change something, just define a dict named DJANGO_CHECK_SEO_SETTINGS
in your settings.py.
If you put this in your settings.py
file:
DJANGO_CHECK_SEO_SETTINGS = {
"internal_links": 25,
"meta_title_length": [15,30],
}
Then this will be the settings used by the application:
DJANGO_CHECK_SEO_SETTINGS = {
"content_words_number": [300, 600],
"internal_links": 25, # 1 if using default settings
"external_links": 1,
"meta_title_length": [15,30], # [30, 60] if using default settings
"meta_description_length": [50, 160],
"keywords_in_first_words": 50,
"max_link_depth": 3,
"max_url_length": 70,
}
Want to know more ? See the wiki page Settings explained.
The django_check_seo/default.html
template have an <aside>
block named seo_aside
that you can replace if you want, using the extends
& {% block seo_aside %}
instructions, like this:
{% extends "django_check_seo/default.html" %}
{% block seo_aside %}
Hi!
{% endblock seo_aside %}
This template will remplace all the
About
/Documentation
&Raw data
(content on the<aside>
block) by "Hi!".
Since django-check-seo will count things like number of words on the main content and the number of internal links, it is important to only select the main content of the page (an address in the footer is not the main content of your page).
Django-check-seo use a string (named DJANGO_CHECK_SEO_EXCLUDE_CONTENT
) of css selectors to exclude unwanted html nodes from the html content:
DJANGO_CHECK_SEO_EXCLUDE_CONTENT = "tag, .class, #id, tag > .child_class"
You can find a reference table of css selectors explained here (on mdn docs).
Example: See this issue's comment for an example.
Other (older) screenshots and videos are available on the wiki.
They are located in tests
folder.
The file launch_tests.sh
is here to manage tests launching for you. You only need python3-venv
(for python3 venv) and virtualenv
(for python2 venv) in order to make it work.
See CONTRIBUTING.md.
Take a look at the wiki: