Headers and Images allowlist ignored on Git build

Hi all!

I’m having an issue with my personal site’s netlify.toml.

Site: asher-land.netlify.app. Custom domain asher.land, DNS managed by Netlify. Active since 2021 on the legacy free plan.

I recently added a [[headers]] block and [images] with remote_images for the Image CDN. Neither takes effect on any deploy Netlify builds from Git. Deploy previews and branch deploys both ignore them. Redirects and functions work fine, but have been part of the site for longer.

Full build log for the dev branch `6a9788d51108070008cab308`
10:24:22 PM: build-image version: 969defd95f3977f8de9cb1f48802a7e6f3d8c0b3 (noble-new-builds)
10:24:22 PM: buildbot version: a797ad695607f7312079a713815c85c47c0a2ab5
10:24:22 PM: Fetching cached dependencies
10:24:22 PM: Starting to download cache of 1.1GB (Last modified: 2026-09-01 14:03:41 +0000 UTC)
10:24:25 PM: Downloaded cache in 2.738s
10:24:30 PM: Extracted cache in 4.468s
10:24:30 PM: Fetched cache in 7.381s
10:24:30 PM: Starting to prepare the repo for build
10:24:30 PM: Preparing Git Reference refs/heads/dev
10:24:32 PM:

❯ Initial build environment
baseRelDir: true
branch: dev
context: branch-deploy
cwd: /opt/build/repo
featureFlags: []
mode: buildbot
repositoryRoot: /opt/build/repo
siteId: b1d90c94-36a1-4292-9fc6-705bef72e684

❯ UI build settings
baseRelDir: true
build:
  command: npm run build
  environment:
    - GEMINI_API_KEY
    - INCOMING_HOOK_BODY
    - INCOMING_HOOK_TITLE
    - INCOMING_HOOK_URL
    - LISTMONK_API_PASS
    - LISTMONK_API_USER
    - LISTMONK_LIST_ID
    - NETLIFY_BUILD_DEBUG
  publish: dist/

❯ Resolved build environment
branch: dev
buildDir: /opt/build/repo
configPath: /opt/build/repo/netlify.toml
context: branch-deploy
env: []

❯ Resolved config
build:
  command: npm run build
  commandOrigin: ui
  environment:
    - GEMINI_API_KEY
    - INCOMING_HOOK_BODY
    - INCOMING_HOOK_TITLE
    - INCOMING_HOOK_URL
    - LISTMONK_API_PASS
    - LISTMONK_API_USER
    - LISTMONK_LIST_ID
    - NETLIFY_BUILD_DEBUG
  publish: /opt/build/repo/dist
  publishOrigin: ui
functionsDirectory: /opt/build/repo/functions
headers:
  - for: /*
    values:
      X-Robots-Tag: noai, noimageai
headersOrigin: config
redirects:
  - from: /api/feeds/:feed
    to: /.netlify/functions/feeds?feed=:feed
  - from: /portfolio
    status: 301
    to: /projects
redirectsOrigin: config


10:24:32 PM: Custom functions path detected. Proceeding with the specified path: 'functions'
10:24:32 PM: Installing dependencies
10:24:32 PM: mise ~/.config/mise/config.toml tools: python@3.14.3
10:24:32 PM: mise ~/.config/mise/config.toml tools: ruby@3.4.8
10:24:32 PM: mise ~/.config/mise/config.toml tools: go@1.26.2
10:24:32 PM: Installing Homebrew dependencies from Brewfile.netlify
10:24:33 PM: ==> Auto-updating Homebrew...
10:24:33 PM: Adjust how often this is run with `$HOMEBREW_AUTO_UPDATE_SECS` or disable with
10:24:33 PM: `$HOMEBREW_NO_AUTO_UPDATE=1`. Hide these hints with `$HOMEBREW_NO_ENV_HINTS=1` (see `ma
10:24:35 PM: ==> Downloading https://ghcr.io/v2/homebrew/core/portable-ruby/blobs/sha256:0980099dc2668dc47bd4c85b704beb76b9406b4a85f77fdda9820d8341b40f87
10:24:35 PM: #=#=#
10:24:35 PM: ######################################################################## 100.0%
10:24:36 PM: ==> Pouring portable-ruby-4.0.6.x86_64_linux.bottle.tar.gz
10:24:37 PM: ==> Homebrew collects anonymous analytics.
10:24:37 PM: Read the analytics documentation (and how to opt-out) here:
10:24:37 PM:   https://docs.brew.sh/Analytics
10:24:37 PM: No analytics have been recorded yet (nor will be during this `brew` run).
10:24:37 PM: ==> Homebrew is run entirely by unpaid volunteers. Please consider donating:
10:24:37 PM:   https://github.com/Homebrew/brew#-donations
10:24:37 PM: ==> Auto-updated Homebrew!
10:24:37 PM: Updated 2 taps (homebrew/core and homebrew/cask).
10:24:37 PM: ==> New Formulae
[... ~150 lines of Homebrew's new-formulae list trimmed ...]
10:24:50 PM: Installing typst
10:25:02 PM: `brew bundle` complete! 1 Brewfile dependency now installed.
10:25:03 PM: Downloading and installing node v22.23.2...
10:25:03 PM: Downloading https://nodejs.org/dist/v22.23.2/node-v22.23.2-linux-x64.tar.xz...
10:25:03 PM: Computing checksum with sha256sum
10:25:03 PM: Checksums matched!
10:25:05 PM: Now using node v22.23.2 (npm v10.9.8)
10:25:06 PM: Enabling Node.js Corepack
10:25:06 PM: mise ~/.config/mise/config.toml tools: bun@1.3.12
10:25:06 PM: Installing npm packages using bun version 1.3.12
10:25:06 PM: bun install v1.3.12 (700fc117)
10:25:06 PM: $ git config core.hooksPath .githooks
10:25:06 PM: Checked 897 installs across 910 packages (no changes) [26.00ms]
10:25:06 PM: npm packages installed using bun
10:25:06 PM: Successfully installed dependencies
10:25:06 PM: Detected 2 framework(s)
10:25:06 PM: "eleventy" at version "3.1.6"
10:25:06 PM: "vite" at version "8.1.5"
10:25:07 PM: Starting build script
10:25:07 PM: Section completed: initializing
10:25:09 PM:
10:25:09 PM: Netlify Build
10:25:09 PM: ────────────────────────────────────────────────────────────────
10:25:09 PM:
10:25:09 PM: ❯ Version
10:25:09 PM:   @netlify/build 36.4.4
10:25:09 PM:
10:25:09 PM: ❯ Flags
10:25:09 PM:   accountId: 5f38317cfded431fe4946d9d
10:25:09 PM:   apiHost: api.netlify.com
10:25:09 PM:   baseRelDir: true
10:25:09 PM:   branch: dev
10:25:09 PM:   buildId: 6a9788d5757ca30b75c60653
10:25:09 PM:   buildbotServerSocket: /tmp/netlify-buildbot-socket
10:25:09 PM:   cacheDir: /opt/build/cache
10:25:09 PM:   cachedConfigPath: /tmp/netlify_config.json
10:25:09 PM:   context: branch-deploy
10:25:09 PM:   cwd: /opt/build/repo
10:25:09 PM:   deployId: 6a9788d51108070008cab308
10:25:09 PM:   edgeFunctionsDistDir: /tmp/edge-6a9788d51108070008cab308
10:25:09 PM:   enhancedSecretScan: false
10:25:09 PM:   explicitSecretKeys: LISTMONK_API_PASS,GEMINI_API_KEY
10:25:09 PM:   featureFlags:
10:25:09 PM:     - buildbot_zisi_trace_nft
10:25:09 PM:     - netlify_build_db_setup
10:25:09 PM:     - netlify_build_updated_plugin_compatibility
10:25:09 PM:   framework: eleventy
10:25:09 PM:   functionsDistDir: /tmp/zisi-6a9788d51108070008cab308
10:25:09 PM:   mode: buildbot
10:25:09 PM:   nodePath: /opt/buildhome/.nvm/versions/node/v22.23.2/bin/node
10:25:09 PM:   repositoryRoot: /opt/build/repo
10:25:09 PM:   saveConfig: true
10:25:09 PM:   sendStatus: true
10:25:09 PM:   siteId: b1d90c94-36a1-4292-9fc6-705bef72e684
10:25:09 PM:   statsd:
10:25:09 PM:     host: 172.16.5.1
10:25:09 PM:     port: 8125
10:25:09 PM:   systemLogFile: 3
10:25:09 PM:   testOpts:
10:25:09 PM:     silentLingeringProcesses: ""
10:25:09 PM:   tracing:
10:25:09 PM:     baggageFilePath: /tmp/nf-tracing-1560103834/baggage.dump
10:25:09 PM:     enabled: "true"
10:25:09 PM:     host: 172.16.5.1
10:25:09 PM:     parentSpanId: 81634f8ffcfa1e0f
10:25:09 PM:     preloadingEnabled: "true"
10:25:09 PM:     sampleRate: 1
10:25:09 PM:     traceFlags: "01"
10:25:09 PM:     traceId: 1e9439edee397b0db24ccb2dbc0720a4
10:25:09 PM:
10:25:09 PM: ❯ UI build settings
10:25:09 PM: baseRelDir: true
10:25:09 PM: build:
10:25:09 PM:   command: npm run build
10:25:09 PM:   environment:
10:25:09 PM:     - GEMINI_API_KEY
10:25:09 PM:     - INCOMING_HOOK_BODY
10:25:09 PM:     - INCOMING_HOOK_TITLE
10:25:09 PM:     - INCOMING_HOOK_URL
10:25:09 PM:     - LISTMONK_API_PASS
10:25:09 PM:     - LISTMONK_API_USER
10:25:09 PM:     - LISTMONK_LIST_ID
10:25:09 PM:     - NETLIFY_BUILD_DEBUG
10:25:09 PM:   publish: dist/
10:25:09 PM:
10:25:09 PM: ❯ Resolved build environment
10:25:09 PM: branch: dev
10:25:09 PM: buildDir: /opt/build/repo
10:25:09 PM: configPath: /opt/build/repo/netlify.toml
10:25:09 PM: context: branch-deploy
10:25:09 PM: env: []
10:25:09 PM:
10:25:09 PM: ❯ Resolved config
10:25:09 PM: build:
10:25:09 PM:   command: npm run build
10:25:09 PM:   commandOrigin: ui
10:25:09 PM:   environment:
10:25:09 PM:     - GEMINI_API_KEY
10:25:09 PM:     - INCOMING_HOOK_BODY
10:25:09 PM:     - INCOMING_HOOK_TITLE
10:25:09 PM:     - INCOMING_HOOK_URL
10:25:09 PM:     - LISTMONK_API_PASS
10:25:09 PM:     - LISTMONK_API_USER
10:25:09 PM:     - LISTMONK_LIST_ID
10:25:09 PM:     - NETLIFY_BUILD_DEBUG
10:25:09 PM:   publish: /opt/build/repo/dist
10:25:09 PM:   publishOrigin: ui
10:25:09 PM: functionsDirectory: /opt/build/repo/functions
10:25:09 PM: headers:
10:25:09 PM:   - for: /*
10:25:09 PM:     values:
10:25:09 PM:       X-Robots-Tag: noai, noimageai
10:25:09 PM: headersOrigin: config
10:25:09 PM: redirects:
10:25:09 PM:   - from: /api/feeds/:feed
10:25:09 PM:     to: /.netlify/functions/feeds?feed=:feed
10:25:09 PM:   - from: /portfolio
10:25:09 PM:     status: 301
10:25:09 PM:     to: /projects
10:25:09 PM: redirectsOrigin: config
10:25:09 PM:
10:25:09 PM: ❯ Current directory
10:25:09 PM:   /opt/build/repo
10:25:09 PM:
10:25:09 PM: ❯ Config file
10:25:09 PM:   /opt/build/repo/netlify.toml
10:25:09 PM:
10:25:09 PM: ❯ Resolved config
10:25:09 PM:   build:
10:25:09 PM:     command: npm run build
10:25:09 PM:     commandOrigin: ui
10:25:09 PM:     environment:
10:25:09 PM:       - GEMINI_API_KEY
10:25:09 PM:       - INCOMING_HOOK_BODY
10:25:09 PM:       - INCOMING_HOOK_TITLE
10:25:09 PM:       - INCOMING_HOOK_URL
10:25:09 PM:       - LISTMONK_API_PASS
10:25:09 PM:       - LISTMONK_API_USER
10:25:09 PM:       - LISTMONK_LIST_ID
10:25:09 PM:       - NETLIFY_BUILD_DEBUG
10:25:09 PM:     publish: /opt/build/repo/dist
10:25:09 PM:     publishOrigin: ui
10:25:09 PM:   functionsDirectory: /opt/build/repo/functions
10:25:09 PM:   headers:
10:25:09 PM:     - for: /*
10:25:09 PM:       values:
10:25:09 PM:         X-Robots-Tag: noai, noimageai
10:25:09 PM:   headersOrigin: config
10:25:09 PM:   redirects:
10:25:09 PM:     - from: /api/feeds/:feed
10:25:09 PM:       to: /.netlify/functions/feeds?feed=:feed
10:25:09 PM:     - from: /portfolio
10:25:09 PM:       status: 301
10:25:09 PM:       to: /projects
10:25:09 PM:   redirectsOrigin: config
10:25:09 PM:
10:25:09 PM: ❯ Context
10:25:09 PM:   branch-deploy
10:25:09 PM:
10:25:09 PM: ❯ Installing extensions
10:25:09 PM:    - neon
10:25:09 PM:
10:25:09 PM: ❯ Loading extensions
10:25:09 PM:    - neon
10:25:10 PM:
10:25:10 PM: neon-buildhooks (onPreBuild event)
10:25:10 PM: ────────────────────────────────────────────────────────────────
10:25:10 PM:
10:25:10 PM: Step starting.
10:25:10 PM: Step started.
10:25:10 PM: Plugin logic started.
10:25:10 PM: Plugin logic ended.
10:25:10 PM: Stop closing.
10:25:10 PM: Step ended.
10:25:10 PM: Step completed.
10:25:10 PM:
10:25:10 PM: (neon-buildhooks onPreBuild completed in 9ms)
10:25:10 PM: Build step duration: neon-buildhooks onPreBuild completed in 9ms
10:25:10 PM:
10:25:10 PM: Build command from Netlify app
10:25:10 PM: ────────────────────────────────────────────────────────────────
10:25:10 PM:
10:25:10 PM: $ npm run build
10:25:10 PM: > asher-land@2.0.0 build
10:25:10 PM: > conc "npm:prod:*"
10:25:11 PM: [11ty]
10:25:11 PM: [11ty] > asher-land@2.0.0 prod:11ty
10:25:11 PM: [11ty] > eleventy --config=eleventy.config.ts
10:25:11 PM: [11ty]
10:25:11 PM: [js]
10:25:11 PM: [js] > asher-land@2.0.0 prod:js
10:25:11 PM: [js] > vite build
10:25:11 PM: [js]
10:25:11 PM: [css]
10:25:11 PM: [css] > asher-land@2.0.0 prod:css
10:25:11 PM: [css] > postcss src/css/tailwind.css -o dist/css/styles.css
10:25:11 PM: [css]
10:25:11 PM: [pdf]
10:25:11 PM: [pdf] > asher-land@2.0.0 prod:pdf
10:25:11 PM: [pdf] > bash scripts/build-pdf.sh
10:25:11 PM: [pdf]
10:25:11 PM: [pdf] warning: unknown font family: vollkorn
10:25:11 PM: [pdf]    ┌─ src/_routes/cv/cv.typ:30:16
10:25:11 PM: [pdf]    │
10:25:11 PM: [pdf] 30 │ #set text(font: body-font, weight: "light", size: 10pt, features: (dlig: 1))
10:25:11 PM: [pdf]    │                 ^^^^^^^^^
10:25:11 PM: [pdf]
10:25:11 PM: [pdf] warning: unknown font family: warbler deck v1
10:25:11 PM: [pdf]    ┌─ src/_routes/cv/cv.typ:34:12
10:25:11 PM: [pdf]    │
10:25:11 PM: [pdf] 34 │   text(font: section-font, weight: "regular", size: 18pt, features: (titl: 1), it.body),
10:25:11 PM: [pdf]    │              ^^^^^^^^^^^^
10:25:11 PM: [pdf]
10:25:11 PM: [pdf] cv.pdf built
10:25:11 PM: [pdf] npm run prod:pdf exited with code 0
10:25:11 PM: [js] vite v8.1.5 building client environment for production...
10:25:11 PM: [js]
10:25:12 PM: transforming...✓ 13 modules transformed.
10:25:12 PM: [js] rendering chunks...
10:25:12 PM: [js] computing gzip size...
10:25:12 PM: [js] dist/js/images.js                  0.29 kB │ gzip: 0.22 kB
10:25:12 PM: [js] dist/islands/FeedFragment.js       0.33 kB │ gzip: 0.26 kB
10:25:12 PM: [js] dist/js/lightbox.js                0.57 kB │ gzip: 0.37 kB
10:25:12 PM: [js] dist/js/spamspan.js                1.31 kB │ gzip: 0.71 kB
10:25:12 PM: [js] dist/islands/EmailForm.js          1.86 kB │ gzip: 0.79 kB
10:25:12 PM: [js] dist/islands/ThemeSwitcher.js      3.10 kB │ gzip: 1.08 kB
10:25:12 PM: [js] dist/js/main.js                    6.66 kB │ gzip: 2.45 kB
10:25:12 PM: [js] dist/islands/Infinigif.js         10.45 kB │ gzip: 2.52 kB
10:25:12 PM: [js] dist/chunks/jsxRuntime.module.js  17.59 kB │ gzip: 6.22 kB
10:25:12 PM: [js]
10:25:12 PM: [js] ✓ built in 910ms
10:25:12 PM: [js] npm run prod:js exited with code 0
10:25:12 PM: [css] npm run prod:css exited with code 0
10:25:15 PM: [11ty] [11ty] Writing ./dist/feed.xml from ./src/_routes/feed.njk
10:25:15 PM: [11ty] [11ty] Writing ./dist/og/20260306-AI.png from ./src/_routes/og.11ty.js
10:25:15 PM: [11ty] [11ty] Writing ./dist/og/20260513-ai.png from ./src/_routes/og.11ty.js
10:25:15 PM: [11ty] [11ty] Writing ./dist/og/arcade.png from ./src/_routes/og.11ty.js
10:25:15 PM: [11ty] [11ty] Writing ./dist/og/gora.png from ./src/_routes/og.11ty.js
10:25:15 PM: [11ty] [11ty] Writing ./dist/og/interstice.png from ./src/_routes/og.11ty.js
10:25:15 PM: [11ty] [11ty] Writing ./dist/og/paper-lampshade.png from ./src/_routes/og.11ty.js
10:25:15 PM: [11ty] [11ty] Writing ./dist/og/wescam.png from ./src/_routes/og.11ty.js
10:25:15 PM: [11ty] [11ty] Writing ./dist/og/home.png from ./src/_routes/og.11ty.js
10:25:15 PM: [11ty] [11ty] Writing ./dist/og/blog.png from ./src/_routes/og.11ty.js
10:25:15 PM: [11ty] [11ty] Writing ./dist/og/projects.png from ./src/_routes/og.11ty.js
10:25:15 PM: [11ty] [11ty] Writing ./dist/og/cv.png from ./src/_routes/og.11ty.js
10:25:15 PM: [11ty] [11ty] Writing ./dist/og/about.png from ./src/_routes/og.11ty.js
10:25:15 PM: [11ty] [11ty] Writing ./dist/og/index.png from ./src/_routes/og.11ty.js
10:25:15 PM: [11ty] [11ty] Writing ./dist/og/travel.png from ./src/_routes/og.11ty.js
10:25:15 PM: [11ty] [11ty] Writing ./dist/og/colophon.png from ./src/_routes/og.11ty.js
10:25:15 PM: [11ty] [11ty] Writing ./dist/home/index.html from ./src/_routes/home.njk
10:25:15 PM: [11ty] [11ty] Writing ./dist/index.html from ./src/_routes/index.njk
10:25:15 PM: [11ty] [11ty] Writing ./dist/blog/ai/index.html from ./src/_routes/[tag].njk
10:25:15 PM: [11ty] [11ty] Writing ./dist/blog/index.html from ./src/_routes/blog.njk
10:25:15 PM: [11ty] [11ty] Writing ./dist/projects/index.html from ./src/_routes/projects.njk
10:25:15 PM: [11ty] [11ty] Writing ./dist/cv/index.html from ./src/_routes/cv/cv.njk
10:25:15 PM: [11ty] [11ty] Writing ./dist/travel/index.html from ./src/_routes/travel.md (njk)
10:25:15 PM: [11ty] [typography] ./src/_routes/travel.md:121:1 — ... => ... (prh)
10:25:15 PM: [11ty] [typography] ./src/_routes/travel.md:123:1 — ... => ... (prh)
10:25:15 PM: [11ty] [typography] ./src/_routes/travel.md:128:1 — ... => ... (prh)
10:25:15 PM: [11ty] [typography] ./src/_routes/travel.md:138:55 — e's => e’s (prh)
10:25:16 PM: [11ty] [11ty] Writing ./dist/blog/20260306-AI/index.html from ./src/_routes/blog/20260306-AI.md (njk)
10:25:16 PM: [11ty] [11ty] Writing ./dist/blog/20260513-ai/index.html from ./src/_routes/blog/202605
10:25:16 PM: [11ty] [11ty] Writing ./dist/projects/arcade/index.html from ./src/_routes/projects/arcade.md (njk)
10:25:16 PM: [11ty] [11ty] Writing ./dist/projects/gora/index.html from ./src/_routes/projects/gora.
10:25:16 PM: [11ty] [11ty] Writing ./dist/projects/interstice/index.html from ./src/_routes/projects/interstice.md (njk)
10:25:16 PM: [11ty] [11ty] Writing ./dist/projects/paper-lampshade/index.html from ./src/_routes/pro(njk)
10:25:16 PM: [11ty] [11ty] Writing ./dist/projects/wescam/index.html from ./src/_routes/projects/wescam.md (njk)
10:25:16 PM: [11ty] [11ty] Writing ./dist/404.html from ./src/_routes/404.md (njk)
10:25:16 PM: [11ty] [11ty] Writing ./dist/about/index.html from ./src/_routes/about.md (njk)
10:25:16 PM: [11ty] [11ty] Writing ./dist/colophon/index.html from ./src/_routes/colophon.md (njk)
10:25:16 PM: [11ty] [typography] ./src/_routes/projects/gora.md:120:71 — -- => — (prh)
10:25:16 PM: [11ty] [typography] ./src/_routes/projects/interstice.md:326:23 — Incorrect quote used:quotes)
10:25:16 PM: [11ty] [typography] ./src/_routes/projects/gora.md:120:85 — -- => — (prh)
10:25:16 PM: [11ty] [typography] ./src/_routes/projects/gora.md:218:95 — 6-0 => 6–0 (prh)
10:25:16 PM: [11ty] [typography] ./src/_routes/projects/gora.md:218:98 — 5-3 => 5–3 (prh)
10:25:16 PM: [11ty] [typography] ./src/_routes/projects/gora.md:234:1 — Incorrect term: "Website”, uology)
10:25:16 PM: [11ty] [typography] ./src/_routes/projects/interstice.md:188:47 — 8-2 => 8–2 (prh)
10:25:16 PM: [11ty] [typography] ./src/_routes/projects/paper-lampshade.md:126:23 — Incorrect quote ead (quotes)
10:25:16 PM: [11ty] [typography] ./src/_routes/projects/wescam.md:114:181 — Incorrect term: "built in”, use "built-in” instead (terminology)
10:25:16 PM: [11ty] [typography] ./src/_routes/projects/wescam.md:160:23 — Incorrect quote used: `1"es)
10:25:16 PM: [11ty] [typography] ./src/_routes/colophon.md:120:111 — Incorrect term: "website”, use "site” instead (terminology)
10:25:16 PM: [11ty] [11ty] Writing ./dist/blog/projects/index.html from ./src/_routes/[tag].njk
10:25:16 PM: [11ty] [11ty] Benchmark    436ms   9%    36× (Configuration) "transformHtml" Transform
10:25:16 PM: [11ty] [11ty] Copied 271 Wrote 34 files in 4.88 seconds (143.5ms each, v3.1.6)
10:25:16 PM: [11ty] npm run prod:11ty exited with code 0
10:25:16 PM:
10:25:16 PM: (build.command completed in 5.6s)
10:25:16 PM: Build step duration: build.command completed in 5678ms
10:25:16 PM:
10:25:16 PM: Functions bundling
10:25:16 PM: ────────────────────────────────────────────────────────────────
10:25:16 PM:
10:25:16 PM: Packaging Functions from functions directory:
10:25:16 PM:  - feeds.ts
10:25:16 PM:  - submission-created.ts
10:25:16 PM:
10:25:16 PM: {"msg":"Functions bundling completed successfully","bundlers":["nft"],"bundlerCounts":{"nft":2},"fallbackCount":0,"warningsCount":0,"functions":[{"name":"feeds","runtime":"js","bundler":"nft","bundlerReason":"v2-n
ft","sizeBytes":430639,"hadFallback":false,"hadWarnings":false},{"name":"submission-created","runtimbundlerReason":"v2-nft","sizeBytes":339216,"hadFallback":false,"hadWarnings":false}]}
10:25:16 PM:
10:25:16 PM: (Functions bundling completed in 387ms)
10:25:16 PM: Build step duration: Functions bundling completed in 387ms
10:25:16 PM: {"passedSecretKeys":["LISTMONK_API_PASS","GEMINI_API_KEY"],"buildDir":"/opt/build/repo"
10:25:17 PM: {"secretsScanFoundSecrets":false,"enhancedSecretsScanFoundSecrets":false,"secretsScanMatchesCount":0,"enhancedSecretsScanMatchesCount":0,"secretsFilesCount":431,"keysToSearchFor":["LISTMONK_API_PASS","GEMINI_API_K
EY"],"enhancedPrefixMatches":[],"enhancedScanning":false}
10:25:17 PM:
10:25:17 PM: Scanning for secrets in code and build output.
10:25:17 PM: ────────────────────────────────────────────────────────────────
10:25:17 PM:
10:25:17 PM: Secrets scanning complete. 431 file(s) scanned. No secrets detected in build output or repo code!
10:25:17 PM:
10:25:17 PM: (Secrets scanning completed in 549ms)
10:25:17 PM: Build step duration: Secrets scanning completed in 549ms
10:25:17 PM:
10:25:17 PM: Deploy site
10:25:17 PM: ────────────────────────────────────────────────────────────────
10:25:17 PM:
10:25:17 PM:
10:25:17 PM: ❯ Uploaded config
10:25:17 PM:   [functions]
10:25:17 PM:     directory = "functions"
10:25:17 PM:
10:25:17 PM:   # Netlify Image CDN may only transform remote sources that are allowlisted.
10:25:17 PM:   [images]
10:25:17 PM:     remote_images = ["^https://cdn\\.asher\\.land/.*"]
10:25:17 PM:
10:25:17 PM:   [dev]
10:25:17 PM:     command = "bun run start"
10:25:17 PM:
10:25:17 PM:   [[redirects]]
10:25:17 PM:     from = "/api/feeds/:feed"
10:25:17 PM:     to = "/.netlify/functions/feeds?feed=:feed"
10:25:17 PM:
10:25:17 PM:   [[redirects]]
10:25:17 PM:     from = "/portfolio"
10:25:17 PM:     to = "/projects"
10:25:17 PM:     status = 301
10:25:17 PM:
10:25:17 PM:   [[headers]]
10:25:17 PM:     for = "/*"
10:25:17 PM:     [headers.values]
10:25:17 PM:       X-Robots-Tag = "noai, noimageai"
10:25:17 PM:
10:25:17 PM: ❯ Uploaded headers
10:25:17 PM:   No headers
10:25:17 PM:
10:25:17 PM: ❯ Uploaded redirects
10:25:17 PM:   No redirects

10:25:17 PM: Starting to deploy site from 'dist'
10:25:17 PM: Calculating files to upload
10:25:20 PM: 2 new file(s) to upload
10:25:20 PM: 2 new function(s) to upload
10:25:26 PM: Starting post processing
10:25:26 PM: Post processing - Forms
10:25:26 PM: Section completed: deploying
10:25:26 PM: Site deploy was successfully initiated
10:25:26 PM:
10:25:26 PM: (Deploy site completed in 9.6s)
10:25:26 PM: Build step duration: Deploy site completed in 9619ms
10:25:26 PM: Step starting.
10:25:26 PM: Step started.
10:25:27 PM: Processing form - subscribe
10:25:27 PM: Detected form fields:
 - bot-field
 - email
10:25:27 PM: Post processing - header rules
10:25:27 PM: Post processing - redirect rules
10:25:27 PM: Post processing done
10:25:27 PM: Section completed: postprocessing
10:25:27 PM: Step ended.
10:25:27 PM:
10:25:27 PM: Netlify Build Complete
10:25:27 PM: ────────────────────────────────────────────────────────────────
10:25:27 PM:
10:25:27 PM: (Netlify Build completed in 18.3s)
10:25:27 PM: Build step duration: Netlify Build completed in 18310ms
10:25:27 PM: Caching artifacts
10:25:27 PM: Section completed: building
10:25:28 PM: Site is live ✨
10:25:31 PM: Uploading cache of size 895.0MB
10:25:32 PM: Section completed: cleanup
10:25:33 PM: Finished processing build request in 1m10.369s

Trying to get an image through Netlify:

https://dev--asher-land.netlify.app/.netlify/images?url=https%3A%2F%2Fcdn.asher.land%2Fsite%2Favi.png%3Fv%3D63c49592&w=100

{"code":400,"msg":"url (https://cdn.asher.land/site/avi.png?v=63c49592) is not an allowed pattern"}

And no X-Robots-Tag header on any response. Deploy summary says “No header rules processed.”

Build log looks fine… The “Resolved config” section shows my headers with headersOrigin: config, and “Uploaded config” prints the whole toml including:

[images]
  remote_images = ["^https://cdn\\.asher\\.land/.*"]

[[headers]]
  for = "/*"
  [headers.values]
    X-Robots-Tag = "noai, noimageai"

So the build reads and uploads the config, and then it just doesn’t apply..?

Things I’ve already tried:

  • _headers file in the publish directory: uploaded, ignored.
  • Frameworks API (.netlify/v1/config.json with images.remote_images): same.
  • Double-checked the regex escaping against the docs.
  • Ran netlify serve locally (works).

(The _headers and Frameworks API attempts were a later deploy, 6a97959c6ad20500082774f6, which failed the same way.)

Working:

  • If I upload the exact same build with netlify deploy --no-build --dir dist, the header shows up and the transform returns 200.
  • Creating a new project on the same team, linked to the same repo and branch. CI build: header present, transform 200, redirects fine. Same repo, same config, same account. Only this project misbehaves.

Build settings on the old site: base directory empty, build command npm run build, publish dist/, functions in functions/ via toml. Build image is noble.

I found an older thread with the same “No header rules processed” symptom that got fixed on your side (_headers file not working), which is what makes me hopeful this is something you can flip. Is there anything site-level that would cause Git-built deploys to drop headers and image settings while CLI deploys keep them?

Thanks so much.