diff --git a/theme/templates/macros/link.html b/theme/templates/macros/link.html
index 33abbadedbada11f6bc445a0ae9cfd646700208b..41172e60056fd9ca45dabbcd723e6f07df8e1a08 100644
--- a/theme/templates/macros/link.html
+++ b/theme/templates/macros/link.html
@@ -1,6 +1,19 @@
 {%- import 'macros/content_renderer.html' as content_renderer with context -%}
 {%- import 'macros/getters.html' as get with context -%}
 
+{%- macro render_link_span(content) -%}
+	{%- set contentsplit = content.split('­')-%}
+	<span>
+		{%- for s in contentsplit -%}
+			{%- if not loop.first -%}
+				&shy;
+			{%- endif -%}
+			{{ s|e }}
+		{%- endfor -%}
+	</span>
+{%- endmacro -%}
+
+
 {%- macro render(url, content, lang, attr = None, title = None) -%}
 	{%- call(parsedurl, anchor, reflang, is_external, reftype, refid, refpage, tagcattitle, tagcatcolor) parse_url(url, lang) -%}
 		{%- set ns = namespace(relation=None, fullurl=parsedurl) -%}
@@ -16,12 +29,12 @@
 		<a {{ content_renderer.render_attr(attr, lang, extra_classes=[ns.relation], extra={"href": ns.fullurl, "title": {"value":title, "escape": true}, "target": target}) }}>
 			{%- if content is string or content is none -%}
 				{%- if content is string and content|length -%}
-					<span>{{ content|e }}</span>
+					{{ render_link_span(content) }}
 				{%- else -%}
 					{%- if reftype == "tag" -%}
-						<span>{{ tagcattitle|e }}</span>
+						{{ render_link_span(tagcattitle) }}
 					{%- elif reftype == "slug" -%}
-						<span>{{ refpage.title|e }}</span>
+						{{ render_link_span(refpage.title) }}
 					{%- endif -%}
 				{%- endif -%}
 			{%- else -%}