Word and Character Counts for UI Copy, SEO, and Reviews
How to count words and characters the way products and platforms do — limits, diffs, Markdown pitfalls, and a practical editing workflow for developers who ship copy.
The definitive checklist for title tags, meta descriptions, Open Graph, Twitter cards, canonical URLs, and robots directives — with copy-paste examples for Next.js and static sites.
By codefunc
Search engines and social platforms still read your HTML head — but not every meta tag deserves your time. Keywords meta tags are dead weight. A perfect description will not save thin content. Open Graph images drive click-through on Slack, LinkedIn, and Google Discover. This guide separates high-impact meta tags from legacy noise and gives you production-ready patterns for developer tool sites and product marketing pages.
Bottom line: Ship unique title + description per page, a canonical URL, Open Graph tags with a 1200×630 image, and correct robots for indexable content. Skip meta keywords. Match OG title to user intent, not internal codenames.
| Priority | Tag | Impact |
|---|---|---|
| P0 | <title> |
Rankings + SERP headline |
| P0 | meta description |
SERP snippet (not a ranking factor, drives CTR) |
| P0 | link rel="canonical" |
Prevents duplicate content dilution |
| P0 | og:title, og:description, og:image, og:url |
Social + messaging previews |
| P1 | twitter:card |
Twitter/X large image cards |
| P1 | meta robots |
Index/noindex control |
| P1 | viewport |
Mobile usability (baseline) |
| P2 | theme-color, manifest |
PWA polish |
| Skip | meta keywords |
Ignored by Google since 2009 |
Primary keyword — Secondary intent | Brand
Examples for a developer tools site:
| Page | Title |
|---|---|
| Tool | JSON Formatter & Validator — Free Online Tool | codefunc |
| Category | CSS Generators — Free Online Tools | codefunc |
| Blog | JWT Anatomy Explained — codefunc Blog |
JSON Formatter | JSON Beautifier | JSON Pretty Print | JSON Online
Keyword stuffing in titles triggers rewrites and looks spammy in SERPs.
Google may rewrite descriptions, but you should still write them — they appear ~70% of the time for well-formed pages.
[What it does] + [differentiator] + [light CTA or trust signal]
Example:
<meta
name="description"
content="Format and validate JSON in your browser. No upload, no signup — 100% client-side. Fix syntax errors with line numbers and prettify for readable diffs."
/>
150–160 characters is the safe target. Every tool page on codefunc should have a unique description — not a template with only the tool name swapped.
When the same content is reachable at multiple URLs, canonical tells Google which version to index:
<link rel="canonical" href="https://codefunc.com/tools/json-formatter" />
| Issue | Fix |
|---|---|
http vs https |
301 to HTTPS; canonical uses HTTPS |
| Trailing slash mismatch | Pick one; redirect the other |
www vs apex |
Single preferred host |
Query params (?ref=twitter) |
Canonical to clean URL |
| Pagination | rel="canonical" to self or view-all strategy |
In Next.js App Router, use metadata.alternates.canonical in generateMetadata.
When someone shares your tool in Slack, Discord, or LinkedIn, platforms read Open Graph — not your on-page H1.
<meta property="og:type" content="website" />
<meta property="og:site_name" content="codefunc" />
<meta property="og:title" content="JSON Formatter & Validator" />
<meta property="og:description" content="Format and validate JSON locally in your browser." />
<meta property="og:url" content="https://codefunc.com/tools/json-formatter" />
<meta property="og:image" content="https://codefunc.com/tools/json-formatter/opengraph-image" />
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="630" />
<meta property="og:locale" content="en_US" />
| Rule | Detail |
|---|---|
| Size | 1200 × 630 px (1.91:1) |
| Format | PNG or JPEG; avoid tiny logos on gray background |
| Text | Tool name readable at thumbnail size |
| Dynamic | Per-tool OG images beat one generic site image for CTR |
codefunc generates per-tool OG images via opengraph-image.tsx — strong pattern for tool catalogs.
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="JSON Formatter & Validator" />
<meta name="twitter:description" content="Format and validate JSON locally in your browser." />
<meta name="twitter:image" content="https://codefunc.com/tools/json-formatter/opengraph-image" />
summary_large_image matches OG image investment. Omit twitter:site until you have an active brand handle.
<meta name="robots" content="index, follow" />
<meta name="robots" content="noindex, follow" />
Developer tool sites should index every tool page, category hub, blog post, and legal page. Disallow /api/ in robots.txt, not individual tools.
Meta tags control snippets; JSON-LD controls rich results eligibility.
For a tool page, combine:
WebApplication — name, description, free offerBreadcrumbList — navigation contextFAQPage — only with unique, helpful FAQs per toolDo not duplicate misleading SearchAction unless your site implements on-site search results.
export async function generateMetadata({ params }): Promise<Metadata> {
return {
title: "JSON Formatter & Validator — Free Online Tool",
description: "Format and validate JSON in your browser. No upload required.",
alternates: {
canonical: "https://codefunc.com/tools/json-formatter",
},
openGraph: {
title: "JSON Formatter & Validator",
description: "Format and validate JSON in your browser.",
url: "https://codefunc.com/tools/json-formatter",
siteName: "codefunc",
images: [{ url: "/tools/json-formatter/opengraph-image", width: 1200, height: 630 }],
locale: "en_US",
type: "website",
},
twitter: {
card: "summary_large_image",
title: "JSON Formatter & Validator",
description: "Format and validate JSON in your browser.",
},
robots: { index: true, follow: true },
};
}
Use metadataBase in root layout so relative OG image URLs resolve correctly.
title + description per tool (70+ pages)sitemap.xml includes tools, categories, blogrobots.txt allows /, blocks /api/noindex on tool pages accidentallyarticle OG type with publishedTime| Tactic | Verdict |
|---|---|
| Meta keywords | Skip |
| Duplicate OG tags from a WordPress plugin | Harmful if wrong |
| 50 identical descriptions with swapped tool name | Thin content signal |
Hiding keywords in display:none |
Spam penalty risk |
| Buying "SEO meta tag bundles" | Waste of money |
Content depth on tool pages (how-to, examples, errors) beats meta tag micro-optimization.
Use these codefunc tools alongside this guide:
Invest in unique titles, descriptions, canonicals, and OG images for every public URL. Treat meta tags as advertising copy for SERPs and social feeds — accurate, specific, differentiated. Pair with JSON-LD and real on-page content. Ignore meta keywords forever.
How to count words and characters the way products and platforms do — limits, diffs, Markdown pitfalls, and a practical editing workflow for developers who ship copy.
Ship the right favicon and apple-touch-icon sizes, wire Web App Manifest icons, set theme-color, and avoid the common gaps that leave tabs and home screens looking broken.
Build a correct sitemap.xml, keep lastmod honest, submit it in Google Search Console, and pair it with robots.txt so crawlers discover the pages you actually want indexed.
Find a developer tool