Numbering cells with grid-column: 2 / 4 means recounting every number whenever the column count changes. grid-template-areas lets you draw the layout as strings of names on the parent, then each child just writes grid-area: icon — the coordinate math disappears from the code entirely.
The real payoff is that markup order and screen order become independent. The HTML can stay icon → title → sub → actions, and changing only the grid-template-areas string can send the icon to the top or move the action buttons to the front. Responsively, a single new grid-template-areas string inside a media query is enough to fully rearrange the layout — no JavaScript reordering the DOM required.
Every line in the string needs the same number of cells (words), and a period (.) marks an empty cell. Repeat a name across several rows or columns and that area merges into one bigger region — that's how "icon" below spans two rows.
When to use
Most readable for small compositions — cards, widgets — that need their whole arrangement to change by breakpoint. For grids with dozens of repeating cells, a repeat()-based track definition fits better than named areas.