[codex] fix Ahrefs 404 links and redirects#635
Conversation
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (1)
📝 WalkthroughWalkthroughAdded a Cloudflare Workers redirect handler and worker config, updated many docs/blog internal links and static redirects to new doc routes, adjusted site navigation and plugin README generation, and ensured the docs sync script always copies ChangesDocs & Routing Migration + Worker Redirects
Sequence DiagramsequenceDiagram
participant Client as Client
participant Worker as Worker (Cloudflare)
participant Assets as Assets (ASSETS binding)
Client->>Worker: HTTP request (URL)
Worker->>Worker: parse pathname, lookup redirectMap
alt redirect found
Worker->>Client: 301/302 redirect to new URL
else not found
Worker->>Assets: env.ASSETS.fetch(request)
Assets-->>Worker: Response (static/content)
Worker-->>Client: Relay Response
end
Estimated Code Review Effort🎯 3 (Moderate) | ⏱️ ~45 minutes Possibly Related PRs
Poem
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 59802dd7d3
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
Actionable comments posted: 7
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@apps/docs/src/content/docs/docs/getting-started/add-an-app.mdx`:
- Line 60: Update the user-facing sentence on the page so it reads correctly:
change "See all option available" to "See all options available" and "This
information will be infer if not provided." to "This information will be
inferred if not provided." so the link text and the note are grammatically
correct (update the string that contains that sentence near the existing link to
/docs/plugins/updater/settings/).
In `@apps/docs/src/content/docs/docs/plugins/electron-updater/index.mdx`:
- Line 103: The link label "[Migration from Capacitor]" points to
"/docs/plugins/electron-updater/getting-started/" which is a semantic mismatch;
either change the link target to the correct migration doc (e.g., replace
"/docs/plugins/electron-updater/getting-started/" with the migration page path)
or change the label to "Getting started" so the label matches the existing
destination—update the markdown link text "[Migration from Capacitor]" or the
URL accordingly.
In
`@apps/web/src/content/blog/en/capacitor-ota-updates-app-store-approval-guide.md`:
- Line 153: The link in this English article points to the Italian docs path
"/it/docs/getting-started/deploy/"; update the URL to the English docs path
(replace "/it/" with "/en/") so the anchor text "update management" in the
content points to the correct locale; locate the string that contains
"https://capgo.app/it/docs/getting-started/deploy/" and change it to
"https://capgo.app/en/docs/getting-started/deploy/".
In
`@apps/web/src/content/blog/en/capgo-vs-appflow-deployment-solutions-compared.md`:
- Line 36: The anchor text "secure updates" in the sentence containing the link
to https://capgo.app/docs/live-updates/differentials/ should be aligned with the
linked doc topic: either change the anchor text to "differential updates" (so
the text matches the differencing/delta delivery doc) or replace the URL with a
Capgo security-focused doc and keep "secure updates"; update the markdown
sentence where that link appears to ensure anchor text and target document match
(search for the string "secure updates" in the blog post to locate and edit).
- Line 24: The Appflow CI/CD claim in the markdown line containing "**Appflow**:
Proprietary, cloud-only, higher costs ($5,000/year for some teams), and
[built-in CI/CD](https://capgo.app/blog/setup-ci-and-cd-in-gitlab/)." uses a
Capgo GitLab CI/CD link that doesn't support the Appflow statement; update that
line by replacing the current Capgo link with an Appflow-specific source that
documents Appflow's built-in CI/CD (or remove the bracketed link entirely) so
the text "Appflow" and its claim are either substantiated by a correct Appflow
URL or left unlinked.
In `@apps/web/src/content/blog/en/staged-rollouts-vs-full-releases-comparison.md`:
- Line 92: Replace the incorrect target URL for the "Automatic Updates" link
(the table row containing "**[Automatic
Updates](https://capgo.app/docs/getting-started/add-an-app/)**") with the
auto-update specific docs URL used elsewhere
(https://capgo.app/docs/plugins/updater/self-hosted/auto-update/) so the link
text "Automatic Updates" points to the correct auto-update documentation.
In `@apps/web/src/pages/solutions/production-updates.astro`:
- Line 763: The SVG with class "h-5 w-5 text-blue-400" in the related-card (line
shown in the diff) is decorative and should be marked as such: add
aria-hidden="true" (and optionally focusable="false") to that <svg> element so
screen readers ignore it; update the SVG element attributes in the related-card
markup accordingly.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: 071b5a67-55da-42d0-ba72-8fd7c00ee61b
📒 Files selected for processing (182)
apps/docs/astro.config.mjsapps/docs/src/content/docs/docs/cli/cloud-build/credentials.mdxapps/docs/src/content/docs/docs/cli/cloud-build/getting-started.mdxapps/docs/src/content/docs/docs/cli/cloud-build/troubleshooting.mdxapps/docs/src/content/docs/docs/faq.mdxapps/docs/src/content/docs/docs/getting-started/add-an-app.mdxapps/docs/src/content/docs/docs/live-updates/encryption.mdxapps/docs/src/content/docs/docs/live-updates/features.mdxapps/docs/src/content/docs/docs/plugins/electron-updater/index.mdxapps/docs/src/content/docs/docs/plugins/social-login/firebase/google/android.mdxapps/docs/src/content/docs/docs/plugins/social-login/firebase/google/ios.mdxapps/docs/src/content/docs/docs/plugins/social-login/firebase/introduction.mdxapps/docs/src/content/docs/docs/plugins/social-login/supabase/Apple/android.mdxapps/docs/src/content/docs/docs/plugins/social-login/supabase/Apple/ios.mdxapps/docs/src/content/docs/docs/plugins/social-login/supabase/Apple/web.mdxapps/docs/src/content/docs/docs/plugins/social-login/supabase/introduction.mdxapps/docs/src/content/docs/docs/plugins/updater/events.mdxapps/docs/src/content/docs/docs/plugins/updater/local-dev/cli.mdxapps/docs/src/content/docs/docs/plugins/updater/self-hosted/auto-update.mdxapps/docs/src/content/docs/docs/plugins/updater/self-hosted/getting-started.mdxapps/docs/src/content/docs/docs/plugins/updater/self-hosted/handling-channels.mdxapps/docs/src/content/docs/docs/plugins/updater/self-hosted/handling-stats.mdxapps/docs/src/content/docs/docs/plugins/updater/self-hosted/handling-updates.mdxapps/docs/src/worker/index.tsapps/docs/wrangler.jsoncapps/web/public/_redirectsapps/web/public/plugins-readme.mdapps/web/src/content/blog/en/5-common-ota-update-mistakes-to-avoid.mdapps/web/src/content/blog/en/5-steps-to-deploy-hotfixes-with-capgo.mdapps/web/src/content/blog/en/5-steps-to-distribute-custom-capacitor-plugins.mdapps/web/src/content/blog/en/android-setup-for-capacitor-apps.mdapps/web/src/content/blog/en/api-rate-limiting-for-app-store-compliance.mdapps/web/src/content/blog/en/app-store-metadata-what-developers-must-know.mdapps/web/src/content/blog/en/app-store-vs-direct-updates-what-developers-need-to-know.mdapps/web/src/content/blog/en/appcenter-migration.mdapps/web/src/content/blog/en/apple-policy-updates-for-capacitor-apps-2025.mdapps/web/src/content/blog/en/automated-consent-tracking-for-capacitor-apps.mdapps/web/src/content/blog/en/automatic-capacitor-android-build-github-action.mdapps/web/src/content/blog/en/automatic-capacitor-ios-build-github-action.mdapps/web/src/content/blog/en/automating-ci-cd-with-conventional-commits.mdapps/web/src/content/blog/en/best-practices-for-capacitor-script-automation.mdapps/web/src/content/blog/en/capacitor-app-initialization-step-by-step-guide.mdapps/web/src/content/blog/en/capacitor-apps-and-data-sharing-policies.mdapps/web/src/content/blog/en/capacitor-apps-and-russias-data-laws-compliance-tips.mdapps/web/src/content/blog/en/capacitor-build-pipelines-ios-vs-android.mdapps/web/src/content/blog/en/capacitor-changelog-management-ultimate-guide.mdapps/web/src/content/blog/en/capacitor-cicd-plugins-vs-appflow-key-differences.mdapps/web/src/content/blog/en/capacitor-cli-commands-for-version-updates.mdapps/web/src/content/blog/en/capacitor-cli-plugin-commands-overview.mdapps/web/src/content/blog/en/capacitor-cli-project-setup-guide.mdapps/web/src/content/blog/en/capacitor-live-updates-handling-version-conflicts.mdapps/web/src/content/blog/en/capacitor-live-updates-staying-compliant-with-apple.mdapps/web/src/content/blog/en/capacitor-native-bridge-android-plugin-basics.mdapps/web/src/content/blog/en/capacitor-ota-updates-app-store-approval-guide.mdapps/web/src/content/blog/en/capacitor-ota-updates-best-practices-for-performance.mdapps/web/src/content/blog/en/capacitor-ota-updates-cloud-hosting-options-compared.mdapps/web/src/content/blog/en/capacitor-ota-updates-debugging-issues.mdapps/web/src/content/blog/en/capacitor-ota-updates-security-tips.mdapps/web/src/content/blog/en/capacitor-ota-updates-staying-compliant.mdapps/web/src/content/blog/en/capacitor-ota-updates-targeting-ios-vs-android.mdapps/web/src/content/blog/en/capacitor-ota-updates-use-cases-explained.mdapps/web/src/content/blog/en/capacitor-ota-updates-version-targeting-explained.mdapps/web/src/content/blog/en/capacitor-ota-updates-versioning-best-practices.mdapps/web/src/content/blog/en/capacitor-ota-updates-vs-app-store-restrictions.mdapps/web/src/content/blog/en/capacitor-ota-updates-vs-traditional-testing-methods.mdapps/web/src/content/blog/en/capacitor-ota-updates-vs-traditional-versioning.mdapps/web/src/content/blog/en/capacitor-patch-management-ios-vs-android.mdapps/web/src/content/blog/en/capacitor-plugin-options-for-ota-updates.mdapps/web/src/content/blog/en/capacitor-plugins-for-secure-session-management.mdapps/web/src/content/blog/en/capacitor-plugins-what-you-need-to-know.mdapps/web/src/content/blog/en/capacitor-vs-appflow-ota-update-solutions-compared.mdapps/web/src/content/blog/en/capacitor-vs-appflow-versioning-differences.mdapps/web/src/content/blog/en/capgo-for-app-store-safe-ota-updates.mdapps/web/src/content/blog/en/capgo-integration-with-github-actions-guide.mdapps/web/src/content/blog/en/capgo-ota-updates-vs-manual-submissions.mdapps/web/src/content/blog/en/capgo-plugin-for-custom-event-tracking.mdapps/web/src/content/blog/en/capgo-plugin-lightweight-deployment-for-capacitor-apps.mdapps/web/src/content/blog/en/capgo-plugin-scheduling-updates-tutorial.mdapps/web/src/content/blog/en/capgo-vs-appflow-deployment-solutions-compared.mdapps/web/src/content/blog/en/ccpa-compliance-for-mobile-apps.mdapps/web/src/content/blog/en/checklist-for-cybersecurity-compliance-in-china.mdapps/web/src/content/blog/en/checklist-for-google-play-ota-compliance.mdapps/web/src/content/blog/en/checklist-for-validating-capacitor-app-updates.mdapps/web/src/content/blog/en/chinas-cybersecurity-law-impact-on-app-updates.mdapps/web/src/content/blog/en/chinas-data-privacy-laws-impact-on-mobile-apps.mdapps/web/src/content/blog/en/common-cicd-bottlenecks-in-ota-pipelines.mdapps/web/src/content/blog/en/compliance-checks-in-cicd-for-capacitor-apps.mdapps/web/src/content/blog/en/creating-and-deleting-update-channels-in-capacitor.mdapps/web/src/content/blog/en/cross-platform-uiux-best-practices-for-capacitor-apps.mdapps/web/src/content/blog/en/custom-ios-plugin-optimization-best-practices.mdapps/web/src/content/blog/en/development-vs-production-key-differences-in-capacitor-apps.mdapps/web/src/content/blog/en/firebase-crashlytics-for-capacitor-apps.mdapps/web/src/content/blog/en/fix-capacitor-plugin-build-errors-with-agp-9.mdapps/web/src/content/blog/en/fix-capacitor-version-mismatch-errors.mdapps/web/src/content/blog/en/fixing-build-failures-in-capacitor-ci-cd-pipelines.mdapps/web/src/content/blog/en/google-play-compliance-key-update-strategies.mdapps/web/src/content/blog/en/google-play-staged-rollouts-how-it-works.mdapps/web/src/content/blog/en/how-apple-enforces-ota-update-restrictions.mdapps/web/src/content/blog/en/how-background-tasks-work-in-capacitor.mdapps/web/src/content/blog/en/how-capacitor-bridges-web-and-native-code.mdapps/web/src/content/blog/en/how-capacitor-handles-platform-differences.mdapps/web/src/content/blog/en/how-capgo-handles-version-control-and-rollbacks.mdapps/web/src/content/blog/en/how-chinas-cybersecurity-law-impacts-app-developers.mdapps/web/src/content/blog/en/how-chinas-data-laws-impact-app-store-submissions.mdapps/web/src/content/blog/en/how-cicd-tools-trigger-ota-updates.mdapps/web/src/content/blog/en/how-delta-updates-reduce-payload-size.mdapps/web/src/content/blog/en/how-mobile-apps-stay-compliant-with-us-privacy-laws.mdapps/web/src/content/blog/en/how-native-bridge-works-in-capacitor-android-apps.mdapps/web/src/content/blog/en/how-ota-encryption-meets-app-store-compliance.mdapps/web/src/content/blog/en/how-ota-updates-affect-app-store-security.mdapps/web/src/content/blog/en/how-rbac-secures-ota-updates-in-capacitor-apps.mdapps/web/src/content/blog/en/how-to-add-alerts-to-ci-cd-pipelines.mdapps/web/src/content/blog/en/how-to-add-third-party-plugins-in-capacitor-apps.mdapps/web/src/content/blog/en/how-to-monitor-capacitor-app-updates.mdapps/web/src/content/blog/en/how-to-optimize-background-tasks-in-capacitor.mdapps/web/src/content/blog/en/how-to-optimize-capacitor-update-rollouts.mdapps/web/src/content/blog/en/how-to-release-major-version-in-capgo.mdapps/web/src/content/blog/en/how-to-schedule-ota-updates-for-capacitor-apps.mdapps/web/src/content/blog/en/how-to-secure-ota-updates-in-ci-cd-pipelines.mdapps/web/src/content/blog/en/how-to-track-ota-update-success-in-capacitor-apps.mdapps/web/src/content/blog/en/how-to-use-aar-files-in-capacitor-plugins.mdapps/web/src/content/blog/en/how-to-use-capacitor-cli-for-ota-updates.mdapps/web/src/content/blog/en/how-to-use-capgo-documentation-for-ota-updates.mdapps/web/src/content/blog/en/how-to-use-semantic-versioning-with-capgo-ota-updates.mdapps/web/src/content/blog/en/how-version-work-in-capgo.mdapps/web/src/content/blog/en/icp-filing-for-mobile-apps-in-china-step-by-step-guide.mdapps/web/src/content/blog/en/implementing-native-bridge-for-ios-in-capacitor.mdapps/web/src/content/blog/en/introducing-capgo-cloud-build.mdapps/web/src/content/blog/en/introducing-end-to-end-security-to-capacitor-updater-with-code-signing.mdapps/web/src/content/blog/en/live-updates-faq-answers-for-app-developers.mdapps/web/src/content/blog/en/monitor-ota-updates-in-capacitor-apps.mdapps/web/src/content/blog/en/npm-scripts-for-capacitor-ota-updates-explained.mdapps/web/src/content/blog/en/open-source-vs-proprietary-app-update-solutions.mdapps/web/src/content/blog/en/ota-updates-in-beta-staying-policy-compliant.mdapps/web/src/content/blog/en/ota-updates-in-cicd-security-and-compliance-tips.mdapps/web/src/content/blog/en/payment-data-security-for-app-store-approval.mdapps/web/src/content/blog/en/pci-dss-compliance-for-mobile-apps-key-requirements.mdapps/web/src/content/blog/en/phased-rollouts-for-capacitor-live-updates.mdapps/web/src/content/blog/en/pipeda-compliance-for-mobile-apps-in-canada.mdapps/web/src/content/blog/en/privacy-manifest-for-capacitor-apps-guide.mdapps/web/src/content/blog/en/privacy-manifest-for-ios-apps.mdapps/web/src/content/blog/en/quasar-mobile-app-capacitor.mdapps/web/src/content/blog/en/real-time-update-metrics-for-capacitor-apps.mdapps/web/src/content/blog/en/real-time-updates-with-user-segmentation.mdapps/web/src/content/blog/en/resource-allocation-for-ota-updates-best-practices.mdapps/web/src/content/blog/en/rollback-management-with-capgo-guide.mdapps/web/src/content/blog/en/rollback-mechanisms-in-capacitor-plugins.mdapps/web/src/content/blog/en/rollback-strategies-for-capacitor-live-updates.mdapps/web/src/content/blog/en/self-hosted-capgo.mdapps/web/src/content/blog/en/server-setup-for-capacitor-ota-updates.mdapps/web/src/content/blog/en/setting-up-capacitor-local-environment.mdapps/web/src/content/blog/en/setting-up-cicd-for-capacitor-apps.mdapps/web/src/content/blog/en/ssl-pinning-implementation-tools-and-plugins.mdapps/web/src/content/blog/en/staged-rollouts-vs-full-releases-comparison.mdapps/web/src/content/blog/en/staging-ota-updates-best-practices.mdapps/web/src/content/blog/en/state-privacy-laws-for-mobile-apps-comparison.mdapps/web/src/content/blog/en/testing-capacitor-ota-updates.mdapps/web/src/content/blog/en/third-party-libraries-apple-policy-compliance.mdapps/web/src/content/blog/en/top-6-tools-for-managing-app-updates-in-2025.mdapps/web/src/content/blog/en/top-tools-for-debugging-ota-updates-in-capacitor.mdapps/web/src/content/blog/en/top-tools-for-debugging-platform-specific-code-in-capacitor.mdapps/web/src/content/blog/en/ultimate-guide-to-animation-performance-in-capacitor-apps.mdapps/web/src/content/blog/en/ultimate-guide-to-app-store-compliant-ota-updates.mdapps/web/src/content/blog/en/ultimate-guide-to-capacitor-ota-updates.mdapps/web/src/content/blog/en/ultimate-guide-to-capacitor-plugin-development.mdapps/web/src/content/blog/en/ultimate-guide-to-debugging-capacitor-apps.mdapps/web/src/content/blog/en/ultimate-guide-to-ota-update-security-for-capacitor-apps.mdapps/web/src/content/blog/en/ultimate-guide-to-reducing-latency-in-capacitor-apps.mdapps/web/src/content/blog/en/understanding-apples-privacy-manifest.mdapps/web/src/content/blog/en/update-your-capacitor-apps-seamlessly-using-capacitor-updater.mdapps/web/src/content/blog/en/usage-frequency-segmentation-for-app-updates.mdapps/web/src/content/blog/en/user-consent-for-ota-updates-best-practices.mdapps/web/src/content/blog/en/version-control-tips-for-mobile-ci-cd.mdapps/web/src/content/blog/en/version-tagging-in-capacitor-apps.mdapps/web/src/content/blog/en/why-consent-management-matters-for-app-compliance.mdapps/web/src/pages/about.astroapps/web/src/pages/enterprise.astroapps/web/src/pages/solutions/cordova-to-capacitor.astroapps/web/src/pages/solutions/direct-updates.astroapps/web/src/pages/solutions/pr-preview.astroapps/web/src/pages/solutions/production-updates.astroscripts/generate-plugins-readme.ts
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@apps/docs/src/worker/index.ts`:
- Around line 14-165: The redirectRows array is missing parity redirects for two
routes; add four entries to redirectRows: ['/docs/self-hosted/auto-update',
'/docs/plugins/updater/self-hosted/auto-update/', 302] and
['/docs/self-hosted/auto-update/',
'/docs/plugins/updater/self-hosted/auto-update/', 302], and
['/docs/plugin/know-issues', '/docs/plugins/updater/commonproblems/', 302] and
['/docs/plugin/know-issues/', '/docs/plugins/updater/commonproblems/', 302] so
the Worker resolves the same redirects defined in _redirects; update the
redirectRows constant accordingly.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: de0ebdcc-7b8f-471b-abf3-61baf7d27b2d
📒 Files selected for processing (3)
apps/docs/src/worker/index.tsapps/web/public/_redirectsscripts/generate-plugins-readme.ts
🚧 Files skipped from review as they are similar to previous changes (1)
- scripts/generate-plugins-readme.ts
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@apps/docs/scripts/sync_public.ts`:
- Around line 107-109: The code currently seeds required assets into
referencedAssets from alwaysCopiedAssets but later silently skips missing
required files (causing false-success syncs); update the logic to validate all
required assets before copying: iterate alwaysCopiedAssets, check existence of
each required asset in the source (the same place/filesystem logic used later
for copy), and if any are missing throw an error or exit (do not continue
silently). Remove or replace the silent-continue path used when required assets
are absent, and only increment/report synced assets after the upfront validation
succeeds so referencedAssets and the synced count remain accurate.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: 1c215700-c5f0-43b2-9491-8078a8013dc0
📒 Files selected for processing (4)
apps/docs/scripts/sync_public.tsapps/web/public/_redirectsapps/web/src/content/blog/en/automatic-capacitor-android-build-github-action.mdapps/web/src/content/blog/en/automatic-capacitor-ios-build-github-action.md
✅ Files skipped from review due to trivial changes (3)
- apps/web/src/content/blog/en/automatic-capacitor-ios-build-github-action.md
- apps/web/src/content/blog/en/automatic-capacitor-android-build-github-action.md
- apps/web/public/_redirects
|



Summary
_redirects/docs/*paths because docs traffic is served before web_redirectsllms.txtandllms-full.txtthrough the docs workerValidation
bun run checkbun run buildbun run build:docsbunx wrangler deploy --dry-run --outdir .wrangler/dry-runfromapps/docsNote: the web build still prints the existing blog category route warnings, but exits successfully.
Summary by CodeRabbit
Documentation
Chores
Bug Fixes