diff --git a/testrail_bot/control/celery_tasks/test_rail_api.py b/testrail_bot/control/celery_tasks/test_rail_api.py
index d77b511..c359dbe 100644
--- a/testrail_bot/control/celery_tasks/test_rail_api.py
+++ b/testrail_bot/control/celery_tasks/test_rail_api.py
@@ -1,6 +1,7 @@
 from testrail_api import TestRailAPI, StatusCodeError
 from requests.exceptions import ReadTimeout
 from django.conf import settings
+from django.utils.html import escape
 from typing import Optional, List, Iterator
 
 from functools import lru_cache
@@ -55,6 +56,11 @@
     return api.runs.get_run(run_id)
 
 
+@lru_cache
+def get_run_name(run_id: int) -> str:
+    return get_run_by_id(run_id)["name"]
+
+
 def get_plan_by_id(plan_id: int) -> dict:
     return api.plans.get_plan(plan_id)
 
@@ -147,3 +153,8 @@
     except StatusCodeError as e:
         print(f"{e=}")
         return False
+
+
+def html_link(type: str, id: int, title: str) -> str:
+    return f"<a href='https://mirantis.testrail.com/index.php?/{type}s/view/" \
+           f"{id}'>{escape(title)}</a>"
diff --git a/testrail_bot/control/celery_tasks/testrail_pipeline.py b/testrail_bot/control/celery_tasks/testrail_pipeline.py
index f1e4bf0..091e086 100644
--- a/testrail_bot/control/celery_tasks/testrail_pipeline.py
+++ b/testrail_bot/control/celery_tasks/testrail_pipeline.py
@@ -233,8 +233,7 @@
         if str(run_id) == str(old_run_id):
             continue
         per = round(100.0 * ratio, 2)
-        run_link = f"<a href=https://mirantis.testrail.com/index.php?/runs/" \
-                   f"view/{old_run_id}>{old_run_id} </a>"
+        run_link = test_rail_api.html_link('run', old_run_id, old_run_id)
         if type(sim_result) is not dict:
             f.write(f"Similarity not found due to similarity: {per}, "
                     f"in run {run_link}\n")
@@ -243,9 +242,9 @@
 
         prod_link = "<a href=https://mirantis.jira.com/browse/{defect}>" \
                     "{defect}</a>".format(defect=sim_result["defects"])
-        test_link = "<a href=https://mirantis.testrail.com/index.php?/tests/" \
-                    "view/{test_id}>{test_id}</a>".format(
-            test_id=sim_result["test_id"])
+        test_link = test_rail_api.html_link('test',
+                                            sim_result["test_id"],
+                                            str(sim_result["test_id"]))
         status_id = int(sim_result['status_id'])
         if status_id in [StatusEnum.retest, StatusEnum.failed,
                          StatusEnum.blocked]:
@@ -304,11 +303,12 @@
     """
     case_id = test["case_id"]
     run_id = test["run_id"]
+    run_name = test_rail_api.get_run_name(run_id)
+    test_link = test_rail_api.html_link('test', test['id'], test["title"])
+    run_link = test_rail_api.html_link('run', run_id, run_name)
 
-    f.write("<br><b>Proceeding test {title}<br>with id <a "
-            "href=https://mirantis.testrail.com/"
-            "index.php?/tests/view/{id}>[{id}]"
-            "</a></b>\n".format(id=test['id'], title=test["title"]))
+    f.write(f"<br><b>Proceeding test {test_link} <br>"
+            f"in {run_link} run</b>\n")
     f.flush()
 
     last_comment = get_last_comment(case_id, run_id, text_filters)
@@ -318,11 +318,9 @@
     if found:
         return
     else:
-        f.write("<b style='color:red;'>Automatic test processing failed. "
+        f.write(f"<b style='color:red;'>Automatic test processing failed. "
                 "Please process test manually "
-                "<a href=https://mirantis.testrail.com/"
-                "index.php?/tests/view/{test_id}>{test_id}"
-                "</a></b>\n\n".format(test_id=test["id"]))
+                f"{test_link}</b>\n\n")
         f.flush()
 
 
@@ -349,12 +347,8 @@
         else:
             test_run = test_rail_api.get_run_by_id(bot_test_run.run_id)
             run_type = "run"
-        f.write("Start processing {run_type} <a "
-                "href=https://mirantis.testrail.com/"
-                "index.php?/{run_type}s/view/{id}>{name}"
-                "</a>\n".format(run_type=run_type,
-                                id=test_run['id'],
-                                name=test_run['name']))
+        link = test_rail_api.html_link(run_type, test_run['id'], test_run['name'])
+        f.write(f"Start processing {run_type} {link}\n")
         f.flush()
 
         project_id = get_project_id(f, bot_test_run, report)
