Technical SEO for developers: what to check in your code
On modern sites, most SEO problems are code problems: pages rendered only in the browser, one title for every page, no sitemap, wrong canonical links and a slow first paint. Each one is quick to find in the code, and usually quick to fix once found.
Last reviewed by the Forge team
What goes wrong
What it costs when this is missed
Critical
Pages left out of the index
A stray noindex, a robots.txt that blocks everything, or a canonical pointing elsewhere silently removes pages from Google.
High
Content crawlers can't see
If content needs JavaScript to appear, indexing is slower, and some crawlers and AI engines never see it at all.
High
Every page looks the same
With one title and description on every page, search engines can't tell your pages apart, so they show whatever they guess.
Medium
Slow first paint
Core Web Vitals feed into ranking. A heavy hero image or a render-blocking script costs you rankings and visitors.
Common problems
What to look for in your code
Each one: why it hurts, and how to spot it in your own project.
01Content rendered only in the browser
Google renders JavaScript, but in a second, delayed pass. Other search engines, link previews and many AI crawlers often don't run it at all.
How to spot it: Run curl -s https://yoursite.com/page | grep '<h1'. If your heading isn't in the result, that page is rendered in the browser.
robots.txt tells crawlers what they may fetch and where your sitemap is. The sitemap lists the pages you want indexed. A staging robots.txt that ships to production can block your whole site.
How to spot it: Open /robots.txt and /sitemap.xml on the live site. Check the sitemap lists your real routes and nothing private.
A canonical URL tells search engines which address is the real one. If every page's canonical points at the home page, or a noindex left over from staging is still set, pages disappear from search without any error.
How to spot it: Search the code for noindex and canonical. On each important page, check the canonical is that page's own URL.
05Social sharing tags
Open Graph and Twitter tags decide the title, text and image people see when your link is shared in Slack, LinkedIn or X. Without them you get a bare URL.
How to spot it: Check every important page has og:title, og:description, og:image and og:url, with absolute URLs and an image of about 1200×630.
06Headings and page text
One h1 that says what the page is about, a logical h2/h3 outline and the html lang attribute help search engines and screen readers understand the page.
How to spot it: Each page has exactly one h1, headings don't skip levels, and <html lang> is set.
07Links crawlers can't follow
Crawlers follow <a href> links. Navigation built from click handlers, and missing pages that return 200 instead of 404 ('soft 404s'), waste crawl time and hide pages.
How to spot it: Check navigation uses real links, and that an unknown URL returns a 404 status, not a page that says 'not found'.
Alt text is how search engines and screen readers know what an image shows. Images without a width and height make the page jump as they load (layout shift).
How to spot it: Look for <img> tags without alt, width and height, and for multi-megabyte images in public/.
Risky
<img src="/hero.png" />
Better
<Image src={hero} alt="Findings grouped by priority" priority />
09Structured data that doesn't fit
JSON-LD helps search engines understand what a page is: an organisation, a product, an article, a breadcrumb trail. Google no longer shows FAQ or HowTo rich results, so put the effort into the types that still count.
How to spot it: Search the code for application/ld+json, and validate one page with Google's Rich Results Test.
Quick self-check
How does your project do?
Tick each one that's true today. Anything left unticked is worth a closer look.
Tick what's true for your project. 10 checks.
How Forge checks this
A second opinion on your code, from the SEO scan.
Reads your routes, layouts, metadata, robots and sitemap code.
Fetches your live home page, /robots.txt, /sitemap.xml and important pages, and compares them with the code.
Gives a 0-100 score and a page-by-page table, so you see which pages are weakest.
Each finding names the file to change, with the line it found.
Example findingSEOHighConfirmed in codeProduct pages share the home page's titleapp/products/[slug]/page.tsx:1"use client";client-only page: no generateMetadata, so every product shows the root title
Questions
Does Google run JavaScript?
Yes. Googlebot renders pages with a recent Chrome, but rendering is queued after crawling, which delays indexing. Other search engines, link previews and many AI crawlers don't run JavaScript reliably. Server rendering, static generation or pre-rendering removes the risk.
Is a single-page app bad for SEO?
Not for an app behind a login. For the pages you want found (landing, pricing, docs, blog), serve the content in the HTML: static generation, server rendering or pre-rendering.
Do I still need FAQ or HowTo structured data?
Google no longer shows HowTo rich results (since 2023) or FAQ rich results (since 2026). The markup does no harm, but Organization, Product or SoftwareApplication, Article and BreadcrumbList are better uses of your time.
How long until my fixes show in Google?
Recrawling takes days to weeks. Submit your sitemap in Google Search Console and use URL Inspection on your most important pages to speed it up.