Search optimization begins not with keywords but with answering the user's task. An online store has a card for a technical book, and three parties have to understand it at once: the shopper deciding whether it is worth reading; the search crawler extracting meaning from the page; and the algorithm matching that meaning against someone's query. The title and description help a result get chosen in the listing, but they do not replace useful material and a clear site architecture.
The naive model reduces content SEO to markup: stuff the title with key phrases, write a tempting description, add structured data - and the rankings will come on their own. The first check breaks that logic. The title and description govern the snippet - how the result looks in the listing and whether a person will want to click it - not the position it lands in. The engine ranks the content, and if the book card duplicates its neighbor or answers no real question, there is nothing to decorate.
Hence the first rule: every page has one unique purpose and does not repeat its neighbor. The book card answers the question about that book rather than retelling the general catalog section. The second rule is about links, and here SEO meets accessibility: a link names the object rather than hiding behind click here. The text read the book online helps both the screen reader that reads links out as a list and the crawler that understands from the link text where it leads.
Structured data is a separate layer of meaning laid over the visible text. JSON-LD markup (JavaScript Object Notation for Linked Data) is a block in the head where the page content is described with the schema.org vocabulary in machine-readable form: the Book type, the author, the price, availability. The engine reads this block and can use it to show a rich result - an enhanced snippet with the price and rating right in the listing. Google recommends the JSON-LD format precisely because it lives as a separate block and does not tangle with the layout: it is easy to generate on the server and inject without touching the card's markup.
This works only under a strict condition: the markup describes content actually visible on the page and uses a supported type. The price and rating in the JSON-LD must match the price and rating a person sees; the type must be one from the list the engine can build a rich result for. The number of supported types is finite - product, review, breadcrumbs, article, and a few more; for anything else no rich result will be built, however much markup you add. That list is not permanent: FAQ has dropped out of it, and FAQPage markup no longer earns a rich result - before betting on a type, check its status against the search engine's documentation. The Rich Results Test and the report in Search Console check this, and a mismatch between the markup and the page is a direct route to losing the enhanced snippet or to a manual action.
Authorship, the update date, and links to sources raise the material's verifiability. They are part of the signals of experience and expertise by which both a person and the algorithm judge whether the card can be trusted. But this is not a magic ranking factor: attributing a loud author name and a fresh date to the book without backing them with content will not fool the ranking.
A telling failure looks like this. The card's JSON-LD carried a rating of 4.9 and a price that are nowhere on the page itself; the type was given as Product instead of Book. The rich result either never appeared or was withdrawn after a manual review, and trust in the domain slipped. The discipline here is the same as across all of SEO: the markup describes what is there, each page answers its own question, and a link names honestly what it leads to.
<title>Design Patterns in TypeScript - a practical guide</title>
<meta name="description"
content="How to apply patterns in real code: examples, anti-patterns, and when a pattern is not needed." /><script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Book",
"name": "Design Patterns in TypeScript",
"author": { "@type": "Person", "name": "A. Ivanova" },
"offers": {
"@type": "Offer",
"price": "29.00",
"priceCurrency": "EUR",
"availability": "https://schema.org/InStock"
}
}
</script>