AgentBlog – open-source, AI-native SEO blog

goldkey1 pts0 comments

AgentBlog: an SEO and GEO complete blog for Next.js 16 | AgentBlog<br>Skip to content

Install a blog that ranks and gets cited<br>One command installs a complete, SEO optimized blog into your Next.js site. 100% Free & Open Source.<br>For youFor your agent<br>$npx agentblog@latest init<br>Installs the blog into your Next.js app, then verifies it.

$/plugin marketplace add goldk3y/agentblog<br>Installs the six skills into Claude Code, with no app changes.

DocumentationSee it runningStar on GitHub2 stars

AI crawlers do not run JavaScript<br>GPTBot, ClaudeBot, and PerplexityBot fetch your HTML once and read it as text. Whatever is missing from that first response is missing from the answer they write.

curl -sA "GPTBot" https://example.com/blog/do-ai-crawlers-run-js<br># 412 bytes. No title, no description, no article.

A client-rendered blog. The article exists, but only after a bundle runs.curl -sA "GPTBot" https://agentblog.dev/blog/how-ai-search-engines-read-your-blog<br>Do AI crawlers run JavaScript? | AgentBlog and PerplexityBot fetch HTML once and parse it as text." /> {"@context": "https://schema.org","@graph":[{"@type":"BlogPosting",… Do AI crawlers run JavaScript? No. Vercel and MERJ instrumented AI crawler traffic across Vercel’s network over a month and reported that none of the major AI crawlers render JavaScript. Which crawlers render? Googlebot renders. Bingbot renders on a delay.… # 41 KB. The whole article, in one response.

The same post on AgentBlog. Everything a crawler needs, in one response.<br>Representative output, abridged for width. The right-hand command is real.

One command installs the whole blog<br>76 files, and you own every one of them. No runtime package to depend on, and nothing of ours to upgrade around.

your-app/76 files<br>.claude<br>skills

app<br>api

authors

blog<br>[slug]<br>opengraph-image.tsx<br>page.tsx

category

tag

layout.tsx<br>opengraph-image.tsx<br>page.tsx

editorial-policy

feed.xml

llms.txt

not-found.tsx<br>robots.ts<br>sitemap.ts

components<br>blog

mdx

content<br>blog

authors.json<br>categories.json

hooks<br>use-toc-active-heading.ts

lib<br>mdx-plugins

sources

ai-referrers.ts<br>config.ts<br>define-config.ts<br>indexnow.ts<br>metadata.ts<br>og-card.tsx<br>posts.ts<br>preflight-checks.ts<br>preflight.ts<br>reading-time.ts<br>render-mdx.tsx<br>schema.ts<br>schemas.ts<br>toc.ts<br>types.ts

styles<br>agentblog.css

agentblog.config.ts<br>AGENTS.agentblog.md

app/blog/[slug]/page.tsx<br>import type { Metadata } from 'next'<br>import Image from 'next/image'<br>import { notFound } from 'next/navigation'

import { AnswerCapsule } from '@/components/blog/answer-capsule'<br>import { AuthorBio } from '@/components/blog/author-bio'<br>import { Breadcrumbs } from '@/components/blog/breadcrumbs'<br>import { Byline, PostDates } from '@/components/blog/byline'<br>import { JsonLd } from '@/components/blog/json-ld'<br>import { Faq, FAQ_HEADING } from '@/components/mdx/faq'<br>import { Prose } from '@/components/blog/prose'<br>import { RelatedPosts } from '@/components/blog/related-posts'<br>import { ShareButtons } from '@/components/blog/share-buttons'<br>import { TableOfContents } from '@/components/blog/table-of-contents'<br>import {<br>CLUSTER_GAP,

Open any file to read the source it installs. Each preview is the first sixteen lines after the file header, and the whole file arrives with the install.<br>Already on shadcn? npx shadcn@latest add @agentblog/blog installs the same files, and npx agentblog@latest doctor --fix finishes the config a registry cannot reach.

Your coding agent writes the posts<br>Posts are MDX files in your repository. Installing AgentBlog also adds six skills and a rule block your agent reads, so it knows the format before you ask.

.claude/skills/<br>agentblog-setup<br>Finishes whatever the registry could not do on its own, then replaces the seed author, categories, and posts with yours, so the blog is about your subject and not ours.

plan-blog-content<br>Decides what the site should be known for, mines the questions people actually search, and writes a backlog with the internal link direction already settled.

write-blog-post<br>Writes to the format: answer capsule first, question headings, a cited statistic, comparison data in a table. It is instructed never to invent a figure or a quotation.

refresh-blog-post<br>Re-fetches every source a post cites, checks it still says what the post says it says, and applies the smallest correct change. Nothing needed changing is a valid outcome.

agentblog-audit<br>Fetches your deployed URL as GPTBot, checks the title landed in head, and validates the graph before you publish.

publish-blog-post<br>Revalidates the post, the index, the sitemap, and the feed, submits to IndexNow, and reports the response code. A 403 and a 200 look identical until somebody reads the number.

Everything a blog needs to get found<br>Prerendering, structured data, feeds, and crawler wiring are built in. You write the posts.

Prerendered HTML

Every post is complete static HTML at build time. Nothing is deferred, and nothing mounts on interaction.

Connected JSON-LD

One graph per page. BlogPosting, Person,...

blog agentblog from import components post

Related Articles