> ## 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.

# Get SEO settings

> <Info>This API is in beta. Endpoints, fields, and behavior may still change, so avoid depending on it in production.</Info>

Returns the app's saved SEO settings.

`result` carries only the keys you have actually saved, because it is the stored document rather than a rendered view of it. An app whose SEO settings have never been changed returns an empty object, so read a missing key as the default documented on that field instead of as unset.

Change them with [Update SEO settings](/api-reference/update-seo-settings). This endpoint is limited to 30 requests per minute per app, and that budget is shared with the app's other SEO endpoints.

<Warning>The response includes fields beyond the ones documented here. Don't rely on undocumented response fields, as they can change at any time.</Warning>



## OpenAPI

````yaml /developers/references/app-management/app-management-openapi.json get /api/apps/{app_id}/seo/settings
openapi: 3.1.0
info:
  title: Base44 App Management API
  version: 1.0.0
servers:
  - url: https://app.base44.com
security:
  - ApiKeyAuth: []
paths:
  /api/apps/{app_id}/seo/settings:
    get:
      summary: Get SEO settings
      description: >-
        <Info>This API is in beta. Endpoints, fields, and behavior may still
        change, so avoid depending on it in production.</Info>


        Returns the app's saved SEO settings.


        `result` carries only the keys you have actually saved, because it is
        the stored document rather than a rendered view of it. An app whose SEO
        settings have never been changed returns an empty object, so read a
        missing key as the default documented on that field instead of as unset.


        Change them with [Update SEO
        settings](/api-reference/update-seo-settings). This endpoint is limited
        to 30 requests per minute per app, and that budget is shared with the
        app's other SEO endpoints.


        <Warning>The response includes fields beyond the ones documented here.
        Don't rely on undocumented response fields, as they can change at any
        time.</Warning>
      operationId: get_seo_settings_api_apps__app_id__seo_settings_get
      parameters:
        - name: app_id
          in: path
          required: true
          schema:
            type: string
            description: ID of the app whose SEO settings you want.
            title: App Id
          description: ID of the app whose SEO settings you want.
          example: 6820f3a4e7b91d003c45a1f2
      responses:
        '200':
          description: The app's saved SEO settings.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SEOSettingsResponse'
        '401':
          description: Missing or invalid credentials.
        '403':
          description: >-
            You don't have access to this app, or you used a workspace API key.
            These endpoints accept a user's credentials only.
        '404':
          description: App not found.
components:
  schemas:
    SEOSettingsResponse:
      properties:
        result:
          $ref: '#/components/schemas/SEOSettingsResource'
          description: >-
            The saved settings. This is an empty object for an app whose SEO
            settings have never been changed.
      type: object
      required:
        - result
      title: SEOSettingsResponse
      description: >-
        An app's SEO settings, wrapped in the field the endpoint returns them
        under.
    SEOSettingsResource:
      properties:
        seo_disabled:
          type: boolean
          title: Seo Disabled
          description: >-
            Whether you run your own SEO. When `true`, Base44 stops injecting
            titles, descriptions, Open Graph and Twitter tags, canonical URLs,
            JSON-LD and prerender snapshots, and serves your own
            `public/robots.txt` when you ship one. Defaults to `false` while the
            key is absent. This does not add a `noindex` tag, and a login-gated
            or private app stays unindexed whatever you set here.
          default: false
          example: false
        platform_meta_injection_enabled:
          type: boolean
          title: Platform Meta Injection Enabled
          description: >-
            Whether Base44 injects the title, description, Open Graph and
            Twitter tag block. Set it to `false` when your deployed `index.html`
            already carries a complete set. Narrower than `seo_disabled`, which
            also turns off canonical URLs, JSON-LD and snapshots. Defaults to
            `true` while the key is absent.
          default: true
          example: true
        platform_jsonld_injection_enabled:
          type: boolean
          title: Platform Jsonld Injection Enabled
          description: >-
            Whether Base44 injects its own WebSite, Organization, BreadcrumbList
            and FAQPage JSON-LD. Set it to `false` when your app ships its own
            structured data. Defaults to `true` while the key is absent.
          default: true
          example: true
        robots_txt_enabled:
          type: boolean
          title: Robots Txt Enabled
          description: >-
            Whether Base44 generates `/robots.txt`. When `false`, your deployed
            `public/robots.txt` is served instead, and the path returns 404 when
            you ship none. Defaults to `true` while the key is absent.
          default: true
          example: true
        sitemap_xml_enabled:
          type: boolean
          title: Sitemap Xml Enabled
          description: >-
            Whether Base44 generates `/sitemap.xml`. When `false`, your deployed
            `public/sitemap.xml` is served instead, and the path returns 404
            when you ship none. Defaults to `true` while the key is absent.
          default: true
          example: true
        llms_txt_enabled:
          type: boolean
          title: Llms Txt Enabled
          description: >-
            Whether Base44 serves a generated `/llms.txt` describing the app to
            AI crawlers. Defaults to `false` while the key is absent.
          default: false
          example: false
        ai_crawlers_enabled:
          type: boolean
          title: Ai Crawlers Enabled
          description: >-
            Whether known AI crawlers are allowed in the generated `robots.txt`.
            Defaults to `true` while the key is absent.
          default: true
          example: true
        synthesized_breadcrumb_enabled:
          type: boolean
          title: Synthesized Breadcrumb Enabled
          description: >-
            Whether Base44 builds a BreadcrumbList for each request path at
            render time. Set it to `false` to serve the saved
            `breadcrumb_schema` instead, which is what keeps a hand-written
            breadcrumb intact. Defaults to `true` while the key is absent.
          default: true
          example: true
        canonical_url:
          anyOf:
            - type: string
            - type: 'null'
          title: Canonical Url
          description: >-
            Base URL Base44 builds canonical tags from. The app's own published
            URL is used while the key is absent.
          example: https://acme.com
        content_query_params:
          items:
            type: string
          type: array
          maxItems: 25
          title: Content Query Params
          description: >-
            Query-string parameter names whose values serve distinct content,
            such as `article` for `/guides?article=slug`. Naming one opts its
            URL variants into prerender warming, which otherwise only covers
            paths. Send at most 25 names, counted before the list is cleaned up,
            and match each name's casing exactly. Names are trimmed, and blank
            or repeated entries are dropped, so the list you read back can be
            shorter than the one you sent. Defaults to an empty list, meaning no
            query variants are warmed.
          example:
            - article
        custom_json_ld:
          anyOf:
            - items:
                additionalProperties: true
                type: object
              type: array
            - type: 'null'
          title: Custom Json Ld
          description: >-
            Extra JSON-LD objects Base44 injects alongside its own. Every entry
            must be a JSON object. The key is absent while you have added none.
          example:
            - '@context': https://schema.org
              '@type': Product
              name: Acme CRM
        website_schema:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          title: Website Schema
          description: Saved WebSite JSON-LD object. The key is absent while none is saved.
          example:
            '@context': https://schema.org
            '@type': WebSite
            name: Acme CRM
            url: https://acme.com
        organization_schema:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          title: Organization Schema
          description: >-
            Saved Organization JSON-LD object. The key is absent while none is
            saved.
          example:
            '@context': https://schema.org
            '@type': Organization
            name: Acme
            url: https://acme.com
        breadcrumb_schema:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          title: Breadcrumb Schema
          description: >-
            Saved BreadcrumbList JSON-LD object. It is served only while
            `synthesized_breadcrumb_enabled` is `false`. The key is absent while
            none is saved.
          example:
            '@context': https://schema.org
            '@type': BreadcrumbList
            itemListElement: []
        faq_schema:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          title: Faq Schema
          description: Saved FAQPage JSON-LD object. The key is absent while none is saved.
          example:
            '@context': https://schema.org
            '@type': FAQPage
            mainEntity: []
        pages:
          additionalProperties:
            $ref: '#/components/schemas/SEOPageSettings'
          type: object
          title: Pages
          description: >-
            Per-page tag overrides, keyed by the page's component name as it
            appears in the app's code. The key is absent while no page overrides
            anything.
          example:
            Home:
              description: Track leads and deals in one place.
              og_image: https://cdn.example.com/acme-og.png
              title: Acme CRM
      type: object
      title: SEOSettingsResource
      description: An app's saved SEO settings.
    SEOPageSettings:
      properties:
        title:
          anyOf:
            - type: string
            - type: 'null'
          title: Title
          description: >-
            Title tag for this page. The key is absent while the page overrides
            no title.
          example: Acme CRM
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
          description: >-
            Meta description for this page. The key is absent while the page
            overrides no description.
          example: Track leads and deals in one place.
        og_image:
          anyOf:
            - type: string
              maxLength: 2048
            - type: 'null'
          title: Og Image
          description: >-
            Image URL for the `og:image` and `twitter:image` tags on this page.
            It must be an `https://` URL with a host and no backslashes, and it
            cannot exceed 2048 characters. Send an empty string to stop
            overriding the image.
          example: https://cdn.example.com/acme-og.png
      type: object
      title: SEOPageSettings
      description: The meta tags one page overrides.
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: api_key
      description: Personal API key.

````