diff --git a/changelog.d/nonascii-tags.fix b/changelog.d/nonascii-tags.fix
new file mode 100644
index 0000000000000000000000000000000000000000..e4c6dc82d35365dd17fdfec07094ee3f47b4a2d1
--- /dev/null
+++ b/changelog.d/nonascii-tags.fix
@@ -0,0 +1 @@
+Fix parsing non-ascii tags
diff --git a/src/services/matcher/matcher.service.js b/src/services/matcher/matcher.service.js
index b6c4e909960b0512b333e6da5f4e44b626257bbb..54f02d312502d616fbc6f664f87584d6ef27fc5a 100644
--- a/src/services/matcher/matcher.service.js
+++ b/src/services/matcher/matcher.service.js
@@ -14,8 +14,11 @@ export const mentionMatchesUrl = (attention, url) => {
  * @param {string} url
  */
 export const extractTagFromUrl = (url) => {
-  const regex = /tag[s]*\/(\w+)$/g
-  const result = regex.exec(url)
+  const decoded = decodeURI(url)
+  // https://git.pleroma.social/pleroma/elixir-libraries/linkify/-/blob/master/lib/linkify/parser.ex
+  // https://www.pcre.org/original/doc/html/pcrepattern.html
+  const regex = /tag[s]*\/([\p{L}\p{N}_]*[\p{Alphabetic}_·\u{200c}][\p{L}\p{N}_·\p{M}\u{200c}]*)$/ug
+  const result = regex.exec(decoded)
   if (!result) {
     return false
   }
diff --git a/test/unit/specs/services/matcher/matcher.spec.js b/test/unit/specs/services/matcher/matcher.spec.js
index 7a2494f074e762abb7279b886771ba6e9a1e6a72..c6e9719d3d0b66a902ee624e3aaf5d9895e7065c 100644
--- a/test/unit/specs/services/matcher/matcher.spec.js
+++ b/test/unit/specs/services/matcher/matcher.spec.js
@@ -78,5 +78,11 @@ describe('MatcherService', () => {
 
       expect(MatcherService.extractTagFromUrl(url)).to.eql(false)
     })
+
+    it('should return tag name from non-ascii tags', () => {
+      const url = encodeURI('https://website.com/tag/喵喵喵')
+
+      expect(MatcherService.extractTagFromUrl(url)).to.eql('喵喵喵')
+    })
   })
 })