- On-page SEO
- Comparison
Blogging Platforms and SEO: What Each One Lets You Control
Editorial responsibility: SearchCub
Google's technical requirements for appearing in Search don't name a platform, so choose a blogging platform for the SEO controls it gives you: of the nine compared here, Wix, Ghost and self-hosted WordPress with an SEO plugin document nearly all, Squarespace most, Blogger fewer and Substack the fewest.
Below is what each platform's own help pages say about those controls, then a list of which platform suits which kind of blogger. Every cell comes from documentation read on 8 October 2026. No platform was set up or tested for this comparison.
What Google says about the platform you choose
Google's technical requirements list three things a page needs: Googlebot can reach it, the page works, and it has indexable content. In Google's words, "As long as your page meets the minimum technical requirements, it's eligible to be indexed by Google Search" (Google: technical requirements). The list names no platform.
The SEO Starter Guide mentions a content management system (CMS), the software you write and publish in, only as something that can take care of technical steps for you. It says that with a CMS you may have nothing technical to do to your titles, so you can simply concentrate on writing good ones (Google: SEO Starter Guide).
That leaves a practical question: which of the settings Google reads can you change yourself? Google's verification help gives site-builder users the same starting point: look up Search Console verification in your site host's own documentation (Search Console Help: verify site ownership). This comparison reads that documentation for six platforms.
The nine controls, and what each one does
Custom domain, and a /blog folder. What it does for your blog: Puts the blog on your own address, and optionally in a folder of a site you already run. More detail: Subdomain vs subfolder.
Title tag and meta description per post. What it does for your blog: The title element is one of the sources Google uses for a result's title link (Google: SEO Starter Guide), and Google "sometimes uses the meta description HTML element" for the snippet (Google: snippets). More detail: SEO titles and meta descriptions.
URL slug. What it does for your blog: The readable end of a post's address; Google's advice is to "Try to include words in the URL that may be useful for users". More detail: Google: SEO Starter Guide.
Canonical URL. What it does for your blog: Names the main address when the same post appears at more than one, such as a post you also publish on another site; otherwise Google tries to pick one itself. More detail: Google: SEO Starter Guide.
XML sitemap. What it does for your blog: A file listing the pages you want search engines to find. More detail: XML sitemaps.
Noindex per page. What it does for your blog: Keeps one page out of results: Google "will drop that page entirely from Google Search results" once it reads the rule (Google: noindex). More detail: Why Google hasn't indexed your page.
Structured data. What it does for your blog: Code that describes a page's content to search engines. More detail: Structured data for blogs.
Redirects. What it does for your blog: Sends readers and Google from an old address to a new one; Google's guide sums up a permanent redirect as "Show the new redirect target in search results". More detail: Google: redirects.
Search Console verification. What it does for your blog: Proves you own the site so you can see Google's data about it. More detail: What is Google Search Console?.
How the six platforms compare
Two of the nine controls take two rows each. "Not documented" means the platform's help pages searched for this comparison don't describe the control. Ghost's hosting details are for Ghost(Pro), Ghost's hosted service (Ghost: custom domains, Ghost: subdirectory).
Control | WordPress (self-hosted) |
|---|---|
Custom domain | Yes, on your own hosting |
Blog in a /blog folder of a site built with something else | Yes, if you host that site: install WordPress in a folder |
Title tag per post | Set by your theme or a plugin |
Meta description per post | Plugin |
URL slug | Yes |
Canonical URL | Added for you; custom value via plugin |
XML sitemap | Yes |
Noindex per page | Whole site in core; per post via plugin |
Structured data | Plugin |
Redirects | Changed slugs only in core |
Search Console verification | Not in WordPress docs; Google names the Site Kit plugin |
Control | Ghost |
|---|---|
Custom domain | Yes; subdomain recommended |
Blog in a /blog folder of a site built with something else | Business plan add-on, behind a reverse proxy |
Title tag per post | Yes |
Meta description per post | Yes |
URL slug | Yes |
Canonical URL | Added for you; custom value per post |
XML sitemap | Yes |
Noindex per page | Not documented |
Structured data | Added to every post and page |
Redirects | Yes, from a file you upload |
Search Console verification | HTML tag |
Control | Squarespace |
|---|---|
Custom domain | Yes |
Blog in a /blog folder of a site built with something else | Not documented |
Title tag per post | Yes (SEO title) |
Meta description per post | Yes |
URL slug | Yes |
Canonical URL | Added for you; no setting documented |
XML sitemap | Yes |
Noindex per page | Per page, but not per post |
Structured data | Added for you; can't be edited |
Redirects | Yes (URL mappings) |
Search Console verification | Google account connection or DNS record |
Control | Wix |
|---|---|
Custom domain | Yes |
Blog in a /blog folder of a site built with something else | Not documented (a subdomain is) |
Title tag per post | Yes |
Meta description per post | Yes |
URL slug | Yes |
Canonical URL | Added for you; custom value per post |
XML sitemap | Yes |
Noindex per page | Per post |
Structured data | Added for you, plus your own markup |
Redirects | Yes, with a custom domain |
Search Console verification | Google connection (Premium plan) or HTML tag |
Control | Blogger |
|---|---|
Custom domain | Yes, on www or another subdomain |
Blog in a /blog folder of a site built with something else | Not documented |
Title tag per post | Not documented |
Meta description per post | One description for the whole blog |
URL slug | Yes |
Canonical URL | Not documented |
XML sitemap | Not documented |
Noindex per page | Per post |
Structured data | Not documented |
Redirects | Yes (custom redirects) |
Search Console verification | Automatic for new blogs; older blogs use the HTML tag |
Control | Substack |
|---|---|
Custom domain | Yes, for a one-time fee; www subdomain recommended |
Blog in a /blog folder of a site built with something else | Not documented |
Title tag per post | Not documented |
Meta description per post | Not documented |
URL slug | Yes |
Canonical URL | Not documented |
XML sitemap | Becomes available as the publication grows |
Noindex per page | Whole publication only (private mode) |
Structured data | Not documented |
Redirects | Domain-level only |
Search Console verification | Becomes available as the publication grows |
A blog built inside a Squarespace or Wix site already sits in a folder of that site, such as /blog, so the second row matters only when the rest of your site runs on something else.
Platform by platform
WordPress (self-hosted)
Core WordPress covers the address and URL basics. Its install guide covers putting WordPress into a subdirectory such as https://example.com/blog/, each post's slug is editable in the post settings sidebar, and core makes an XML sitemap (WordPress: installing, WordPress: post settings, WordPress: sitemaps). Core also adds a canonical tag to single posts and redirects a post's old slug to its current address (rel_canonical(), wp_old_slug_redirect()).
Most per-post controls come from plugins. WordPress's own SEO page says of meta tags: "By default, they are not included in WordPress", and points to plugins (WordPress: SEO). Core's noindex setting in the dashboard is Discourage search engines from indexing this site, which covers the whole site and also switches off the sitemap (WordPress: Reading settings, WordPress: sitemaps). Yoast SEO, as one example plugin, documents a Canonical URL field and a noindex setting in its Advanced tab, and describes posts with Article structured data by default (Yoast: canonical URLs, Yoast: noindex, Yoast: schema settings).
Ghost
Ghost builds in most of the list. Each post has its own meta title, meta description and editable Post URL, and Ghost adds canonical tags across the site, keeps an XML sitemap and includes structured data in every post and page (Ghost: SEO, Ghost: post settings). A Canonical URL field overrides the automatic canonical for one post, for example a guest post first published elsewhere; setting it also removes that post from your sitemap.
Redirects live in a redirects.yaml file that you download, edit and upload again in Ghost Admin (Ghost: redirects). Search Console verification uses a URL-prefix property and Google's HTML tag, pasted into Settings > Code Injection > Site Header (Ghost: Search Console). Ghost's help doesn't document a per-post noindex setting, and a custom robots.txt goes in your theme, which on Ghost(Pro) needs the Creator plan or higher (Ghost: robots.txt).
Squarespace
Squarespace sets most things up for you and leaves fewer settings open. Each blog post has an SEO title, an SEO description and an editable URL slug (Squarespace: title formats, Squarespace: SEO descriptions, Squarespace: URL slugs). The sitemap and structured data are generated for you, using a fixed set of schemas "which you can't edit or remove" (Squarespace: how it optimizes your site). Canonical tags are added for you too, for example marking a tag or category page's static address, such as /blog/category/dogs, as the one search engines should index (Squarespace: tags and categories in search), with no per-post setting described.
The noindex control is the one to check before you choose. The Hide page from search results toggle works per page, but Squarespace says "You can't exclude individual collection items or portfolio sub-pages from crawler scans without excluding the entire collection page" (Squarespace: hiding from search). Blog posts are collection items, so hiding one post means hiding the whole blog. Redirects use URL mappings, and Search Console connects through the Search keywords panel or a DNS record; Squarespace doesn't support verifying by uploading a file (Squarespace: URL mappings, Squarespace: Search Console).
Wix
Wix puts every per-post control in this comparison in one place. A post's SEO settings hold its title tag, meta description, URL slug and a Let search engines index this page toggle, and the Advanced tab adds structured data markup, a robots meta tag and an editable canonical tag (Wix: blog SEO settings). Each Wix site gets a sitemap that updates itself, and connecting through the SEO Setup Checklist submits it to Google for you (Wix: sitemaps).
Two site-wide controls depend on your plan and domain. For Search Console through the checklist, "you must have a Premium plan and a domain connected to your site"; the alternative is pasting Google's meta tag into the Site Verification Tool (Wix: connecting to Google, Wix: site verification tool). And "301 redirects only work with custom domains" (Wix: 301 redirects). A Wix blog lives inside its own Wix site, at an address such as /blog; for a site built with something else, Wix documents connecting the Wix site as a subdomain (Wix: blog URLs, Wix: subdomains).
Blogger
Blogger documents indexing and redirect controls, but not a separate title tag or a per-post description. Each post can get a Custom Permalink, and per-post noindex is a No index switch under Custom robots tags in the post settings (Blogger: search engines). Settings also offer a custom robots.txt, custom redirects and a search description, which is one summary "of what your blog is all about" (Blogger: settings). Blogger's help pages don't describe canonical control, a sitemap or structured data either.
A custom domain must use www or another subdomain: "Blogs may not be hosted at naked domains", though one redirect from the bare domain is allowed (Blogger: settings). For a new blog, Search Console verification should happen by itself: "New blogs that you create in Blogger should be added and verified automatically in your Search Console account". If the blog doesn't appear there, Google says to add the property; older blogs aren't verified automatically and need Google's HTML tag method, and you must sign in to Search Console using the account that manages the blog (Search Console Help: verify site ownership).
Substack
Substack documents the fewest SEO controls of the six. You can edit a post's address under SEO Options, and use a custom domain for a one-time fee, with a subdomain such as www recommended (Substack: post URL, Substack: custom domain). Its help doesn't document a per-post title tag, meta description, canonical URL or structured data.
Two controls depend on how your publication is doing: "Some SEO features, such as sitemaps and Google Search Console verification, become available as your publication grows", and Substack says regular publishing, a growing subscriber list and turning on paid subscriptions all help to unlock them (Substack: SEO). The only documented way to keep posts out of search is making the whole publication private, and its Welcome page stays indexed even then (Substack: private publications). Redirects are documented only at the domain level: from your root domain to your custom domain, and one subdomain change "without breaking links" (Substack: root domain, Substack: changing your subdomain).
Which platform suits which blogger
If you already run a site built with something else and want the blog at
yourdomain.com/blog. Consider: WordPress (self-hosted) if you host that site, or Ghost(Pro) with its Business plan add-on. Why, on these nine controls: They are the only two whose documentation covers a blog in a folder of another site.If you want every per-post control without installing anything. Consider: Wix. Why, on these nine controls: Title tag, meta description, slug, canonical tag and noindex are all documented per post; connecting Search Console through its checklist needs a Premium plan and a connected domain, and 301 redirects need a custom domain.
If you write a publication-style blog and can edit a redirects file. Consider: Ghost. Why, on these nine controls: Metadata, canonical field, sitemap and structured data are built in; per-post noindex isn't documented.
If you want full control and don't mind maintaining plugins. Consider: WordPress (self-hosted). Why, on these nine controls: Core covers the domain, folder, slugs and sitemap; descriptions, per-post noindex, custom canonicals and structured data come from an SEO plugin.
If you run a portfolio or business site with a blog and want SEO set up for you. Consider: Squarespace. Why, on these nine controls: Sitemap, canonical tags and structured data are generated for you, but you can't hide one post without hiding the whole blog.
If you want a blog hosted by Google. Consider: Blogger. Why, on these nine controls: Search Console verification is automatic for new blogs, and per-post noindex and redirects are documented; per-post descriptions, canonicals and a sitemap aren't.
If you mainly send a newsletter and want the posts on the web too. Consider: Substack. Why, on these nine controls: Post URLs are editable, but title, description, canonical and structured data controls aren't documented, and sitemaps and Search Console verification depend on the publication growing.
Before you decide
Help pages change, so treat these cells as true on 8 October 2026 and recheck the pages linked above for the platform you pick. "Not documented" is a gap in the documentation, not proof that a control is missing, so ask the platform before you rule it out. Plan requirements matter too: several controls above sit behind a paid plan or a custom domain.
If you already blog somewhere, check what your posts output now, not just what the settings promise. SearchCub's Page checks reads one page's HTML and reports whether it has a title, a meta description and a canonical URL.
Your next step
Write down the controls your blog will need in its first year: a folder on an existing site, cross-posting that needs canonical tags, or old URLs that need redirects. Compare that list with the table, then confirm each one on the platform's own help pages. If you are still choosing an address, read does your domain name affect SEO, and for what search engines look at on any platform, start with what is SEO.