This website labels external links by executing some javascript when the window loads:

window.addEventListener("load", function () {
  var re = /^(https?:\/\/[^\/]+).*$/;
  var currentHref = window.location.href.replace(re, "$1");
  var reLocal = new RegExp("^" + currentHref.replace(/\./, "\\."));

  var links = document.getElementsByTagName("a");
  for (var i = 0; i < links.length; i++)
  {
    var href = links[i].href;
    if (href == "" || reLocal.test(href) || !/^http/.test(href))
      continue;
    if (links[i].getAttribute("target") == undefined) {
      links[i].setAttribute("target", "_blank");
    }
    if (links[i].className != undefined) {
      links[i].className += " external";
    } else {
      links[i].className = "external";
    }
    if (links[i].title != undefined && links[i].title != "") {
      links[i].title += " (outside link)";
    } else {
      links[i].title = "Outside link";
    }
  }
});

CSS adds some padding and specifies a background image to draw within that space.

a.external {
  background-image: url("/assets/img/icons8-external-link.svg");
  background-position-x: right;
  background-position-y: center;
  background-size: 0.9em;
  padding-right: 0.95em;
  background-repeat: no-repeat;
}

The image itself is licensed from icons8.com, but if you’re not picky there’s a lot of options out there. The icon scales with the text size, so it’s worth finding an SVG.