diff --git a/theme/templates/macros/link.html b/theme/templates/macros/link.html
index 1f12f8905be2ec73ba27d77efd9acbcddf235583..1b45a7d2feb2f133950ac92f19f6523afb34dafb 100644
--- a/theme/templates/macros/link.html
+++ b/theme/templates/macros/link.html
@@ -2,7 +2,7 @@
 {%- import 'macros/getters.html' as get with context -%}
 
 {%- macro render(url, content, lang, attr = None, title = None) -%}
-	{%- call(parsedurl, anchor, reflang, is_external, reftype, refid, refpage, tagtitle, tagcolor) parse_url(url, lang) -%}
+	{%- call(parsedurl, anchor, reflang, is_external, reftype, refid, refpage, tagcattitle, tagcatcolor) parse_url(url, lang) -%}
 		{%- set ns = namespace(extraclass=None, fullurl=parsedurl) -%}
 		{%- if anchor -%}
 			{%- set ns.fullurl = [parsedurl, anchor]|join('#') -%}
@@ -13,12 +13,12 @@
 			{%- set ns.extraclass = "internal" -%}
 		{%- endif -%}
 		<a {{ content_renderer.render_attr(attr, lang, extra_classes=[ns.extraclass], extra={"href": ns.fullurl, "title": {"value":title, "escape": true}}) }}>
-			{%- if content is string -%}
-				{%- if content|length -%}
+			{%- if content is string or content is none -%}
+				{%- if content is string and content|length -%}
 					{{ content|e }}
 				{%- else -%}
-					{%- if tagtitle -%}
-						{{ tagtitle|e }}
+					{%- if reftype == "tag" -%}
+						{{ tagcattitle|e }}
 					{%- else -%}
 						{{ refpage.title|e }}
 					{%- endif -%}
@@ -31,7 +31,7 @@
 {%- endmacro -%}
 
 
-{#- returns: (url, anchor, reflang, is_external, reftype, refid, refpage, tagtitle, tagcolor)-#}
+{#- returns: (url, anchor, reflang, is_external, reftype, refid, refpage, tagcattitle, tagcatcolor)-#}
 {%- macro parse_url(rawurl, lang) -%}
 	{%- set urlsplit = rawurl.split('#') -%}
 	{%- set anchor = urlsplit[1]|d(None) -%}
@@ -47,13 +47,17 @@
 		{%- set reftype = components[0] -%}
 		{%- set refid = components[1] -%}
 		{%- set reflang = components[2]|d(lang) -%}
-		{%- set ns = namespace(url=None, page=None, tagtitle=None, tagcolor=None, tagpage=None) -%}
+		{%- set ns = namespace(url=None, page=None, tagtitle=None, tagcolor=None, tagpage=None, catcolor=None, cattitle=None) -%}
 		{%- if reftype == "slug" -%}
 			{%- call(page) get.page_by_slug(refid, reflang) -%}
 				{%- set ns.url = [siteurl, page.url]|join('/') -%}
 				{%- set ns.page = page -%}
+				{%- call(cattitle, catcolor, caturl, catpage, catpages) get.tag_by_name(page.category, reflang) -%}
+					{%- set ns.cattitle = cattitle -%}
+					{%- set ns.catcolor = catcolor -%}
+				{%- endcall -%}
 			{%- endcall -%}
-			{{- caller(ns.url, anchor, reflang, False, reftype, refid, ns.page, None, None) -}}
+			{{- caller(ns.url, anchor, reflang, False, reftype, refid, ns.page, ns.cattitle, ns.catcolor) -}}
 		{%- elif reftype == "tag" -%}
 			{%- call(tagtitle, tagcolor, tagurl, tagpage, tagpages) get.tag_by_name(refid, reflang) -%}
 				{%- set ns.url = [siteurl, tagurl]|join('/') -%}