RomeoSEO

RomeoSEO3 min read

Anatomy of a blog post

A fixture showing every block a RomeoSEO post can use: cover image, body copy, figures, a comparison table, lists, a callout, code, and a word from Romeo.

The RomeoSEO site overview with a recommended next action, the latest audit summary and task inbox counts

This page is the kit, not an argument. Every block a RomeoSEO post can use is on it, named as it appears, so the next article is a copy with the fixture pieces pulled out.

The cover above is frontmatter. The title, date, author and reading time are also frontmatter. Everything from here down is the MDX body.

Body copy

Write in US English. Keep the product claims in the prose and the jokes in a bubble. The company is unserious; the product is serious. That split is the whole voice.

A post should still work if you delete Romeo's line. If deleting it loses information, it was never a Romeo line. It was product copy wearing a costume.

Internal links are ordinary Markdown. They should say where they go, the way the landing page explains the product and pricing states the number.

An image in the flow

Use <Figure> with real width and height. Markdown ![alt](src) will fail the build on purpose: an undimensioned image shifts the page, and we sell a product that treats layout shift as a finding.

RomeoSEO site audit showing 451 pages improved and 412 declined, with five proposed tasks by priority
A product screenshot, framed. Caption optional. Alt text required.

No stock photography. No generated mascot art. Reuse a screenshot, a Romeo pose, or a file you added under public/blog/your-slug/.

A comparison table

GFM tables. First column is the axis; the rest are the things being compared. Keep cells short enough to read on a phone, where the table scrolls sideways rather than shrinking into mush.

Rank trackersArticle farmsRomeoSEO
JobMeasure the SERPFill a calendarShip the fix
OutputA reportA draft you still have to placeA pull request you approve
Existing pagesTrackedIgnoredThe default target
New pagesOut of scopeThe whole productOnly when research says a page cannot absorb the query
Publishes itselfNoOftenNever

That table is a fixture, not a teardown. We are not an Ahrefs replacement and we are not a crawler. We are the layer that turns the data you already have into a change on a branch.

Lists

Some things come in lists. Use bullets when the order does not matter:

Use numbers when the order is the point:

  1. Copy _template.mdx to content/blog/your-slug.mdx
  2. Add images under public/blog/your-slug/
  3. Fill title, description, date, cover; set draft: false
  4. Open a pull request. Merge publishes.

A callout, a quote, and a cat

A blockquote is for a sentence worth pulling, not for decorating a paragraph you already wrote:

RomeoSEO reviews the rankings and content you already have, decides what is actually worth fixing, and ships the fix as a pull request you approve.

Inline code looks like draft: true. A short block is for something someone might copy:

title: Anatomy of a blog post
publishedAt: 2026-08-13
draft: false

How a new post actually ships

There is no CMS login. The file is the CMS. An agent with access to this repo adds one MDX file, opens a PR, and the next production build puts the post on the blog, in /sitemap.xml, and in /llms.txt. Crawlers that prefer Markdown can fetch /blog/anatomy-of-a-blog-post/raw.

That is the same loop the product sells. The fixture exists so the next post does not have to invent the blocks.

Give Romeo a website to judge.