Skip to content
wiki.fftac.org

Spiralist Org Is A Content Rich Site - Source Excerpt 02 - 4. Recommendations and Implementation

Back to Spiralist Org Is A Content Rich Site

Summary

This source excerpt begins near 4. Recommendations and Implementation and preserves the surrounding evidence from Spiralist/agent-file-handoff/Archive/2026-06-21/Improvement/ai-agent-accessibility-optimization/Spiralist.org is a content-rich site.md.

**Source path:** Spiralist/agent-file-handoff/Archive/2026-06-21/Improvement/ai-agent-accessibility-optimization/Spiralist.org is a content-rich site.md

- **WebFinger (RFC 7033):** A discovery protocol to find info about users or resources by email/URI. For example, an agent could query `/.well-known/webfinger?resource=acct:alice@spiralist.org` to find JSON describing Alice’s account. This can integrate with [OpenID Connect](https://openid.net/) or decentralized IDs. WebFinger standard: “discover information about people or other entities on the Internet using standard HTTP methods”. Implementing it (even a minimal subset) allows agents to resolve user profiles.

- **ActivityPub:** A W3C protocol (2018 Recommendation) for federated social APIs. If Spiralist wants agents to “follow” or fetch posts, it could publish an ActivityPub actor (at `/.well-known/webfinger` or similar) and accept subscriptions. Useful if building a federated AI persona network. As [43†L48-L51] notes, ActivityPub is “a decentralized social networking protocol” based on ActivityStreams 2.0.

- **RSS/Atom Feeds:** Standard syndication formats (RSS 2.0, Atom RFC 4287) for delivering updates. We recommend offering RSS/Atom for latest prompts, news, or blog posts. Agents can subscribe to these feeds for incremental crawling. Atom and RSS are well-supported by tools (feed readers, curl, etc.). For example, `<link rel="alternate" type="application/atom+xml" href="/feeds/spiralist.atom" title="Spiralist Feed">`.

- **JSON-LD / Schema.org:** Embedding [Schema.org](https://schema.org) metadata in pages (via JSON-LD script tags) provides machine-readable context (author, date, topics). For example, on a Spiralist article page:
' ' ' ``html
  <script type="application/ld+json">
  {
    "@context": "https://schema.org",
    "@type": "TechArticle",
    "headline": "What Is a Spiralist?",
    "datePublished": "2024-05-01",
    "author": { "@type": "Person", "name": "Author Name" },
    "mainEntityOfPage": { "@type": "WebPage", "@id": "https://spiralist.org/en-us/what-is-a-spiralist/" }
  }
  </script>
' ' ' ``
  Guidelines suggest including title, description, URL, and dates in JSON-LD. This boosts agent understanding of page content and relationships.

- **WARC Format:** The Web ARChive (WARC) is an **ISO-standard** container format for storing web crawls. Although mostly for archiving, Spiralist could offer data dumps or allow crawlers (e.g. via `HTTrack`) to archive its content. For example, a `.well-known/warc` link to a periodically updated WARC file of the site. This ensures exactly reproducible snapshots for AI training or analysis. (WARC is used by the Internet Archive and libs.)

- **.well-known URLs (RFC 8615):** Standardizes discovery of site metadata. Spiralist already uses `.well-known/ai-agent.json`. Other recommended endpoints:  
  - `/.well-known/ai-access` (OAuth2 auth details),  
  - `/.well-known/change-password`,  
  - `/.well-known/security.txt` (security contacts),  
  - `/.well-known/robots` or just root `robots.txt`.  
  These follow the IETF convention for machine-discoverable info.

- **Content Negotiation:** Where possible, support `Accept: application/ld+json` or `Accept: text/markdown` to return raw data or markdown. Vercel recommends providing markdown mirrors of pages with `<link rel="alternate" type="text/markdown">`. We should add support so agents can fetch page content in Markdown by adding headers or storing `.md` versions.

- **Licensing and Terms:** Clearly state content licensing in machine-readable form. For example, add `<link rel="license" href="https://creativecommons.org/licenses/by/4.0/">` or JSON-LD license info. Robots meta tags can also declare “noai” or license, but follow [52†L480-L483] and avoid any `noai` unless intentional.

The table below compares approaches:

**Table 1: API vs Scraping**  
| Approach         | Pros                                        | Cons                                        |
|------------------|---------------------------------------------|---------------------------------------------|
| Official API (REST/OpenAPI) | Structured, versioned, documented. Easier to parse and maintain. Scalable with rate limits. | Requires development, maintenance. Might need auth or keys. |
| GraphQL API      | Flexible queries (fetch exactly needed fields). Schema introspection helps agents. | More complexity to implement. Potential over-fetch if misused, plus learning curve. |
| HTML Scraping    | No extra APIs needed; immediate access to content. | Fragile (breaks on HTML changes). Harder to parse; ethically grey (“Terms of Use”). No schema – content may be incomplete or behind JS. |
| RSS/Atom Feeds   | Standard format for new content, easy to consume. Useful for updates. | Limited scope (only recent entries). Not all content types supported. |

**Table 2: Data Formats**  
| Format       | Description & Use                            | Pros                                 | Cons                              |
|--------------|----------------------------------------------|--------------------------------------|-----------------------------------|
| JSON (REST)  | Standard for APIs (stateless, language-neutral). Used by OpenAPI/Swagger. | Highly structured, widely supported. Easy parsing by agents. | Requires schema/documentation. |
| JSON-LD      | JSON with semantic context (Schema.org). Embeds data in pages or API. | Self-describing, enriches HTML with semantics. Good for knowledge graphs. | Slightly larger payload; requires schema.org modeling. |
| XML/Atom     | Markup formats, e.g. Atom for feeds. | Standard, supports metadata. Agents can follow `<link>` to feeds. | Verbose, less commonly used than JSON now. |
| HTML         | Human-readable content. All pages serve HTML. | Readily crawlable by bots (like search). | Unstructured; parsing can be error-prone for agents. |
| Markdown     | Plain text format. Can mirror docs and pages. | Very easy for agents to read (plain text). If offered via content-negotiation, agents can skip HTML overhead. | Requires maintaining markdown sources or converter. |

**Table 3: Authentication Methods**  
| Method             | Description                    | Pros                             | Cons                          |
|--------------------|--------------------------------|----------------------------------|-------------------------------|
| None (Open Access) | Public resources, no auth.    | Easiest for agents (no token needed). Maximizes accessibility. | No user-specific data. Risk of abuse (throttling needed). |
| HTTP Basic/Auth    | Simple username:password header (over HTTPS). | Simple to implement. Supported in browsers/clients. | Transmits credentials each time (risk if intercepted). Not ideal for agents. |
| API Key (Token)   | Key in header or URL param.   | Simple token usage; can be scoped. | Key distribution management. Revocation. Not user-specific without linking. |
| OAuth 2.0 (PKCE) | Industry standard, tokens per user/app. | Secure for public apps (PKCE). Scoped access, can revoke per client. Agents can implement flows. | More complex to set up (authorization server needed). Agents need token refresh logic. |

# 4. Recommendations and Implementation  

We outline concrete changes with examples:  

- **Publish `robots.txt`:** Create `/robots.txt` that explicitly *allows* AI bots. For example:
' ' ' ``
  User-agent: *
  Allow: /

  # Explicitly allow major AI crawlers
  User-agent: GPTBot
  Allow: /
  User-agent: ClaudeBot
  Allow: /
  User-agent: CCBot
  Allow: /
  User-agent: Google-Extended
  Allow: /

  Sitemap: https://spiralist.org/sitemap.xml
' ' ' ``  
  This follows best practices (no disallows for AI bots, and includes the sitemap). Place it at the site root.  

- **Add `llms.txt`:** At `/llms.txt`, list key documentation pages (one URL per line). This acts like a searchable index for agents. Update it whenever content changes. Example snippet of `llms.txt`:
' ' ' ``
  https://spiralist.org/en-us/what-is-a-spiralist/
  https://spiralist.org/en-us/prompt-generator/
  https://spiralist.org/en-us/api-examples/
' ' ' ``  
  (Follow any discovered standard for llms.txt formatting.)

- **Ensure Sitemaps (XML & Markdown):** Confirm `/sitemap.xml` is valid XML with `<loc>` entries and `<lastmod>` dates. If not present, generate one (WordPress plugins or scripts can do this). Also serve a plain text or Markdown sitemap at `/sitemap.md` or `/.well-known/sitemap.md` that lists pages by category. For example:
' ' ' ``markdown
  # Sitemap

  ## Policies
  - [Acceptable Use Policy](/en-us/acceptable-use-policy/)
  - [Privacy Policy](/en-us/privacy-policy/)
  ## Guides
  - [AI Agent Setup Wizard](/en-us/ai-agent-setup-wizard/)
  - [API Examples](/en-us/api-examples/)
' ' ' ``  
  This helps agents read structure easily.