Quick answer: <link=...> in TMP only renders styling; click handling needs IPointerClickHandler on the text component plus TMP_TextUtilities.FindIntersectingLink to identify which link was clicked. Also enable Raycast Target.

Here is how to fix Unity TextMeshPro <link> tags that look clickable but produce no event when clicked. TMP renders the visual markup; you write the handler that converts clicks to link IDs.

The Symptom

Text contains <link="help">Click here</link>. Visually highlighted. Clicking does nothing.

What Causes This

No handler script. TMP does not auto-handle link clicks; you must implement IPointerClickHandler.

Raycast Target off. The TMP component must accept raycasts to receive pointer events.

EventSystem missing. No EventSystem in scene means no clicks dispatch at all.

The Fix

Step 1: Implement IPointerClickHandler.

using UnityEngine;
using UnityEngine.EventSystems;
using TMPro;

[RequireComponent(typeof(TMP_Text))]
public class TMPLinkHandler : MonoBehaviour, IPointerClickHandler
{
    private TMP_Text text;
    void Awake() { text = GetComponent<TMP_Text>(); }

    public void OnPointerClick(PointerEventData ev)
    {
        int linkIdx = TMP_TextUtilities.FindIntersectingLink(text, ev.position, ev.pressEventCamera);
        if (linkIdx == -1) return;
        TMP_LinkInfo info = text.textInfo.linkInfo[linkIdx];
        Debug.Log($"Clicked link: {info.GetLinkID()}");
        // route based on info.GetLinkID()
    }
}

Step 2: Enable Raycast Target. On the TMP component, expand Extra Settings and ensure Raycast Target is checked.

Step 3: Add hover cursor (optional).

void Update()
{
    int linkIdx = TMP_TextUtilities.FindIntersectingLink(text, Input.mousePosition, null);
    if (linkIdx != -1)
        Cursor.SetCursor(handCursor, Vector2.zero, CursorMode.Auto);
    else
        Cursor.SetCursor(null, Vector2.zero, CursorMode.Auto);
}

Step 4: For new Input System, use UnityEngine.EventSystems.PointerEventData. The handler signature is the same; the EventSystem dispatches via the new InputSystemUIInputModule.

Step 5: Style the link visually. TMP link tags can include color: <link="help"><color=#88aaff>Click here</color></link>. Underline manually with <u>.

“Link tags are markup only. IPointerClickHandler + FindIntersectingLink does the work. Raycast Target must be on.”

Related Issues

For TMP baseline shift, see TMP Baseline. For TMP emoji, see TMP Emoji.

Implement IPointerClickHandler. FindIntersectingLink. Raycast Target on. Links respond.