Why I Actually Tracked This
I rebuilt richardlemon.com on Ghost, self-hosted, on a fresh-ish domain with no real content history.
Every SEO article says the same thing. "It can take weeks or months to index." Completely useless when you are staring at a blank Search Console graph on day 3 and wondering if you broke DNS.
So I tracked everything instead. Exact dates. What I changed. When Googlebot showed up. When impressions finally appeared. When clicks stopped being a rounding error.
This is the real timeline for a self-hosted Ghost blog on a custom domain, no legacy audience, no paid promotion. Just clean tech, structured content, and a slightly obsessive builder refreshing charts too often.
The Setup: What I Launched With
Context first, because timelines without environment details are useless.
Stack for this version of richardlemon.com:
- Platform: Ghost (self-hosted, Docker)
- Hosting: Small VPS in the EU, behind Cloudflare
- Domain: richardlemon.com (registered a while ago, but basically zero SEO history)
- Theme: Custom, performance-focused, no heavy frontend frameworks
- Content at launch: 3 posts, 1 about-page, 1 homepage. All long-form, technical / builder focused.
- Sitemaps: Default Ghost sitemap at
/sitemap.xml - Robots.txt: Default Ghost, allowed crawling
I care about performance and DX more than design fluff. The site shipped with:
- Lighthouse 95+ on mobile and desktop
- Clean HTML, minimal JS
- Canonical tags set
- Open Graph and Twitter cards configured
No fancy link-building campaigns. No Reddit spam. I only shared a couple of posts in small dev circles after things were already indexed.
Day 0: Domain, DNS, And The Basic Plumbing
Day 0 was deployment day.
Ghost container up. Nginx in front. Cloudflare on top. TLS set up. Site reachable at https://richardlemon.com.
The first 30 minutes were the boring but critical steps:
- Verified the domain in Google Search Console (domain property, DNS TXT record)
- Added the
https://URL prefix property as well, out of habit - Checked that
https://richardlemon.com/sitemap.xmlloaded and linked to other sitemaps - Submitted the main sitemap in Search Console
Ghost makes this part easy because you get valid sitemaps and robots.txt out of the box. The important part was doing this immediately. No "I will verify Search Console next week" nonsense.
Day 1: First Crawl Hits
Within 24 hours, Googlebot started to poke around.
Timeline looked like this:
- ~3 hours after launch: Search Console still empty. No coverage data. Expected.
- ~8 hours: First signs in the Settings > Crawl stats report. A couple of small requests from
Googlebot Smartphone. - ~18 hours: Crawl stats showed a small spike. A few dozen URLs requested. Keep in mind Ghost exposes tag pages, author pages, and RSS feeds as separate URLs.
Important detail. Crawl stats showed activity, but the Coverage and Performance reports in Search Console were still blank.
So yes, Google was crawling the site within a day. No, that does not mean you rank or even show up anywhere yet.
Day 2–3: Coverage Starts To Move
Around Day 2, the Coverage report finally woke up.
The first entries looked like this:
- Valid: 5 URLs (home, 3 posts, about page)
- Excluded: A bunch of internal tag and pagination URLs; Ghost loves those
Search Console lagged a bit. It showed data as of the previous day, so the timing is not to-the-minute accurate, but the rough reality was:
- Google crawled some pages on Day 1
- Google decided what to index on Day 1–2
- Search Console reflected that choice around Day 2–3
I also hit the "Inspect URL" feature on the main posts and clicked "Request indexing" for each one. I do not think this is magic. I do think it removes excuses like "Google never saw this URL".
Day 4–5: First Impressions (Zero Clicks)
This is the part everyone underestimates. Indexing is not the same as visibility.
On Day 4, the Performance > Search results report finally showed something non-zero:
- Impressions: 3
- Clicks: 0
- Queries: My name, and brutal long-tail stuff like "richard lemon ghost blog"
So the timeline from nothing to the first impressions looked like this:
- Day 0: Site launch, sitemap submitted
- Day 1: First crawl hits
- Day 2–3: Pages marked as Valid in Coverage
- Day 4: First impressions for brand / name queries
That 4-day window is where I see people panic. I have done it myself. You stare at the Performance chart and think you misconfigured something. In this case, everything was working. Google just did not trust the site yet.
Week 2: Non-Brand Queries Show Up
The more interesting part starts around Day 10–14.
By this time, I had published a couple more posts. So the content footprint grew from 3 posts to around 6 or 7, all long-form and reasonably specific.
Search Console started to show:
- Impressions per day: 10–20
- Clicks per day: 0–1 (mostly 0)
- Queries: Mix of my name, Ghost-related config keywords, self-hosting, and a few weird partial matches
The big shift was not volume. It was the type of queries.
Instead of only ranking for my name, I began to see the site show up for unbranded stuff I actually cared about. Things like "self hosted ghost nginx" or "ghost blog docker compose".
I think this is where the "new domain sandbox" feeling lives. Google lets you exist, but it slots you at position 40+ for almost everything. You technically rank, but nobody scrolls that far.
Month 1: Actual Clicks You Can Feel
Around the 3–4 week mark, Search Console finally started to look like a living project instead of a dead graph.
Rough stats at ~30 days:
- Total impressions: low hundreds
- Total clicks: 15–25 range
- CTR: bouncing between 3% and 8%
- Average position: ~25–30 across all queries
Nothing viral. No breakout hit article. Just a slow, boring curve. The kind you actually want as a foundation.
Patterns I saw:
- Posts with concrete technical queries (like specific Ghost configs) got impressions first.
- More opinionated or abstract posts took longer to show up for anything useful.
- My name and domain got a predictable trickle once Google understood that "Richard Lemon" was not only a fruit joke.
By the end of Month 1, I stopped thinking about "when will this index" and started thinking about "what is actually worth writing". That mindset shift happens later than people admit.
What Ghost Got Right For SEO
Ghost is not some magical SEO framework, but it does some boring fundamentals very well by default. That matters for a new site.
Here is what clearly helped:
- Clean URLs:
/post-slug/without clutter. No dates baked in. Easy to reason about. - Automatic sitemaps: Ghost keeps the sitemap up to date as you publish. No plugin hell.
- Decent metadata support: Per-post meta titles and descriptions mapped nicely to what Google ended up showing.
- Performance by default: A light theme on a decent VPS plus Ghost meant fast TTFB and good Core Web Vitals without much tweaking.
Most "SEO problems" I see devs complain about are self-inflicted. Weird frameworks. Client-side routing only. Over-animated SPAs. Ghost avoided that. The crawl and index timeline reflected it.
What Slowed Things Down
It was not all clean and perfect.
A few things definitely slowed stuff down or at least did not help:
- Thin tag pages: Ghost generates tag and author archives out of the box. On a small blog, those are mostly thin duplicates. Google indexed some, ignored others. Mild noise.
- Zero backlinks: I did no outreach. That is fine long term, but it makes the first month slower. Google trusts sites with signals from elsewhere more quickly.
- Publishing bursts: I dropped multiple posts at once, then a quiet period. In hindsight I would rather publish weekly for a while. Consistency seems to help early on.
None of this broke indexing. It just meant I did not give Google a strong reason to accelerate trust. The site had to win on technical cleanliness and content relevance alone.
The Realistic Timeline For A New Self‑Hosted Ghost Blog
So how long does it actually take for a fresh Ghost site on a custom domain to show up and rank in Google, if you do the basics right and nothing fancy?
This is the honest summary from richardlemon.com:
- 0–1 day: Google discovers and crawls the domain, assuming your DNS and sitemap are clean and you verify in Search Console fast.
- 2–3 days: First URLs move to "Valid" in the Coverage report. You are technically indexable.
- 4–7 days: First impressions arrive, mostly for brand queries and exact domain matches. Clicks usually still zero.
- 2–3 weeks: Long-tail and technical queries start to show up. Positions are bad, but no longer invisible.
- 4+ weeks: Stable impressions, occasional clicks, and a clear sense of which posts have legs.
If you are sitting on a new Ghost blog and nothing is indexed after 2 weeks, something is wrong. Either robots.txt is blocking, the site is painfully slow, or you forgot the basic plumbing.
If you are getting a few impressions but no clicks after 4 weeks, that is just normal for a newborn site with no links. Keep publishing. Make your posts specific. Log your queries in Search Console and lean into the ones that actually bring people in.
What I Would Repeat (And What I Would Skip)
If I had to spin up another Ghost blog tomorrow and wanted it to get indexed and ranking as fast as this one, here is what I would absolutely repeat:
- Verify Search Console on Day 0 and submit the sitemap instantly.
- Ship with at least 3–5 solid posts, not a single "Hello World".
- Inspect and request indexing for your key URLs early, mostly as a sanity check.
- Keep the theme lightweight. Typography over animations.
Things I would skip or change:
- Not worry about tweaking meta descriptions obsessively before Google even trusts the domain.
- Avoid publishing bursts. I would schedule content for a clean weekly rhythm.
- Invest a couple of hours in getting one or two natural backlinks from personal projects or profiles early on.
The point is not to over-engineer the SEO part. The point is to remove friction so your content can start compounding.
Final Thoughts From The Graphs
I built this version of richardlemon.com as a Ghost experiment, but the Search Console graphs ended up being more interesting than I expected.
The main takeaway: indexing is fast if your tech is clean, but meaningful ranking is slow if your domain is a nobody. Ghost does its job on the technical side. You still have to earn trust the old-fashioned way. Shipping useful posts regularly.
If you want to know whether your self-hosted Ghost setup is "working" from an SEO perspective, stop asking "am I ranking for X" in the first 10 days. Instead, ask:
- Did Google crawl my site in the last 48 hours?
- Are my core pages marked as Valid in Coverage?
- Are impressions for at least something trending up week to week?
If the answers are yes, you are not stuck. You are just early in the graph.
That is exactly where richardlemon.com started. Zero to indexed in a few days. Zero to actually useful impressions and clicks in a few weeks. The rest is on me to keep publishing and keep breaking things in public.
Subscribe to my newsletter to get the latest updates and news
Member discussion