Skip to main content

Django Check SEO will check the SEO aspects of your site for you, and will provide advice in case of problems.

Project description

Django Check SEO

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.


PyPI PyPI - Downloads GitHub last commit


Install

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).

  1. Install the module from PyPI:

    python3 -m pip install django-check-seo
    
  2. Add it in your INSTALLED_APPS:

        "django_check_seo",
    
  3. Add this in your urls.py (if you're using django-cms, put it before the cms.urls line or it will not work):

        path("django-check-seo/", include("django_check_seo.urls")),
    
  4. Update your Django Site object parameters with a working url (here's an example for dev environment).

  5. Add testserver (and maybe www.testserver) to your ALLOWED_HOSTS list in your settings.py (django-check-seo uses the Test Framework in order to get content, instead of doing an HTTP request).

  6. new in 1.0.0 Add the permission (use_django_check_seo) to the users/groups you want to give access to.

  7. (optional) Configure the settings (see config).

  8. that's all folks!


Misc

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))

Config

Basic settings

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.

Custom settings example:

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.

Templates

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!".


Select main content (exclude header/footer/...)

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.


Want a screenshot?

screenshot

Other (older) screenshots and videos are available on the wiki.


Unit tests

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.


Contributing

See CONTRIBUTING.md.


Interested in finding out more?

Take a look at the wiki:

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django_check_seo-1.0.1.tar.gz (594.7 kB view details)

Uploaded Source

Built Distribution

django_check_seo-1.0.1-py3-none-any.whl (583.8 kB view details)

Uploaded Python 3

File details

Details for the file django_check_seo-1.0.1.tar.gz.

File metadata

  • Download URL: django_check_seo-1.0.1.tar.gz
  • Upload date:
  • Size: 594.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.5

File hashes

Hashes for django_check_seo-1.0.1.tar.gz
Algorithm Hash digest
SHA256 639ae7cd13631730b8e28b169d398d59e2bb441f4717c4aa0f5636186474b518
MD5 78a4f9c2d1e598e4682158c0ef00de4a
BLAKE2b-256 173aa153ec8a1e3a537cde71c2393320ba8cced3e50745838f14d9fb8925aa5c

See more details on using hashes here.

File details

Details for the file django_check_seo-1.0.1-py3-none-any.whl.

File metadata

File hashes

Hashes for django_check_seo-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 ebe8a28469024eb2a4f5a6373a88b083794f7e4d88c4e14cbec21ec300671622
MD5 46f458f1a543b4b50232b1e9a1704a04
BLAKE2b-256 9f7644bf7fe09bb70f11f2d70a17d11919703c9f674c710b968a47ed9209353c

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page