SEO for Solos

Metadata

Metadata covers 11 of the SEO for Solos checklist's implementation checks. Titles, descriptions, canonicals and social cards. The cheapest wins on the list and the most commonly half-finished.

11
Checks in group
4
High impact
impact 4 or 5
3.2
Average impact
of 5
2
Position
of 12 groups

0 of 11

Saved in this browser

11 checks shown.

Metadata

Titles, descriptions, canonicals and social cards. The cheapest wins on the list and the most commonly half-finished.

  • A title template with a keyword-led default, not a brand-led one4/S

    Why it matters

    The first 60 characters of a title carry nearly all its weight. Leading with the brand on every page spends that budget on a word nobody searched for.

    How to verify

    curl -s https://example.com/ | grep -o '<title>[^<]*</title>'

    Then confirm the head term appears before the brand name.

    meta-title-templateImpact 4/5SmallRead the chapter
  • Every indexable URL has a unique title and description4/M

    Why it matters

    Duplicate titles across a page tier is the clearest signal that the tier is templated rather than written, and it is the first thing a manual reviewer notices.

    How to verify

    Extract titles from your sitemap and count duplicates: `curl -s https://example.com/sitemap.xml | grep -o '<loc>[^<]*' | cut -d'>' -f2 | while read u; do curl -s "$u" | grep -o '<title>[^<]*'; done | sort | uniq -d`.

    meta-unique-titlesImpact 4/5MediumRead the chapter
  • Descriptions contain a number and a specific offer3/S

    Why it matters

    Descriptions do not rank, they earn the click. A number is the cheapest specificity available and it survives truncation better than an adjective.

    How to verify

    curl -s https://example.com/ | grep -o '<meta name="description" content="[^"]*"'

    Then confirm it contains a digit.

    meta-description-with-numberImpact 3/5SmallRead the chapter
  • Every page has a self-referencing absolute canonical5/S

    Why it matters

    A relative canonical resolves differently depending on the requested URL, which is exactly the ambiguity a canonical exists to remove.

    How to verify

    curl -s https://example.com/pricing | grep -o '<link rel="canonical"[^>]*>'

    Then confirm the href is absolute and matches the requested URL.

    meta-canonical-absoluteImpact 5/5SmallRead the chapter
  • Canonical generation normalises slashes, case and query parameters4/S

    Why it matters

    The canonical function is called from every page. If it mishandles a double slash or a trailing slash, that bug is on every URL at once.

    How to verify

    Unit test it: assert `canonicalUrl('//a/')` and `canonicalUrl('a')` both produce the same absolute URL.

    meta-canonical-normalisedImpact 4/5SmallRead the chapter
  • Open Graph tags with a 1200x630 image, alt text and an explicit MIME type3/S

    Why it matters

    A link shared without an OG image renders as a bare grey rectangle. The alt text and MIME type are what stop some platforms from silently dropping the card.

    How to verify

    curl -s https://example.com/ | grep -o '<meta property="og:[^>]*>'

    Then confirm og:title, og:description, og:image, og:image:width, og:image:height, og:image:alt and og:type are present.

    meta-open-graphImpact 3/5SmallRead the chapter
  • twitter:card set to summary_large_image with its own title and description2/S

    Why it matters

    X does not always fall back to Open Graph. Without the explicit card type the link renders in the small format, which halves its visual footprint in a feed.

    How to verify

    curl -s https://example.com/ | grep 'twitter:card'

    Then confirm the value is summary_large_image.

    meta-twitter-cardImpact 2/5SmallRead the chapter
  • Explicit robots directives, including max-snippet and max-image-preview for Googlebot3/S

    Why it matters

    Defaults limit snippet length and image preview size. `max-snippet: -1` and `max-image-preview: large` are what let a page occupy more of the result, and they are opt-in.

    How to verify

    curl -s https://example.com/ | grep -o '<meta name="googlebot"[^>]*>'

    Then confirm max-image-preview:large and max-snippet:-1.

    meta-robots-directivesImpact 3/5SmallRead the chapter
  • hreflang alternates including x-default, even on a single-language site2/S

    Why it matters

    A single-language site still benefits from declaring x-default: it tells the crawler there is no other variant to look for, which prevents speculative fetches.

    How to verify

    curl -s https://example.com/ | grep -i hreflang

    Then confirm both the language tag and x-default appear. Case-insensitive matters: a React or Next.js head serialises the attribute as `hrefLang`, which is valid because HTML attribute names are case-insensitive, and a case-sensitive grep will tell you the tag is missing when it is there.

    meta-hreflang-xdefaultImpact 2/5SmallRead the chapter
  • A full icon set with cache-busted URLs and a complete web manifest2/M

    Why it matters

    Static assets carry a one-year immutable cache header. Without a version query, a changed icon never reaches a returning visitor, and the manifest is what decides how the site looks when installed.

    How to verify

    curl -s https://example.com/manifest.webmanifest | jq '.icons, .screenshots'

    Then confirm a 192px icon, a 512px icon, a maskable icon and at least one wide-form screenshot.

    meta-icons-versionedImpact 2/5MediumRead the chapter
  • Authenticated routes carry a robots noindex tag as well as a robots.txt disallow3/S

    Why it matters

    robots.txt stops the crawl, not the indexing. A disallowed URL that someone links to can still appear in results as a bare URL with no snippet. The meta tag is what removes it, and the crawler has to be allowed to fetch the page to see it.

    How to verify

    curl -s https://example.com/library | grep -o '<meta name="robots"[^>]*>'

    Then confirm noindex is present.

    meta-noindex-private-routesImpact 3/5SmallRead the chapter

Product analytics are optional. On the skill page, X advertising measurement is also optional and shares your visit and ad identifiers with X. Both are off until you allow them. Privacy policy.