diff --git a/lib/jf2-to-as2.js b/lib/jf2-to-as2.js
index 4168644..d5d402b 100644
--- a/lib/jf2-to-as2.js
+++ b/lib/jf2-to-as2.js
@@ -32,7 +32,12 @@ function linkifyUrls(html) {
if (!html) return html;
return html.replace(
/(?])(https?:\/\/[^\s<"]+)/g,
- '$1',
+ (_, url) => {
+ // Strip trailing punctuation that is almost never part of a URL
+ // e.g. "See https://example.com." → link to https://example.com
+ const clean = url.replace(/[.,;:!?)\]'"]+$/, "");
+ return `${clean}`;
+ },
);
}
diff --git a/lib/mastodon/routes/statuses.js b/lib/mastodon/routes/statuses.js
index a074e72..7d39aa4 100644
--- a/lib/mastodon/routes/statuses.js
+++ b/lib/mastodon/routes/statuses.js
@@ -1066,7 +1066,11 @@ function processStatusContent(content, rawText) {
// Linkify bare URLs (http/https)
html = html.replace(
/(https?:\/\/[^\s<>"')\]]+)/g,
- '$1',
+ (_, url) => {
+ // Strip trailing punctuation that is almost never part of a URL
+ const clean = url.replace(/[.,;:!?]+$/, "");
+ return `${clean}`;
+ },
);
// Convert @user@domain mentions to profile links