Technical SEO

34 Nepali Websites, One Technical Audit: Only Three Passed

Every SEO agency in Nepal says the same thing on its homepage: we have audited hundreds of Nepali websites. I have read a lot of those pages. Not one of them publishes the numbers.

So I ran the audit myself and published all of it — the sample, the method, the raw results, and the parts that did not support my argument.

On 23 August 2026 I fetched the homepage of 34 live Nepali websites across seven sectors and measured what was objectively there: status codes, response headers, meta tags, heading counts, image attributes, script counts, transfer sizes. Then I scored each site against five checks that any competent developer would call basic.

Three passed.

The five checks

Nothing here is advanced. There is no judgement about content quality, keyword choice, backlinks or rankings, because none of those can be measured from a single page fetch. These are hygiene checks:

  1. Exactly one <h1> on the page
  2. A rel="canonical" tag
  3. A meta description between 50 and 160 characters
  4. Any valid structured data (JSON-LD)
  5. Alt text on every image

Three sites out of 34 passed all five. That is 9 per cent.

What the sample was

Seven sectors: trekking and tourism (7 sites), news and media (7), finance and commerce (6), SEO and digital agencies (6), health and clinics (3), education and institutions (3), hospitality (2).

I have to be honest about what this sample is and is not. Sites were taken from public search results for each sector, so this is a convenience sample, not a random one. Thirty-four sites is small. I audited homepages only, not whole sites. Two more sites were in the list and dropped out because they timed out or failed to respond, which is itself a finding of a sort, but I have not counted them in any percentage.

So treat every number below as a strong signal about a real pattern, not as a national statistic. If someone tells you these figures represent all Nepali websites, they are overselling it, and so would I be.

The headline finding: four in ten had no H1

Only 12 of the 34 sites (35 per cent) had exactly one <h1>. Fourteen sites (41 per cent) had no <h1> at all. Eight had more than one. The worst page carried 36 of them.

The H1 is the single clearest signal a page gives about what it is. A page with no H1 is not disqualified from ranking, and anyone who tells you it is has oversimplified. But it is a page that has declined to state its own subject, and it is almost always a symptom of something larger: a theme where the headline was styled with a <div>, or a page builder that never asked.

Thirty-six H1s on one page is a different problem. That is a template applying the heading tag to every card in a listing. Every item shouts, so nothing is emphasised.

Images: the quiet Core Web Vitals problem

Across the 34 sites there were 2,167 images. Of those:

The missing dimensions matter more than most people realise, and they matter more in Nepal than in most markets. When an image has no declared width and height, the browser does not know how much space to reserve, so it lays the page out without it and then reflows when the image arrives. That is Cumulative Layout Shift — the text jumping down the screen just as you start reading.

On a fast connection you barely see it. On a 4G connection in Kathmandu at 8pm you see it constantly. And 82.8 per cent of Nepal's mobile connections are 3G, 4G or 5G, which means a very large share of the audience is on exactly the kind of connection where this is most visible (DataReportal, Digital 2026: Nepal).

The fix is two attributes per image. It costs nothing and it is invisible in the design.

Meta descriptions: present, but the wrong length

Twenty-seven sites (79 per cent) had a meta description. Only 11 (32 per cent) had one between 50 and 160 characters.

The breakdown is the interesting part: 7 sites had none at all, 5 had one under 50 characters, and 11 had one over 160. So the most common failure is not neglect — it is writing a description and then not checking whether it survives to the search result.

Titles showed the same shape. Median length was 58 characters, which is fine. But ten sites ran over 60, the longest hitting 102 characters, and one site had no <title> element whatsoever.

Structured data: half the sites say nothing

Eighteen sites (53 per cent) had at least one JSON-LD block. Encouragingly, none of them had broken JSON — zero parse failures across the whole sample. When Nepali sites do implement schema, they implement it correctly.

The problem is what they describe. Only 6 of 34 had any local business type at all — LocalBusiness, TravelAgency, Hotel, Dentist or similar. Only 3 had a BreadcrumbList. Nine sites had neither an H1 nor any structured data, which means they had told Google nothing about themselves in either the human-readable or the machine-readable channel.

Six local business markups, in a market where every one of those agencies will tell you that local search is the whole game.

Speed: mostly fine, with a long tail

This is where the sites did better than I expected, and I want to report that as clearly as the failures.

All 34 served over HTTPS. All 34 compressed their HTML. Median time to first byte was 817 milliseconds and median HTML transfer was 27 KB, both of which are perfectly respectable.

The trouble is the tail. Thirteen sites took more than a second to first byte, five took more than 2.5 seconds, and the slowest took 10.4 seconds. Seven sites had five or more render-blocking scripts in the <head>; the worst had 21. That is 21 files that must download and execute before the browser will paint anything.

A 10-second first byte is not an SEO problem. It is a business problem that also happens to hurt SEO.

The finding I did not expect

Thirty-three of the 34 sites declared a language on the <html> element. Here is what they declared:

One site out of 34 tells browsers and search engines that its content is in Nepali. Ten declare American English. One declares zxx, which is the ISO code for "no linguistic content" and is almost certainly a plugin trying to block automatic translation.

I think this is the most interesting number in the whole audit, and it is big enough that I have written about it separately.

What I would fix first

If you own one of these sites — or one much like it — the order matters, because these are not equally expensive.

This afternoon, free: add width and height to your images. Give every image real alt text. Make sure the page has exactly one H1 that says what the page is about. Add a canonical tag. Rewrite the meta description to somewhere near 150 characters and actually look at it in a search result.

This month: add correct structured data for what you actually are. If you are a clinic in Lalitpur, that is a LocalBusiness or Dentist node with a real address and real opening hours. If you publish articles, that is Article with a real author.

This quarter: deal with the render-blocking scripts and the server response time. This is the one that needs a developer and a budget, which is exactly why it is last.

Notice that the first group — the group that fixes the majority of what failed in this audit — requires no redesign, no migration and no retainer. It is a morning of careful work in the theme.

Why so many sites fail the easy things

I do not think this is incompetence, and I do not think it is because Nepali developers are worse than developers anywhere else. Run this same audit on 34 small business sites in Melbourne and you will find plenty of missing alt text too.

What I think happens is that a website gets built to a deadline against a design, gets signed off on how it looks, and is never audited again. The H1 was a styling decision. The images came from a stock library and nobody wrote alt text because nobody was going to see it. The meta description was written once, before the page content changed.

Nobody is responsible for the parts of a website that are invisible. So the invisible parts rot.

Run it on your own site

Everything above came from a single page fetch per site. You can check your own homepage in a browser in about five minutes:

If you find problems and want a second opinion on what to fix in what order, send me a note — I would rather you fixed it yourself with a clear head than bought a retainer you did not need. There is more about how I work on the about page.

The full dataset — every aggregate on this page in machine-readable form, plus the script that produced it — is published separately at the audit dataset page. Point the script at your own list and it will produce the same measurements.

The response timings from the same sample are a separate story, and a worse one: the median site took 849ms to send its first byte and the slowest took over ten seconds. I will re-run this audit and publish the comparison. I would like to find out whether any of it moves.