# How we find your content

Hosted search and the dashboard's post list come from your site's **index**. We build it from what your site already publishes, in this order, and stop at the first source that has posts:

1. **`/agentprose.json`**, the static index the agentprose CLI writes. It is the richest and cheapest source.
2. **Your feed**: RSS 2.0, Atom or JSON Feed, found through `<link rel="alternate">` on your home page or at `/feed.xml`, `/index.xml`, `/rss.xml`, `/atom.xml`, `/feed.json` or `/feed/`.
3. **Your sitemap** (`/sitemap.xml`, including sitemap indexes) and **`/llms.txt`**. We fetch each listed page and keep the ones that are content.

Feeds often carry only a summary, so we also fetch those posts' pages for the full text.

## What counts as a post

From a sitemap, a page counts when it has any of:

- schema.org JSON-LD of an article type: `Article`, `BlogPosting`, `TechArticle`, `NewsArticle`, `HowTo` and similar
- `<meta property="og:type" content="article">`
- a single `<article>` element with a `<time datetime>` and some length
- a documentation-style path such as `/docs/`, `/guide/`, `/help/`, `/blog/` or `/kb/`, with real text on it
- a link in your `llms.txt`, with real text on it

Tag, category, author, search and pagination pages are skipped. If no page qualifies, we fall back to the longest text pages so the index is never empty for a content site.

## "No posts found"

The site's **Search index** tab shows what we tried and what each source answered. The usual fixes, quickest first:

- **Add a feed.** Most blog platforms have one; make sure it is linked from your home page.
- **Mark your articles.** Add `og:type=article` or Article JSON-LD to post templates. It also helps search engines.
- **Publish `agentprose.json`** from your build with the CLI (below), or upload it from CI.

Then click **Re-index now** on the same tab.

## agentprose.json

The CLI builds it from your static site's output folder:

```bash
npx agentprose build public --base-url https://example.com/
```

Use `--all` to index every page, which suits docs sites, and `--inline` to put the Markdown inside the file. The format:

```json
{
  "version": 1,
  "site": { "name": "Example", "url": "https://example.com/" },
  "posts": [
    {
      "url": "https://example.com/docs/install",
      "title": "Install",
      "summary": "One line in your header.",
      "published": "2026-10-18T00:00:00.000Z",
      "updated": "2026-10-18T00:00:00.000Z",
      "tags": ["setup"],
      "text": "A plain-text excerpt for search…",
      "md": "/docs/install.md"
    }
  ]
}
```

`url` and `title` are required. The body comes from `markdown` (inline), else the file at `md`, else `text`. Only URLs on your site's own origin are used. This site publishes its own docs this way: see [https://agentprose.cloud/agentprose.json](https://agentprose.cloud/agentprose.json).

## How often

Each site is re-crawled on a schedule you set in its settings: daily by default, down to every 6 hours on Pro and every hour on Team. **Re-index now** runs one at once. For instant updates use a [CMS webhook](/docs/cms-webhooks) or upload the index from CI.

## Limits

The index holds up to 500 posts per site on Free, 5,000 on Pro and 20,000 on Team. A crawl fetches a bounded number of pages and says so on the Search index tab when it stopped early.
