Troubleshooting
Health is degraded
The issues array lists missing or invalid fields. Common causes:
COMMENTS_SECRETshorter than 32 bytes- Empty
ALLOWED_ORIGINS MODERATION_REQUIREDis not exactlytrueorfalse- Moderation on but no complete mail provider
Comments do not load
- Check
git.readable - Check
COMMENTS_REPOspelling and case - Check the PAT includes that repository
- Private repositories work as long as the PAT has Contents: Read
Approved comment is not visible
Reads are cached for up to 60 seconds. If it still does not appear:
- Confirm
comments/<slug>.jsonchanged in the repository - Confirm the widget
postmatches the normalized slug - Clear browser cache
Approve returns 403
origin_not_allowed: the submitting origin was removed fromALLOWED_ORIGINS- GitHub 403: PAT scope or repository mismatch, or the token was revoked
Approve returns 409
A comment with the same id exists with different content. Existing comments are never overwritten; edit the file manually if you really need to replace it.
Submit returns 429
More than 5 submissions from the same IP within 10 minutes. Wait for the window to pass.
Turnstile always fails (when enabled)
- Site key and secret must come from the same Turnstile widget
- Verify the blog domain is listed on that widget
- Tokens are single-use; refresh before retrying
- If neither key is set, the captcha is intentionally off
- The blog domain must be listed on that widget
- Tokens are single-use; refresh before retrying
No review email
- Verify the sending domain in Resend or MailPort
- Check the provider logs
- Check spam
- For MailPort, confirm the moderator domain is allowlisted
Review link expired
Links last 7 days. Ask the commenter to submit again.
Same-repo mode redeploys constantly
Configure the platform's skip-build rule to exclude comments/, as described in Storage location.
Old links break after rotating the secret
Expected. Rotating COMMENTS_SECRET invalidates every unused review link.
