Troubleshooting Mastodon Backfeed and Stale Webmentions
Automating syndication was the easy part. Getting reaction backfeed and cleanup behavior right needed a lot more care.
This is the practical checklist that emerged from debugging real failures.
Outside the authorized scopes
If Mastodon returns:
{"error":"This action is outside the authorized scopes"}
the access token is missing required permissions.
For script-based posting, use a token with at least:
write:statuseswrite:media
Also avoid unnecessary API calls that need extra scopes. In this case, removing verify_credentials from the post flow eliminated avoidable scope failures.
Backfeed not appearing on Bridgy
A common trap: interacting with the syndicated post before the site is redeployed with the matching u-syndication link.
If Bridgy cannot map the social interaction back to the canonical page URL, it may show no responses.
Fix sequence:
- deploy first so
Shared on Mastodonis live on the page - use Bridgy
Poll now/Crawl now - if needed, trigger
Resend for post - retry interaction
Canonical URL mismatch (trailing slash)
webmention.io target matching is exact.
.../hello-world and .../hello-world/ are different targets.
When debugging, always test with the canonical URL from the page (including trailing slash), otherwise you can read an empty result and chase the wrong issue.
429 Too many requests on media uploads
Large backfills can saturate media API limits.
The syndication script now retries media uploads with backoff and honors Retry-After when present. Status posting continues even if media ultimately fails, so backfill progress is not blocked by images.
5 Deleted likes/reposts still visible
This is the most annoying one. Deletions do not always propagate cleanly through every layer.
webmention.io may still contain old reactions, and source URLs can stay HTTP 200 even when the interaction itself no longer exists.
The fix is source re-validation at interaction level, not just URL existence:
- Mastodon: validate
favorited-by/reblogged-byagainst status interaction APIs - Bluesky: validate
liked_by/reposted_byagainst public API lists - Replies: validate source post existence directly via platform APIs
If the upstream interaction or source post is gone, it is filtered out from display automatically.
Client refresh not removing stale UI
Even with correct filtering, UI can stay stale if client refresh only handles additions.
The webmentions component now tracks current count and re-renders on both directions:
- new mentions added
- existing mentions removed
This makes deletions visible without manual dashboard cleanup.
A practical debugging order
When something looks wrong, this order reduces noise:
- verify the canonical target URL
- inspect filtered local endpoint output
- check source interaction/post existence upstream
- trigger Bridgy poll/crawl
- only then touch manual dashboard deletion
Most “it still shows” issues are usually one of these five, not a rendering bug.