← is the HTML entity for the left arrow ←, U+2190 LEFTWARDS ARROW, and ← and ← are its numeric references. HTML5 also reads ←, ←, ← and ←, though JSX doesn’t. In UTF-8 it’s E2 86 90.
Character ← U+2190 LEFTWARDS ARROW
Named ←
Numeric ← ←
UTF-8 E2 86 90
Encoding a back link’s text gives ← Back to posts.
<- needs escaping
An ASCII left arrow starts with <, the character that opens a tag. Browsers recover from <- in text and show it, but the HTML standard counts it as a parse error (invalid-first-character-of-tag-name). In JSX it’s a hard error: Babel, TypeScript, esbuild and oxc all reject <p><- Back</p>. Write ←, <- or, in JSX, {'<-'}.
Related arrows
Names are case-sensitive: ⇐ is ⇐, not ←.
← U+2190 ← ⇐ U+21D0 ⇐
↔ U+2194 ↔ ↩ U+21A9 ↩ (HTML5 only)
⟵ U+27F5 ⟵ (HTML5 only)
← isn’t an emoji; ↩ and ⬅ (U+2B05) are, and some systems draw them in color.
Back links
Screen readers may read the arrow aloud, so a “← Back” link announces more than it should. Hide the arrow:
<a href="/posts"><span aria-hidden="true">←</span> Back to posts</a>
Right-to-left pages
Arrows don’t flip in right-to-left text. Unicode gives them Bidi_Mirrored=No, so ← still points left in a dir="rtl" page, while parentheses and « » are mirrored. In Arabic or Hebrew, “back” points right, so pick the character for the direction or flip it with CSS:
[dir="rtl"] .back-arrow { display: inline-block; transform: scaleX(-1); }
← is an HTML 4 name, so every JSX compiler decodes it in text; in braces write {'\u2190'}. CommonMark decodes ← and its aliases in Markdown text and leaves them literal in code spans. In CSS generated content it’s content: "\2190".