> ## Documentation Index
> Fetch the complete documentation index at: https://docs.base44.com/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> Internal links on these pages omit the .md extension. Append .md to a docs page URL, or send an Accept: text/markdown header, to get that page as markdown.

# SEO

> Read and change how an app appears to search engines and AI crawlers with the Base44 Apps API

The SEO endpoints let you read and change an app's search and AI-crawler settings, run a scan that scores the app's SEO health, and preview the files Base44 generates for `llms.txt` and structured data before you publish either.

Use these endpoints to:

* Read and change an app's SEO settings, such as its meta tags, robots and sitemap toggles, and per-page overrides.
* Run a scan and read its score and checklist, or read back the last one without running a new scan.
* Preview the `llms.txt` file and the Schema.org markup Base44 would generate, before you publish either.

## The score and the checklist

A scan produces two things, and they answer different questions.

* The score is a single 0-100 number with a letter grade, plus a per-category breakdown. Use it to track SEO health at a glance, or to compare it over time.
* The checklist is the individual checks behind that score, each one a pass, warning, or failure, with a description and, where Base44 can act on it, a fix action. Use it to see specifically what's wrong and what to do about it.

[Run SEO scan](/api-reference/run-seo-scan) produces both and returns them together. [Get SEO score](/api-reference/get-seo-score) and [Get last SEO scan](/api-reference/get-last-seo-scan) read them back afterward without running a new scan, the score alone or the checklist alone.

## Categories

Both the score and the checklist group checks into these categories:

* `meta_tags`
* `crawlability`
* `structured_data`
* `ai_discoverability`
* `content_quality`
* `indexing_performance`, only when Google Search Console integration is enabled for the calling user, covering checks that read Search Console data directly

## Search eligibility

Base44 counts an app as search-eligible when it's public. A private or workspace app never is, and an app that requires a login qualifies only where Base44 has turned search indexing on for it. A workspace enforcing single sign-on overrides all of this. An app in that workspace is never search-eligible, even one that would otherwise qualify.

This check gates several things. The live `/llms.txt` path, live JSON-LD injection, and the `ai_discoverability` category in a scan all depend on it.

## When llms.txt goes live

The live `/llms.txt` path checks two things, in order. First, the app must be published and search-eligible. Fail either and the path 404s regardless of your settings. Search-eligibility is also what decides whether a scan reports on `llms.txt` at all, so a scan of a private app leaves that check out while a scan of an unpublished public one still reports it, even though the path 404s for now.

Past that, `llms_txt_enabled` and `seo_disabled` choose which file the app serves. With the toggle off, or SEO disabled, Base44 falls back to the `llms.txt` you deployed with the app yourself, and 404s only when there isn't one. Neither setting removes a file of your own.

## When JSON-LD markup goes live

Base44 injects saved `custom_json_ld` markup only into a page of a search-eligible app, with `seo_disabled` off and `platform_jsonld_injection_enabled` on. Saving the markup with [Update SEO settings](/api-reference/update-seo-settings) isn't enough on its own. Check all three settings when markup you saved isn't appearing on the page.

## Fix actions

Each check in a scan that Base44 can act on carries a `fix_action`. Send its `type` and `params` to [Apply SEO fix](/api-reference/apply-seo-fix) to apply it. The actions fall into three groups, depending on what they change.

### Actions that change settings

These actions change the app's SEO settings. Each one replaces the value it sets, including a value someone edited by hand.

| Action | What it does |
| - | - |
| `enable_llms_txt` | Turns on the generated `/llms.txt`. |
| `enable_ai_crawlers` | Allows known AI crawlers in the generated `robots.txt`. |
| `generate_json_ld` | Replaces `custom_json_ld` with markup generated from the app's entities. |
| `generate_page_meta` | Replaces the title and description of every page except the home page. Each page keeps its `noindex` and `og_image` values. |
| `generate_website_schema`, `generate_organization_schema`, `generate_faq_schema` | Replace the saved WebSite, Organization, and FAQPage markup. |
| `generate_breadcrumb_schema` | Turns on `synthesized_breadcrumb_enabled` and deletes the saved `breadcrumb_schema`. |
| `generate_canonical` | Sets `canonical_url` to the app's current URL. |

### Actions that change the app

These actions change the app itself.

| Action | What it does |
| - | - |
| `generate_description` | Replaces the app's description with one an AI model writes from the app's name, pages, entities, and current description. When the model's answer doesn't pass Base44's length and wording checks, Base44 saves a description built from a template instead. |
| `suggest_shorter_title` | Shortens an app name longer than 60 characters to 57 or fewer, cutting at a word boundary. A name of 60 characters or fewer is left as it is. |

### Actions that change nothing

These actions don't change the app. Most return a `redirect` that names the builder screen where you make the fix yourself.

| Action | `redirect` value | Where you make the fix |
| - | - | - |
| `set_app_title` | `overview` | The Overview tab, to edit the app name. |
| `edit_app_description` | `overview` | The Overview tab, to edit the app description. |
| `edit_public_access` | `app-settings` | The App Settings tab, to change public access. |
| `set_og_image` | `app-settings` | The App Settings tab, to upload a logo for social sharing. |
| `open_seo_advanced` | `seo-meta-tags` | The Meta tags tab of the SEO page, to choose which pages are indexable. |
| `connect_domain`, `edit_slug`, `enable_https` | `domains` | The Domains tab. |
| `publish_app` | `publish` | The Publish panel. |
| `fix_with_ai` | None | Marks a check that needs a change to the app's code. The builder makes it by sending the action's `params.prompt` to the app's AI chat, so calling it here changes nothing. |

## Endpoints

### Settings

* [Get SEO settings](/api-reference/get-seo-settings): Read the app's saved SEO settings.
* [Update SEO settings](/api-reference/update-seo-settings): Save SEO settings. Keys you leave out keep their values.
* [Update page SEO settings](/api-reference/update-page-seo-settings): Hide one page from search engines or make it visible again.

### Scans

* [Run SEO scan](/api-reference/run-seo-scan): Scan the app and get the score and checklist.
* [Get SEO score](/api-reference/get-seo-score): Read the score from the last scan.
* [Get last SEO scan](/api-reference/get-last-seo-scan): Read the last scan's score and checklist together.
* [Apply SEO fix](/api-reference/apply-seo-fix): Apply the fix for one check from a scan.

### Previews

* [Preview llms.txt](/api-reference/preview-llmstxt): Preview the `llms.txt` file Base44 generates for the app.
* [Preview JSON-LD](/api-reference/preview-json-ld): Preview the Schema.org markup Base44 generates from the app's entities.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.