SEO Ayurveda Reader
Ayurveda Reader is a JavaScript app: a search engine sees a shell, and the text of the books appears only in the browser. I made sure that every chapter, encyclopedia article, home remedy and term has its own address with static HTML, a Russian and an English version, markup and a sitemap entry. Below is what exactly was done and what the checks show as of 15 October 2026.
01 / the task
All of the site's content lived inside the app — search engines were given a single page
The app opens fast and reads well, but for search it is one address: verses, chapters and articles are loaded by a script. So for a query like “Ashtanga Hridaya chapter 1” or “Vata type” the site had almost no chance. The task: give the search engine the same texts as ordinary HTML pages, without breaking the app and without hand-making a second copy of the content.
- One address instead of thousands: books, chapters and articles lived inside the app
- No English version: the verses existed, but there was no language in the address or in the tags
- Outdated figures in the home-page description: “36,786 shlokas from 7 samhitas”, “382 terms”, “208 articles”
- Pages a search engine could learn about only from the sitemap, with no links from the home page
02 / timeline
How the site grew for search: from meta tags in June to 2,507 pages in October
| Date | What was done | Result |
|---|---|---|
| 6–7 June 2026 | The ayurvedareader.ru domain in meta tags, JSON-LD (WebSite and a list of books), Open Graph, a preview image, verification files for Yandex Webmaster and Google Search Console, a Yandex Metrica counter with Webvisor | a base for indexing and measurement |
| 4–11 July | The first static chapter pages and regeneration for the new content | 75 static pages by 31 July |
| 11 August | Chapter pages regenerated to include translations | pages match the content of the app |
| 15 October | English chapter pages, static pages of the encyclopedia, home remedies and glossary, an updated home page, IndexNow, Search Console | 2,507 addresses in the sitemap |
03 / static pages
One script builds HTML for every chapter, article, remedy and term
The pages are built by the generate-static-pages script from the same data files that the app reads, so the text on a page and in the app is the same. A page has the chapter title, Sanskrit with transliteration and the translation, breadcrumbs, an “Open in the interactive reader” link and a language switch; the reader itself still opens in one click.
| Page type | Russian / English | Example title | Markup |
|---|---|---|---|
| Book chapter | 841 / 841 | Ayushkamiya Adhyaya — the desire for long life | Sutrasthana | Ashtanga Hridaya Samhita | Chapter (sa, en) |
| Book | 9 / 9 | a book page with a list of chapters | — |
| Encyclopedia | 287 / 287 | Ayurveda Encyclopedia — 241 articles | Article (on articles) |
| Home remedies | 114 / 114 | Ayurveda Home Remedies — 113 remedies | — |
| Glossary | 1 / 1 | Ayurveda Glossary — 397 terms | — |
04 / English version
English pages and hreflang pairs: a search engine knows which version is for whom
Every Russian page has an English pair and a link back. They are written both in the page tags and in the sitemap, so for a query in English the search engine shows /en/, and for Russian — the Russian version. For a Madhava chapter without a single translated verse no English page is created: a link to a non-existent address does not appear.
- English chapter and book titles instead of transliteration in headings
- Sanskrit IAST next to the translation — verses read as in the Russian version
- An “English version” / “Русская версия” switch on every page
- The site in the sitemap with nested alternate links and no duplicates
05 / Pages
How one and the same book looks to a reader and to a search engine
06 / checks
150 random pages from the sitemap: the required tags are almost everywhere
I picked 150 addresses from the sitemap at random and examined each page: response code, title, description, h1, canonical, hreflang, Open Graph and JSON-LD. This is a sample, not a full crawl of all 2,507 pages: a full crawl should be done after the next regeneration.
| Check | Result |
|---|---|
| Response code 200 | 150 of 150 |
| Unique title | 150 of 150 |
| Exactly one h1 | 150 of 150 |
| Description of 40+ characters | 150 of 150 |
| Canonical equals the page address | 150 of 150 |
| hreflang (ru, en, x-default) | 150 of 150 |
| Open Graph | 149 of 150 |
| JSON-LD | 124 of 150 |
07 / markup
What JSON-LD describes: books, chapters and questions
The home page has three blocks of markup. WebSite describes the site, ItemList lists all nine books — each as a Book with an author and languages, FAQPage — four reader questions with answers. On chapter pages the Chapter markup links a chapter to its book and states the languages: Sanskrit and Russian or English.
| Type | Where it is used |
|---|---|
| WebSite | home page, a description of the site and its built-in search |
| ItemList + Book | home page: nine books with authors and languages |
| FAQPage | home page: 4 reader questions and answers |
| Chapter | chapter pages: title, position in the book, the book, languages |
| Article | encyclopedia articles |
08 / indexing
Sitemap, IndexNow and Search Console: how search engines learn about the pages
robots.txt points to the sitemap; Google accepted it on 15 October with the status “Success”. For Yandex the addresses went through IndexNow — a protocol that Yandex and Bing accept without a console. Google does not support IndexNow, so a “URL prefix” property verified with an HTML file was added to Search Console, and indexing requests were sent for six key pages.
| Page | What Google showed before the request |
|---|---|
| Home page | already indexed, re-indexing of the updated version requested |
| /chapters/ | not indexed, Google did not know about it |
| /encyclopedia/ | not indexed, found through the sitemap |
| /remedies/ | not indexed, found through the sitemap |
| /glossary.html | not indexed, found through the sitemap |
| /en/chapters/ | not indexed, Google did not know about it |
Yandex Webmaster still shows the old sitemap: the last load was on 9 October, 853 links, and the tool is temporarily read-only. The new 2,507 addresses reached it through IndexNow and it will pick up the sitemap on the next crawl.
09 / home page
The home page got corrected figures and links to the static sections
A search engine takes the home page description and markup as the site's business card, so the outdated figures were fixed in the title, description, Open Graph and JSON-LD. Ordinary links to the chapter catalog, the encyclopedia, home remedies, the glossary and the English version were added to the footer: before, the static pages could be found only through the sitemap.
- The home page now links to the chapter catalog, encyclopedia, remedies, glossary and English
- The book list for search engines includes all nine, not seven
- On a phone the footer does not break or shift
10 / result and next steps
Technically the SEO is ready; results in search still wait for the crawl
- Positions and traffic cannot be named yet: the pages were only just submitted, and indexing takes days and weeks.
- In 1–2 weeks open the “Pages” section in Search Console and see how many addresses are indexed.
- Check Yandex Webmaster again: the number of sitemap links should grow from 853.
- After the next page regeneration do a full crawl of all 2,507 addresses, not a sample.
- Send changed pages to IndexNow after every regeneration.
11 / technology
What it is built from
- Node.js scripts: generate-static-pages (the pages), indexnow (notifying search engines), deploy-static (uploading to the host)
- Data: the same book files the app reads — pages and the app match in text
- Beget hosting: static files without a server; the script and cache version changes on every release
- Checks: a sample of 150 sitemap pages, comparing the sitemap with the server response
Discuss a project
Need SEO for your website?
Send the site address — I will run an audit, prepare a brief for the fixes and show what to fix first.
Order SEO