Most of the head is ignored
Look at the source of almost any page and you will find a dozen meta tags. Very few of them do anything. Some were invented by tools that no longer exist, some were supported by search engines that shut down twenty years ago, and a handful were never read by anything at all — they simply spread because they appeared in a template somebody copied.
It is worth knowing which is which, because a head full of decorative markup makes it harder to notice when one of the four tags that matters is missing or wrong.
The ones that still do something
- The title. Not strictly a meta tag, but the most important thing in the head. It is a real ranking input, it is the headline of your search result, and it is what a browser tab and a bookmark inherit.
- The description. Not a ranking factor, and Google says so plainly. It is the sentence under your result, and it decides how many people click, which makes it worth writing carefully for a reason that has nothing to do with ranking.
- The viewport. Without
width=device-width a page renders at desktop width on a phone and the reader gets a postage stamp of text they have to pinch at. This is the tag whose absence causes the most damage and gets the least attention.
- Robots.
noindex keeps a page out of results; nofollow stops link equity flowing from it. Both are instructions rather than hints, so both are worth being careful with.
The canonical is a fifth thing worth having, though it is a link element rather than a meta tag. Charset belongs there too, as early in the head as possible.
Open Graph and Twitter cards
These are read by social platforms and messaging apps rather than by search engines, and they control the box that appears when someone pastes your link into a feed or a chat. og:title, og:description, og:image, og:url and og:type are the working set.
X falls back to Open Graph when Twitter-specific tags are absent, so duplicating everything is unnecessary. The one Twitter tag worth adding is twitter:card, which chooses between the large image layout and a small thumbnail beside the text.
Two of these have to be written by hand for every page, which is why the [msm_tool slug="meta-tag-generator"] deliberately leaves them out. og:image and og:url both need an absolute address specific to one page, and a plausible-looking placeholder is worse than an absent tag: the markup looks complete and every preview is wrong.
The graveyard
Meta keywords stopped being used by Google around 2009 and were abused so thoroughly before that they became a spam signal rather than a ranking one. They do nothing now. Neither does revisit-after, which no crawler ever implemented, or author, copyright and rating, which are read by nothing that affects your traffic.
meta refresh is different: it works, and you should still not use it. A server-side redirect is faster, is understood correctly by search engines, and does not strand a reader on a page that jumps away while they are still reading it.
Writing the two that get seen
Around sixty characters for a title and around a hundred and fifty-five for a description are the usual figures, but both are approximations of a limit measured in pixels. A title made of wide capitals is cut off sooner than a longer one in narrow lowercase, so treat the counts as a guide and check the result rather than the character total.
Write the description as a promise about what the reader gets, in a sentence that reads like a sentence. Descriptions built out of keyword fragments are rewritten by Google far more often than ones that describe the page, and a rewrite means you have lost control of the only copy on the results page you actually wrote.
One set per page
The commonest fault in the wild is two of everything. A theme emits a title tag, an SEO plugin emits another, and the page ships with both. Search engines pick one and it is frequently not the one you wanted.
Before pasting a generated block into a WordPress site, load the page and read the rendered source. If Yoast, Rank Math or SEOPress is active, the title and description are already being written for you and belong in that plugin's fields, not in a second block in the template. What is often genuinely missing on such a site is the viewport tag or a complete set of Open Graph tags, and those are worth adding.
Everything else in a generated block should be treated as a starting point. Escape any quotation marks in your text so they cannot terminate an attribute early, put the whole thing inside the <head>, and check the rendered page afterwards rather than assuming the template did what you expected.