Blogs
Run a blog without running a CMS. Write posts in your dashboard, schedule them, grow an email list, and embed the whole blog on any website with one line of code.
Overview
The Blogs service gives you:
- A post editor with title, subtitle, cover image, tags, categories and SEO metadata.
- Draft, schedule, publish and archive workflow - scheduled posts go live automatically.
- A live preview while you write, with automatic reading-time.
- AI writing in eleven formats, with a plan you can upload once and have written for you.
- A one-line embed that renders your blog (list + article view) on any site, with related posts on each article.
- An optional table of contents and reader share buttons on each article.
- Reader comments with optional moderation, per post.
- An email subscriber list with a built-in subscribe form, CSV export and webhooks.
- Analytics for any dates: views, reads, where readers come from, countries, and the Google searches that bring readers to each post.
- A read API and RSS feed for custom front-ends.
Write a post
- Blogs → New Post. Add a title - the slug is auto-generated (you can edit it).
- Write the body in the editor. Use the toolbar to insert headings, bold, lists, quotes and links. Content is sanitized automatically.
- Add a cover image - upload one or paste a URL - plus a category and tags.
- Fill in SEO & call to action (SEO title, meta description, social image, and an optional button label and link) if you want to override the defaults.
- Save draft - the right pane shows exactly how the post will look.
Write with AI
On the New post screen, click Write with AI to draft a complete, SEO-ready post from a short brief.
- Describe the post - a sentence or two on what it should cover.
- Pick a tone (built-in or one of your own custom tones) and a length (short, medium or in-depth).
- Pick a writing template - see the formats below.
- Leave Add images ticked to have images placed in the post. Choose Free photos or AI generated, whether to add a Cover image, and how many images go across the body sections.
- Optionally tick one or more Knowledge Base collections so the post is grounded in your own content (needs Knowledge Hub).
- Click Generate. A progress panel shows each step turning green as it completes - writing, image generation, then finishing.
The assistant fills the title, URL slug, subtitle, excerpt, body, category, tags, SEO title, meta description and image alt text - all written with search and answer-engine (SEO/GEO) best practice in mind. Everything stays fully editable; review and adjust before you publish. AI generation counts towards your plan's AI usage.
Writing templates
Choose the shape of the article. Each template also decides whether the post ends with an FAQ section, so your blog is not eleven versions of the same page:
- Standard + FAQ - an intro, scannable sections, a conclusion, then a Frequently Asked Questions block. This is the default.
- Article, no FAQ - the same shape without the FAQ, ending on the conclusion.
- How-to guide - numbered steps, what the reader needs up front, key takeaways at the end.
- List post - numbered items with one section each, strongest first. If the title promises seven, you get seven.
- Explainer - opens with a plain-English definition for readers new to the topic, covers how it works and the common misconceptions, then an FAQ.
- Comparison - two or more options weighed criterion by criterion, ending with a clear recommendation per use case, then an FAQ.
- Ultimate guide - a chaptered resource covering a whole topic end to end, with an FAQ. Pair it with the In-depth length.
- Case study - the challenge, the approach, the results and the lessons to reuse.
- Opinion piece - one clear argument, the points behind it, and the strongest counter-argument answered.
- News update - what happened, why it matters and what it means for the reader, most important first.
- Checklist - grouped, do-this-next items the reader can work through.
You can pick the template for a single post, set one for a whole plan, or override it on an individual topic inside a plan.
Set your AI writing defaults
Open Blogs → Settings → AI writing to control how the assistant writes for your whole workspace:
- Writing rules - things the AI should always do or never do (brand voice, phrases, claims to avoid).
- Tones - add your own custom tones alongside the built-in ones.
- Knowledge base - choose collections that are pre-selected every time you write with AI.
Plan ahead & auto-write
Instead of writing one post at a time, give SoftSolz your content plan and let it write each post for you before its date. You still decide what goes live.
Import a plan you already have
Keep your plan in a spreadsheet or a document? Upload it as-is.
- Blogs → Topics → Import plan.
- Drop in your file - CSV, Excel, Word, PDF, Markdown or plain text, up to 10 MB. Each row needs a topic; a short description and a planned publishing date are used when they are there. Column names do not have to match anything.
- Check what was read. Every topic, description and date is shown for you to correct, and you can drop any row that should not be there. A topic with no date is kept as an idea you can schedule later.
- Set the content options once - tone, length, writing template, images, model - plus the time of day to publish and how many days before its date each draft should be ready.
- Import. The plan appears under Topics as a group you can open at any time to see progress.
What happens next
Each post is written automatically a few days before its planned date (you choose how many) rather than all at once, so drafts arrive fresh and in good time. You get an in-app notification when a draft is ready to review.
Publishing stays manual by default. Every post waits as a draft until someone opens it, reviews it and clicks Publish. If you would rather not review each one, tick Publish automatically on the planned date when you import and posts go live on their own.
Reading experience
Each post can show a table of contents, reader share buttons, the publish date and the reading time. Turn each one on or off per post in the Reading experience card on the editor.
- Table of contents - built automatically from the headings in your post and shown above the article. It only appears when the post has headings.
- Share buttons - let readers share the post to Facebook, LinkedIn, Instagram, Threads, X, Reddit, Teams, Slack, or copy the link.
- Publish date and reading time - shown in the small line above the article.
Set your reading-experience defaults
Open Blogs → Settings → Reading to choose the defaults every new post starts with, and to pick which Share networks appear in the share bar. Changing a default only affects new posts; existing posts keep their own choices, which you can still change per post in the editor.
Comments
Let readers comment on your posts. Each post has its own Allow comments toggle in the editor - that per-post choice is what decides whether the comment section shows on the embedded article, so you can open comments on one post and leave them closed on another.
Open Blogs → Settings → Reading to set the workspace defaults:
- Comments - whether each new post starts with comments on (you can still change it per post).
- Approve comments first - hold new comments as pending until you approve them. When off, they appear right away.
The Comments tab on Blogs → Posts lists posts with comments; the Moderate comments icon on a post opens its comments. You get an in-app notification for each new comment, and can Approve, Mark as spam or Delete each one.
Publish & schedule
Use Publish to go live immediately, or Schedule to pick a future date and time - the post publishes itself automatically. Unpublish moves a live post back to draft.
Embed on your site
Open Blogs → Developer → Embed the widget. Under Public widget keys, enter your website address as the Allowed origin (for example https://example.com), click Generate key, and copy the key from the Save this key now window. Then copy the snippet:
<div id="softsolz-blog"></div>
<script src="https://app.softsolz.uk/softsolz.js"
data-public-key="pk_live_…"
data-service-id="blogs"
data-mount="#softsolz-blog"></script>
It renders your published posts as a grid and opens each article in place - with its table of contents, share buttons, comments, related posts and the subscribe box, exactly as you set them in SoftSolz. It resizes to fit your page automatically, and anything you change in the dashboard shows up on your site without touching the snippet.
/blog) - your posts render into that page. On a dark-background site, add data-theme="dark" to the script so the text stays readable. Blogs → Developer has a step-by-step installer and a ready-to-paste AI prompt.Subscribers
Blogs → Subscribers lists everyone who signed up from your blog's own subscribe box, plus anyone you add manually. You can unsubscribe, re-subscribe, delete, and export the list to CSV. You get an in-app notification whenever someone new subscribes.
The subscribe box shows on your embedded blog when Subscribe box is on under Blogs → Settings → Reading. This is the blog's own list; the standalone Newsletter service keeps its own, and you can copy sign-ups across automatically - see below.
Consent and confirmation
The Consent card under Blogs → Settings → Privacy controls how readers opt in and what you keep as proof:
- Require email confirmation (double opt-in). New sign-ups get a confirmation email and sit at awaiting confirmation until they click the link. They are not counted as subscribers and receive nothing until they confirm. Recommended for UK and EU marketing lists. This needs your own sending address first - SoftSolz never emails your readers from its address, so the switch stays locked until you have set up your own sending address. If you had it on and then removed your sending address, new sign-ups are accepted straight away instead of waiting on a confirmation that could not be sent.
- Consent wording. The exact sentence readers agree to. It is stored on every sign-up along with the date and the page they signed up from, and appears in the Consent column and the CSV export.
Every subscriber gets a personal unsubscribe link. Anyone can use it to remove themselves without signing in, and to re-subscribe if they change their mind. Rows captured before you turned consent recording on show Not recorded - that is expected, and SoftSolz never backfills a consent record that was not actually given.
Send blog sign-ups to your newsletter
Turn on Copy subscribers to the newsletter (the Marketing list card under Blogs → Settings → Privacy) and every confirmed blog sign-up is copied into your Newsletter subscriber list, carrying its original consent record. Readers are never asked to confirm twice. The Newsletter service must be installed first.
Analytics
Blogs → Analytics has five tabs: Overview, Posts, Sources, Readers and Campaigns. Pick the dates at the top: 7 days, 30 days, 90 days, 12 months or your own dates. Turn on a comparison to set them against the period before or the same weekdays last year (52 weeks earlier, so a Monday is set against a Monday). The dates stay in the page address, so a link you share opens the same view.
The Overview tab shows views, reads, average read time and how many readers got to the end, each with its change, a chart of views against the comparison period, and your top posts. When Google is connected (see Google search per post), it also shows the Google searches that bring readers to your posts.
| Number | What it means |
|---|---|
| Views | Every time a post was opened. |
| Reads | Views where the reader stayed on the post for at least a few seconds. |
| Read time | The average time a read lasted. |
| Read to the end | The share of reads that scrolled at least three quarters of the way down the post. |
How each post performs
The Posts tab lists every post with its views, change, reads, read time, scroll, read to the end and top source. With Google connected it adds Google clicks, impressions and average position. Search by title, or use the filters:
- Page 1 on Google - posts with an average Google position of 10 or better.
- Growing and Falling - posts with more or fewer views than in the comparison period.
Click a post, or its Details button, to open its own report: a daily views chart, where its readers come from, their countries, and with Google connected, its Google clicks, the searches that bring readers, and Google by country.
Sources and countries
The Sources tab groups your readers by where they came from:
| Channel | Examples |
|---|---|
| Organic search | Google, Bing and other search engines. |
| Paid search | Search adverts. |
| Social | LinkedIn, Facebook, X and other social sites. |
| Paid social | Social adverts. |
| AI assistants | ChatGPT, Perplexity, Gemini, Copilot and Claude. |
| Links in emails and newsletters. | |
| Referral | Links on other websites. |
| Other paid | Other paid links. |
| Direct | Typed in, bookmarked, or no referring site. |
Pick a channel to see its sources, with the campaigns under each source. Below, Countries lists views, reads and read time by the reader's country.
Google search per post
Blogs can show how each post does in Google search: clicks, impressions, average position, and the searches that bring readers. It needs three things:
- SEO Intelligence with your Google Search Console connected.
- The website your blog lives on added in SEO Intelligence.
- Your Public blog URL set under Blogs → Settings → Blog address, so each post can be matched to its address.
Google figures show to members who can also see SEO Intelligence and that website. Google publishes its figures about three days late, so the most recent days may have no Google data yet.
Reader insights
The Readers tab answers the marketing questions: where your readers come from, which campaigns bring them, and what actually turns them into subscribers.
Reader analytics and privacy
Reader analytics is on by default. There is nothing to add to your embed snippet. It is anonymous: it stores nothing on the reader's device and does not follow anyone between visits. The reader's country comes from their IP address, which is never stored; only the country code is kept.
To switch it off for the whole blog, turn off Count views and campaigns in the Reader analytics card under Blogs → Settings → Privacy. To switch it off on one website only, add data-analytics="off" to the embed snippet on that site:
<script src="https://app.softsolz.uk/softsolz.js"
data-public-key="pk_live_…"
data-service-id="blogs"
data-mount="#softsolz-blog"
data-analytics="off"></script>
Views are still counted either way; reads, sources and countries are not.
There are two levels, and the difference matters legally:
| Level | What you get | What it needs |
|---|---|---|
| Count views and campaigns (on by default) | Views, reads and read time per post, the referring site (Google, LinkedIn, a partner blog), the campaign tag on the link, and the reader's country. Plus which of those sources actually produced subscribers. | Nothing extra. It stores nothing on the reader's device and does not follow anyone between visits, so it needs no cookie banner. |
| Recognise returning readers | All of the above, plus a reader's visits linked together. When they subscribe you can open their reading history and see what they read before signing up. Off until you turn on Recognise returning readers in the same card. | Stores an ID on the reader's device, so this is cookie law. Your site must ask for consent first and call Softsolz.consent('granted') when the visitor agrees, and you must mention it in your privacy policy. |
google.com), never the full URL, so a visitor's search terms are never recorded.Open a subscriber's reading history from the book icon on Blogs → Subscribers. Deleting a subscriber deletes their reading history with them. Raw reader events are automatically deleted after 180 days; the summary counts are kept.
Track a campaign
Add campaign tags to the links you share and they show up in the Sources and Readers tabs and against every subscriber who signs up from them:
https://example.com/blog?utm_source=linkedin&utm_medium=social&utm_campaign=launch-week
The Campaigns tab builds these links for you: name a campaign once, then copy a ready-made link for every place you share it. It needs your Public blog URL first.
The tag on a sign-up works even with reader analytics off, because it travels with the sign-up itself.
Use the API
| Path | Auth | When to use |
|---|---|---|
| Embed - widget endpoints | pk_… public key (browser) |
The embedded blog and subscribe form on your site. |
Server - GET https://app.softsolz.uk/api/v1/services/blogs/posts/published (one post: …/posts/published/<slug>) |
sk_… secret key (server) with the Read published posts scope |
Pull posts into a custom front-end or static-site build. |
Keys with the right scopes can also create, edit and publish posts and manage subscribers. A key with the View posts, subscribers and analytics scope can read the same analytics as the dashboard for any dates: totals, every post, sources, and one post's report. Full reference: List published posts and the Blogs developer guide.
Test it step by step
Follow these steps once from start to finish to prove your blog works.
- Get access. You need the Super Admin or Admin role, or a custom role that includes the Blogs permissions, including publishing (Members & access → Roles).
- Pick where to test. To try things without touching your live blog, open the workspace menu and choose Switch to Sandbox mode. The sandbox has its own posts, keys and subscribers.
- Install Blogs. Open Marketplace, find Blogs and click Install. Blogs appears in the sidebar.
- Publish a test post. Go to Blogs → New Post, add the title "Hello from our blog" and a line of text, then click Publish. You see Your post is now live, and the post shows as Published on Blogs → Posts. Writing by hand costs no AI credits.
- Make a key for the Widget Tester. Go to Blogs → Developer → Embed the widget, enter
https://developer.softsolz.ukas the Allowed origin and click Generate key. Copy the key from the Save this key now window. - See it in the Widget Tester. Open developer.softsolz.uk/widget-tester and choose Blogs. In the Embed snippet box, replace
pk_live_REPLACE_WITH_YOUR_KEYwith your key and click Load widget. Your post appears as a card. Click it to open the article. If the subscribe box is on, subscribe with your own email: the address appears under Blogs → Subscribers. - Put it on your own site. Make a new, empty page (for example
/blog). Generate a second key with your own website address as the allowed origin, copy the snippet from Blogs → Developer, paste it into that page and publish it. Then set that page's address as the Public blog URL under Blogs → Settings → Blog address so share links open the real post. - Check the numbers. Open the post on your site once, then look at Blogs → Analytics: the view is counted under Views on the Overview tab, and the Sources tab shows where it came from.
- Go live. If you tested in the sandbox, switch back with Switch to Live mode and publish your real posts and key there: sandbox posts and keys never carry over.
For developers
In the sandbox, open Blogs → Developer → Use the API, click New API key and tick Read published posts. Sandbox keys start with sk_test_. Then list your live posts:
curl https://app.softsolz.uk/api/v1/services/blogs/posts/published \
-H "Authorization: Bearer sk_test_your_key"
The reply lists every published post (slug, title, excerpt, cover image and more) under data. See the API Reference for paging and the single-post call.
If something goes wrong
| You see | What it means |
|---|---|
| Invalid embed key or origin not allowed. (inside the widget) | The page address is not on the key's allowed origins, or the key was revoked. Generate a key for the exact address the page runs on, starting https:// with no path. |
| No posts published yet. | Nothing is published in this workspace. Drafts and scheduled posts do not show, and a sandbox key only shows sandbox posts. |
| This blog isn't available right now. Please contact the site owner. | Blogs is not active for the workspace, for example the subscription or free trial has ended. Check Manage subscriptions. |
401 api_key_invalid or 403 missing_scope |
The key is mistyped or revoked, or it lacks the Read published posts scope. Create a new key with that scope ticked. |
Common changes & risks
- Edit a published post - safe any time; changes appear on your embedded blog and API right away.
- Change the slug - changes the post's URL and breaks links to the old one. Set it before publishing.
- Delete a post - removes it from your embedded blog and the read API immediately.
- Hide a post from search (the
no_indexoption, set through the API) - removes the post from your embedded blog, the feed and the read API altogether.