Realpython.com - SEO Checker

Overview of the SEO Check
Meta information
100% 
Page quality
77% 
Page structure
75% 
Link structure
27% 
Server
88% 
External factors
100% 
SEO Score
Response time
0.65 s
File size
74.40 kB
Words
573
Media files
22
Number of links
178 internal / 8 external

Task list of SEO Improvements

Meta specifications

Title
(Critically important)
Python Tutorials – Real Python
The length of the page title is perfect. (277 pixels out of 580 max pixel length)
There are no duplicate words in the title
Meta description
(Critically important)
Learn Python online: Python tutorials for developers of all skill levels, Python books and courses, Python news, code examples, articles, and more.
The length of the meta description is perfect. (900 pixels out of 1000 max pixel length)
Crawlability
(Critically important)
There are no problems in accessing the website.
Canonical URL
(Important)
https://realpython.com/
There is a valid canonical link specified.
Language
(Somewhat important)
Language detected in text: en
Language defined in HTML: en
Server location: Canada
The following language is defined by HTML: en
Alternate/Hreflang Links
(Somewhat important)
There are no alternate links specified on this page.
Other meta tags
(Somewhat important)
There is no rel next meta tag on this page.
There is no rel prev meta tag on this page.
Domain
(Somewhat important)
The domain is no subdomain.
The domain length is good.
The domain does not contain non-latin characters.
Page URL
(Somewhat important)
No parameters were found in the URL.
No session ID was found in the URL.
The URL does not have too many subdirectories.
Charset encoding
(Somewhat important)
The charset encoding (UTF-8) is set correctly.
Doctype
(Nice to have)
The doctype HTML 5 is set correctly.
The doctype is placed at first in the HTML code.
Favicon
(Nice to have)
The favicon is linked correctly.

Meta tags

NameValue
authorReal Python
descriptionLearn Python online: Python tutorials for developers of all skill levels, Python books and courses, Python news, code examples, articles, and more.
keywordsEmpty
viewportwidth=device-width, initial-scale=1, shrink-to-fit=no, viewport-fit=cover
langen
twitter:cardsummary
twitter:creator@realpython
twitter:site@realpython
twitter:imagehttps://realpython.com/static/social-default-image.5e1aa4786b3a.png
og:imagehttps://realpython.com/static/social-default-image.5e1aa4786b3a.png
og:titlePython Tutorials – Real Python
og:typewebsite
og:urlhttps://realpython.com/
og:descriptionLearn Python online: Python tutorials for developers of all skill levels, Python books and courses, Python news, code examples, articles, and more.
charsetutf-8

Automatically check realpython.com including all subpages at once!

Try for free
Guaranteed free of charge during trial period.

Page quality

Content
(Critically important)
Only 2 paragraph/s was/were found on this page.
The average number of words per sentence of 7 words is low.
This page contains 573 words. That's ok.
20.4% of the text are stop words.
Keywords used in the page title are also used in the page content. That's good!
Words from the H1 heading are used in the page content.
The page contains a listing, which indicates a good text layout.
No placeholders texts or images were found.
There are no duplicates on the site.
Frames
(Critically important)
This page does not use a frameset.
Mobile optimization
(Somewhat important)
No Apple touch icon is specified.
A viewport "width=device-width, initial-scale=1, shrink-to-fit=no, viewport-fit=cover" is provided.
Bold and strong tags
(Somewhat important)
The usage of strong and bold tags is perfect. We recommend the use of up to 11 tags for this page.
Image SEO
(Somewhat important)
Alt text (alternative text) is correctly used on all found images.
Social Networks
(Nice to have)
This page is optimized perfectly for social networks.
Additional markup
(Nice to have)
No additional page markup was found.
HTTPS
(Somewhat important)
This website uses HTTPS to protect privacy and integrity of the exchanged data.
All included files are also transferred via HTTPS.

Media list

URLAlt attributeTitle
/static/real-python-logo.893c30edea53.svgReal Python
...in-Python_Watermarked-2.333650ffaf49.jpgControl Flow Structures in Python
/static/pytrick-dict-merge.4201a0125a5e.pngPython Tricks Dictionary Merge
...--LEGB-Rule_Watermarked.e5f68e7a3642.jpgPython Scope & the LEGB Rule: Resolving Names in Your Code
...mo-Notebook_Watermarked.91bd98028a40.jpgMarimo: A Reactive, Reproducible Notebook
...s-in-Python_Watermarked.0c20c531becf.jpgNested Loops in Python
...h-LangChain_Watermarked.b9d023202ad2.jpgBuild an LLM RAG Chatbot With LangChain
...ggregations_Watermarked.760a0c543c71.jpgHow to Group Data Using Polars .group_by()
...First-PyCon_Watermarked.fa273e6fe8b9.jpgHow to Get the Most Out of PyCon
...a-in-Polars_Watermarked.2f1923ed31ad.jpgHow to Deal With Missing Data in Polars
...n-News_Blue_Watermarked.f56ede474cc7.jpgPython News
...edia/Loguru_Watermarked.a6fd0b29bc74.jpgHow to Use Loguru for Simpler Python Logging
.../Subprocess_Watermarked.6d0e6a5d7d77.jpgThe subprocess Module: Wrapping Program With Python
...s-in-Python_Watermarked.29cc4fe84b78.jpgSets in Python
...nd-Selenium_Watermarked.08e8e08b976d.jpgModern Web Automation with Python and Selenium
...y-in-Python_Watermarked.434d0dbc3127.jpgPython Thread Safety: Using a Lock and Other Techniques
...owcase-uv_Watermarked-2.4bbd6b119bc4.jpgManaging Python Projects With uv: An All-in-One Solution
...Python-IDLE_Watermarked.fc401edede69.jpgGetting Started With Python IDLE
...-and-Python_Watermarked.4353d1d57493.jpgPython and MySQL Database: A Practical Introduction
...hon-Objects_Watermarked.e6471b4627f8.jpgShallow vs Deep Copying of Python Objects
...eak-Keyword_Watermarked.3d61a543d1f4.jpgHow to Exit Loops Early With the Python Break Keyword
...eal-python-logo-primary.973743b6d39d.svgReal Python - Online Python Training (logo)

Page structure

H1 heading
(Critically important)
Real Python Tutorials
The H1 heading is perfect.
Headings
(Important)
The structure of headings is missing one or more levels. Do not skip heading levels.
There are 27 headings on the page. The amount of headings should be in a more proper relation to the amount of text.

Heading structure

Heading levelContent
H1 Real Python Tutorials
H2 Control Flow Structures in Python
H2 Explore Real Python
H2 New Releases
H2 The LEGB Rule & Understanding Python Scope
H2 Marimo: A Reactive, Reproducible Notebook
H2 Nested Loops in Python
H2 First Steps With LangChain
H2 How to Group Data Using Polars .group_by()
H2 How to Get the Most Out of PyCon US
H2 Working With Missing Data in Polars
H2 Python's T-Strings Coming Soon and Other Python News for May 2025
H2 How to Use Loguru for Simpler Python Logging
H2 Using the Python subprocess Module
H2 Sets in Python
H2 Modern Web Automation With Python and Selenium
H2 Thread Safety in Python: Locks and Other Techniques
H2 Managing Python Projects With uv: An All-in-One Solution
H2 Getting Started With Python IDLE
H2 MySQL Databases and Python
H2 How to Copy Objects in Python: Shallow vs Deep Copy Explained
H2 How to Exit Loops Early With the Python Break Keyword
H5 Learn Python
H5 Courses & Paths
H5 Community
H5 Membership
H5 Company
Some internal links have dynamic parameters. All internal URLs, which are not marked as nofollow, should not contain dynamic parameters.
Some anchor texts are used more than once.
The number of internal links is ok.
None of the anchor texts is too long.
There are 8 external links on this page.
LinkAttributesAnchor text
https://realpython.com/IMG-ALT Real Python
/start-here/Start Here
/search?kind=article&kind=cour...Python Tutorials → In-depth articles and video courses
/learning-paths/Learning Paths → Guided study plans for accelerated learning
https://realpython.com/quizzes/Quizzes & Exercises → Check your learning progress
/tutorials/all/Browse Topics → Focus on a specific area or skill level
https://realpython.com/community/Community Chat → Learn with other Pythonistas
/office-hours/Office Hours → Live Q&A calls with Python experts
/podcasts/rpp/Podcast → Hear what’s new in the world of Python
/products/books/Books → Round out your knowledge and learn offline
https://realpython.com/ref/Reference → Concise definitions for common Python terms
https://realpython.com/mentor/Code Mentor →Beta Personalized code assistance & learning tools
/account/join/Unlock All Content →
/learner-stories/Learner Stories
/newsletter/Python Newsletter
https://www.pythonjobshq.com/New window External Subdomain Python Job Board
https://realpython.com/team/Meet the Team
/write-for-us/Become a Tutorial Writer
/become-an-instructor/Become a Video Instructor
https://realpython.com/searchSearch
A-TITLE Search
https://realpython.com/searchText duplicate A-TITLE Search
/account/join/Join
/account/login/?next=/Sign‑In
/python-control-flow/NEW
IMG-ALT Control Flow Structures in Python
/python-control-flow/Control Flow Structures in Python
/tutorials/intermediate/intermediate
/tutorials/python/python
/tutorials/all/Browse Topics
/learning-paths/Guided Learning Paths
/search?level=basicsBasics
/search?level=intermediateIntermediate
/search?level=advancedAdvanced
/tutorials/api/api
/tutorials/best-practices/best-practices
/tutorials/career/career
/tutorials/community/community
/tutorials/databases/databases
/tutorials/data-science/data-science
/tutorials/data-structures/data-structures
/tutorials/data-viz/data-viz
/tutorials/devops/devops
/tutorials/django/django
/tutorials/docker/docker
/tutorials/editors/editors
/tutorials/flask/flask
/tutorials/front-end/front-end
/tutorials/gamedev/gamedev
/tutorials/gui/gui
/tutorials/machine-learning/machine-learning
/tutorials/numpy/numpy
/tutorials/projects/projects
/tutorials/python/Text duplicate python
/tutorials/testing/testing
/tutorials/tools/tools
/tutorials/web-dev/web-dev
/tutorials/web-scraping/web-scraping
/learning-paths/Learning Paths Guided study plans for accelerated learning
/search?kind=article&kind=cour...Python Tutorials In-depth articles and step-by-step video courses
https://realpython.com/quizzes/Quizzes & Exercises Evaluate your Python knowledge with quick tests
/tutorials/all/Browse Topics Focus on a specific area or skill level
https://realpython.com/community/Community Chat Learn with other Pythonistas
/office-hours/Office Hours Live Q&A calls with experts from Real Python
/podcasts/rpp/Podcast Hear what’s new in the world of Python
/products/books/Books Round out your knowledge and learn offline
https://realpython.com/ref/Reference Concise definitions for common Python terms
https://realpython.com/mentor/Code MentorBeta Personalized code assistance & intelligent learning tools
https://realpython.com/searchText duplicate A-TITLE Search
/search?order=newestNew Releases
/search?order=newestView All »
/courses/legb-rule-python-scope/IMG-ALT Python Scope & the LEGB Rule: Resolving Names in Your Code
/courses/legb-rule-python-scope/The LEGB Rule & Understanding Python Scope
/tutorials/intermediate/Text duplicate intermediate
/tutorials/python/Text duplicate python
/marimo-notebook/IMG-ALT Marimo: A Reactive, Reproducible Notebook
/marimo-notebook/Text duplicate Marimo: A Reactive, Reproducible Notebook
/tutorials/intermediate/Text duplicate intermediate
/tutorials/data-science/Text duplicate data-science
/tutorials/editors/Text duplicate editors
/tutorials/python/Text duplicate python
/tutorials/tools/Text duplicate tools
/nested-loops-python/IMG-ALT Nested Loops in Python
/nested-loops-python/Text duplicate Nested Loops in Python
/tutorials/basics/basics
/tutorials/python/Text duplicate python
/courses/first-steps-langchain/IMG-ALT Build an LLM RAG Chatbot With LangChain
/courses/first-steps-langchain/First Steps With LangChain
/tutorials/intermediate/Text duplicate intermediate
/tutorials/databases/Text duplicate databases
/tutorials/data-science/Text duplicate data-science
/polars-groupby/IMG-ALT How to Group Data Using Polars .group_by()
/polars-groupby/Text duplicate How to Group Data Using Polars .group_by()
/tutorials/intermediate/Text duplicate intermediate
/tutorials/data-science/Text duplicate data-science
/tutorials/python/Text duplicate python
/pycon-guide/IMG-ALT How to Get the Most Out of PyCon
/pycon-guide/How to Get the Most Out of PyCon US
/tutorials/career/Text duplicate career
/tutorials/community/Text duplicate community
/account/join/Nofollow Remove ads
/courses/missing-data-polars/IMG-ALT How to Deal With Missing Data in Polars
/courses/missing-data-polars/Working With Missing Data in Polars
/tutorials/intermediate/Text duplicate intermediate
/tutorials/data-science/Text duplicate data-science
/tutorials/python/Text duplicate python
/python-news-may-2025/IMG-ALT Python News
/python-news-may-2025/Python's T-Strings Coming Soon and Other Python News for May 2025
/tutorials/community/Text duplicate community
/python-loguru/IMG-ALT How to Use Loguru for Simpler Python Logging
/python-loguru/Text duplicate How to Use Loguru for Simpler Python Logging
/tutorials/intermediate/Text duplicate intermediate
/tutorials/tools/Text duplicate tools
/courses/python-subprocess-mod...IMG-ALT The subprocess Module: Wrapping Program With Python
/courses/python-subprocess-mod...Using the Python subprocess Module
/tutorials/intermediate/Text duplicate intermediate
/python-sets/IMG-ALT Sets in Python
/python-sets/Text duplicate Sets in Python
/tutorials/basics/Text duplicate basics
/tutorials/python/Text duplicate python
/modern-web-automation-with-py...IMG-ALT Modern Web Automation with Python and Selenium
/modern-web-automation-with-py...Modern Web Automation With Python and Selenium
/tutorials/intermediate/Text duplicate intermediate
/tutorials/projects/Text duplicate projects
/tutorials/testing/Text duplicate testing
/tutorials/web-scraping/Text duplicate web-scraping
/courses/thread-safety-locks-o...IMG-ALT Python Thread Safety: Using a Lock and Other Techniques
/courses/thread-safety-locks-o...Thread Safety in Python: Locks and Other Techniques
/tutorials/intermediate/Text duplicate intermediate
/tutorials/python/Text duplicate python
https://realpython.com/python-uv/IMG-ALT Managing Python Projects With uv: An All-in-One Solution
https://realpython.com/python-uv/Text duplicate Managing Python Projects With uv: An All-in-One Solution
/tutorials/intermediate/Text duplicate intermediate
/tutorials/tools/Text duplicate tools
/python-idle/IMG-ALT Getting Started With Python IDLE
/python-idle/Text duplicate Getting Started With Python IDLE
/tutorials/basics/Text duplicate basics
/tutorials/editors/Text duplicate editors
/courses/mysql-databases-python/IMG-ALT Python and MySQL Database: A Practical Introduction
/courses/mysql-databases-python/MySQL Databases and Python
/tutorials/intermediate/Text duplicate intermediate
/tutorials/databases/Text duplicate databases
/tutorials/data-science/Text duplicate data-science
/python-copy/IMG-ALT Shallow vs Deep Copying of Python Objects
/python-copy/How to Copy Objects in Python: Shallow vs Deep Copy Explained
/tutorials/advanced/advanced
/tutorials/python/Text duplicate python
/python-break/IMG-ALT How to Exit Loops Early With the Python Break Keyword
/python-break/Text duplicate How to Exit Loops Early With the Python Break Keyword
/tutorials/basics/Text duplicate basics
/tutorials/python/Text duplicate python
https://realpython.com/searchText duplicate A-TITLE Search
/start-here/Text duplicate Start Here
https://realpython.com/searchLearning Resources
https://realpython.com/mentor/Code Mentor
https://realpython.com/ref/Python Reference
https://support.realpython.com/External Subdomain Support Center
/learning-paths/Learning Paths
https://realpython.com/quizzes/Quizzes & Exercises
/tutorials/all/Text duplicate Browse Topics
https://realpython.com/workshops/Workshops
https://realpython.com/books/Books
/podcasts/rpp/Podcast
/newsletter/Newsletter
https://realpython.com/community/Community Chat
/office-hours/Office Hours
/learner-stories/Text duplicate Learner Stories
/account/join/Plans & Pricing
/account/join-team/Team Plans
/account/join-team/inquiry/For Business
/account/join-team/education-i...For Schools
/learner-stories/Reviews
https://realpython.com/about/About Us
https://realpython.com/team/Team
/sponsorships/Sponsorships
https://realpython.workable.com/External Subdomain Careers
https://realpython.com/media-kit/Press Kit
https://realpython.com/merchMerch
https://www.youtube.com/realpy...External Subdomain A-TITLE YouTube
https://x.com/realpythonExternal A-TITLE X/Twitter
https://www.linkedin.com/compa...External Subdomain A-TITLE LinkedIn
https://www.facebook.com/Learn...External Subdomain A-TITLE Facebook
https://github.com/realpython/External A-TITLE GitHub
/privacy-policy/Privacy Policy
https://realpython.com/terms/Terms of Use
https://realpython.com/security/Security
https://realpython.com/contact/Contact
https://realpython.com/IMG-ALT Real Python - Online Python Training (logo)

Server configuration

HTTP redirects
(Critically important)
This page redirects to "https://realpython.com/"
HTTP header
(Important)
No X-Powered HTTP header is sent.
The web server transmits the web page (HTML) in compressed form.
Performance
(Somewhat important)
The page response time of 0.65 seconds is longer than the recommended limit of 0.4 seconds. A high response time unnecessarily slows down search engine crawling and results in bad user experience as well.
The file size of the HTML document is fine (74 kB).

HTTP Response Header

NameValue
dateSat, 31 May 2025 00:15:57 GMT
content-typetext/html; charset=utf-8
content-length10929
report-to{"group":"heroku-nel","max_age":3600,"endpoints":[{"url":"https://nel.heroku.com/reports?ts=1748650557&sid=67ff5de4-ad2b-4112-9289-cf96be89efed&s=uAU8X95B4RljGkqLtGPulikJGypxys0j6TWkpjNIxPI%3D"}]}
reporting-endpointsheroku-nel=https://nel.heroku.com/reports?ts=1748650557&sid=67ff5de4-ad2b-4112-9289-cf96be89efed&s=uAU8X95B4RljGkqLtGPulikJGypxys0j6TWkpjNIxPI%3D
nel{"report_to":"heroku-nel","max_age":3600,"success_fraction":0.005,"failure_fraction":0.05,"response_headers":["Via"]}
x-frame-optionsSAMEORIGIN
varyCookie, Accept-Encoding
strict-transport-securitymax-age=31536000; includeSubDomains; preload
x-content-type-optionsnosniff
referrer-policystrict-origin-when-cross-origin,origin
cross-origin-opener-policysame-origin
content-encodinggzip
set-cookie129 Characters
via1.1 vegur
cf-cache-statusDYNAMIC
servercloudflare
cf-ray9482479df88fbb33-CDG
alt-svch3=":443"; ma=86400
statuscode200
http_versionHTTP/2

External factors

This website has excellent links from other websites.
This page has backlinks from 1,677 referring domains.
This page has 14,909 backlinks.
This page has backlinks from 1,314 different ip addresses.

Links from Wikipedia

No links from Wikipedia were found.

Robots.txt

User-agent: *
Disallow: 
Disallow: /search
Disallow: *?q=*
Disallow: */api/v*
Disallow: /account/*/login/
Disallow: /account/*next=
Disallow: /feedback/*
Disallow: /practice/*
Disallow: /preview/*
Disallow: /quizzes/*/*/

Sitemap: https://realpython.com/sitemap.xml

Search preview

realpython.com
Python Tutorials – Real Python
Learn Python online: Python tutorials for developers of all skill levels, Python books and courses, Python news, code examples, articles, and more.

Most important keywords

Following keywords were found. You can check the keyword optimization of this page for each keyword.

KeywordResultRecheck
Python85%Check
Real81%Check
Real Python79%Check
Python Tutorials77%Check
Python Tutorials Real75%Check
Tutorials73%Check
Python News67%Check
Learn Python65%Check
Python Tricks60%Check
new58%Check

Automatically check realpython.com including all subpages at once!

Try for free
Guaranteed free of charge during trial period.

Cookie Policy

We use cookies to make our site work and also for analytics and advertising purposes. You can enable or disable optional cookies as desired. See the following links for more information.

We need these so the site can function properly

So we can better understand how visitors use our website

So we can serve you tailored ads and promotions