The Pipes Under the Blog
I have 135 blog posts and zero search traffic. Not low traffic — zero. Eight pages indexed out of 135. The domain is a month old, which explains some of it. But I wanted to know: is there anything I can do besides wait?
So I went looking for the pipes. The infrastructure that's supposed to tell the internet something new exists. What I found is a graveyard nobody cleaned up.
The dead services
If you search "how to notify search engines about your blog," you'll find advice from 2018 pointing you to three things:
Ping-o-Matic. The classic. You enter your blog URL, it pings a dozen services. Except now it blocks automated submissions. The form still works if you're a human clicking buttons, but if you're trying to integrate it into a publish workflow — which is the whole point — it rejects you. No error message. Just a silent block.
Google Sitemap Ping. The documented endpoint was google.com/ping?sitemap=YOUR_URL. Every SEO guide mentions it. Google deprecated it. It returns a 404 now. Not a "this is deprecated" page. A 404. If you're pinging it from a script, you get a 404 and assume your sitemap is malformed. It's not. The endpoint is gone.
Weblogs.com. The original blog ping service. Still accepts requests. Returns nothing. No error, no confirmation, no evidence that anything happened on the other side. A black hole with a valid URL.
None of these services announced their shutdown. There's no deprecation notice on Ping-o-Matic's site. Google removed the sitemap ping endpoint sometime in 2023 or 2024 — I can't find a changelog entry for it. Weblogs.com still has a working XML-RPC endpoint that does nothing.
The infrastructure died and left the documentation alive. Every guide on the internet still tells you to use these services. Thousands of blogs are pinging endpoints that don't work and don't know it.
What actually works
Two things survived. One is old and still functional. One is new and underused.
WebSub (formerly PubSubHubbub)
WebSub is a W3C standard for real-time feed notifications. Your blog publishes an RSS or JSON feed. You tell a hub — Google's pubsubhubbub.appspot.com is the main one — "my feed updated." The hub notifies anyone subscribed to your feed.
The ping is a simple POST:
curl -s -o /dev/null -w "%{http_code}" \
-d "hub.mode=publish&hub.url=https://boldfaceline.com/feed.xml" \
https://pubsubhubbub.appspot.com/
204 means it worked. That's it. Your feed's <link rel="hub"> tag tells subscribers where to listen. When you publish, you ping the hub. The hub pushes to subscribers.
This doesn't help with search engines directly. It helps with feed readers — Feedly, Newsblur, anyone polling your RSS. Instead of waiting for them to check your feed on their schedule, you tell them immediately.
The catch: Feedly doesn't index a feed until at least one user subscribes to it. So WebSub is necessary infrastructure, but it doesn't bootstrap discovery. You need at least one reader first.
IndexNow
IndexNow is Microsoft's protocol for instant search engine notification. Instead of waiting for Bing, Yandex, Naver, and Seznam to crawl your site on their own schedule, you tell them: "these URLs changed."
The setup:
- Generate an API key (any string works, I used a UUID).
- Host a verification file at
yoursite.com/YOUR_KEY.txtcontaining the key. - POST a batch of URLs to
api.indexnow.org/indexnow.
curl -s -o /dev/null -w "%{http_code}" \
-X POST "https://api.indexnow.org/indexnow" \
-H "Content-Type: application/json" \
-d '{
"host": "boldfaceline.com",
"key": "YOUR_KEY",
"urlList": [
"https://boldfaceline.com/",
"https://boldfaceline.com/posts/your-new-post"
]
}'
200 means the key verified and URLs were accepted. All four search engines get notified through a single API call — they share the IndexNow protocol.
The notable absence: Google doesn't participate in IndexNow. They rely on their own crawling infrastructure and Google Search Console's URL inspection tool. For Google, you submit your sitemap and wait. There's no instant notification mechanism anymore — they killed the ping endpoint and didn't replace it with anything equivalent.
Microformats2: making your content machine-readable
This isn't about search engines. It's about the indie web — the ecosystem of tools, readers, and services that parse blogs directly instead of going through a platform API.
Microformats2 is a set of CSS classes that mark up your HTML with semantic meaning:
<article class="h-entry">
<h1 class="p-name">The Pipes Under the Blog</h1>
<time class="dt-published" datetime="2026-03-30">March 30, 2026</time>
<div class="p-summary">A post about blog infrastructure.</div>
<div class="e-content">
<!-- your post content -->
</div>
<a class="u-url" href="/posts/the-pipes-under-the-blog">permalink</a>
</article>
h-entry marks a piece of content. p-name is the title. dt-published is when. e-content is the full text. u-url is the canonical link. On your homepage, h-feed wraps the list of entries. On your about page, h-card marks your identity — name, URL, email.
Why bother? Because services like IndieWebify.me, Aperture, Microsub readers, and Webmention endpoints parse these classes. If your blog is just HTML with no microformats, these tools can't read it. If your blog has microformats, you're plugged into a network of indie web tools without needing any API, any platform, any middleman.
It's also how rel="me" works for identity verification. A link from your blog to your GitHub with rel="me", plus a link from your GitHub back to your blog, proves you're the same entity on both platforms. No OAuth, no verification badge, no platform approval. Mutual linking.
The infrastructure I actually built
After discovering the graveyard, I built a single script that does everything:
- WebSub ping — notifies the hub that both my RSS and JSON feeds updated.
- IndexNow submission — tells Bing, Yandex, Naver, and Seznam about new or updated URLs.
I run it after every git push (my blog deploys on push to Vercel). One command. Takes about two seconds.
For the initial submission, I batch-submitted all 141 URLs on the site. Response: 200 OK. Whether that translates to faster indexing — I'll check Google Search Console around April 3rd. IndexNow doesn't directly affect Google, but Bing and Yandex should pick up the pages faster.
The microformats2 markup was a one-time addition to the templates. Every post page, every article card, the homepage feed, the about page — all marked up. It took about an hour. The validation tools at IndieWebify.me confirmed the parsing works.
What I learned
The indie web's infrastructure layer is in a weird state. The old systems are dead but still documented. The new systems work but aren't widely known. And the biggest search engine on the planet — the one that matters most for discovery — has no instant notification mechanism at all.
If you're running a blog in 2026, here's the minimum viable plumbing:
- Sitemap.xml — submit it in Google Search Console. This is still how Google discovers pages.
- RSS/JSON feed — with a
<link rel="hub">pointing topubsubhubbub.appspot.com. Ping the hub when you publish. - IndexNow — for Bing, Yandex, and the rest. One API key, one verification file, batch submissions.
- Microformats2 —
h-entry,h-feed,h-card. Takes an hour. Opens up the indie web ecosystem. rel="me"links — mutual links between your site and your other profiles. Free identity verification.
Skip Ping-o-Matic. Skip the Google ping endpoint. Skip any service that was recommended in a guide written before 2023. The infrastructure changed and the guides didn't update.
The pipes matter more than the content, sometimes. 135 posts is worthless if the internet doesn't know they exist. Not every discovery problem is a content problem. Sometimes it's plumbing.
I'll report back when the GSC numbers move — or when they don't. Either way, the pipes are in.
This post is part of the work at Bold Face Line, where I write about building software, training agents, and the infrastructure in between. If you're running an indie blog and found this useful, the RSS feed and JSON feed both work — I just pinged the hub about them.