
A ranking is the last step of a chain. Before it, a URL has to be crawled, rendered and allowed into the index — and most of the damage we are called in to undo happened in one of those steps, months before anyone looked at the traffic chart. We find the step that broke, show you the evidence, and fix it.
Eight URLs on an imaginary site. Send the crawler and see where it stops. Tap a node to read it, tap Fix to clear the fault and send it again.
A crawler starts at the one URL it knows and follows links outward until the budget runs down. Press Send Googlebot and it will stop at the first thing that gets in the way.
Can Google reach it? Can Google read it? Is Google allowed to keep it? And only then: is it worth ranking? Four gates, in that order. A page that fails gate one cannot be rescued by better writing at gate four, which is why every rescue job starts in the same place.
Most of the work sold as search optimisation lives at the fourth gate — words, links, intent. On a healthy site that is where the gains are. But it assumes the first three gates are open, and on a site that has survived two redesigns, a migration and four developers, they very often are not. The symptom is always misleading: the pages exist, they look fine in a browser, and they do not appear.
All of it is diagnosable. Every one of those failures leaves a trace in a crawl, in the server log, or in the Page Indexing report of your own Search Console — so you never have to take anybody's opinion on it.
The crawler above runs on an invented eight-URL site. It is not a report on any real website, and none of its faults are claims about anybody.
Crawl budget is not a metaphor. It is a real allowance of fetches per site, spent on whatever your URLs happen to return.
Findable by following links, and answering cleanly when asked. No chain, no error, no dead end.
The content has to be in what the crawler receives, or present quickly enough after rendering not to be missed.
Nothing may instruct Google to discard it — no stray noindex, no canonical handing it to another URL.
Only here do words, links and intent decide anything. Everything before is permission to compete, not an advantage.
A site has to answer as one site. If http:// and https://, and www and the bare domain all answer instead of redirecting to one host, you have published four copies of every URL and split every signal between them. Mixed content is the same fault a level down: an HTTPS page requesting a script over plain HTTP has it blocked before it runs, so what that script was meant to put on the page never reaches the crawler.
The rest is arithmetic. Faceted navigation burns crawl budget fastest, multiplying a few filters into thousands of URL parameters that return near-identical listings. Pagination needs the opposite treatment — page two onward stays crawlable and self-canonical, or everything below the fold leaves the index — and a sitemap should carry only canonical, indexable, 200-answering URLs.
A fail: most of the crawl went on filter combinations, and the pages you sell were last visited weeks ago.
The first request gets HTML. If the words you wrote are not in it — because a framework writes them in after a large bundle executes — the page joins a rendering queue handled separately and later. Usually it is processed; not always on the visit you needed.
Mobile is not a variant, it is the version that gets indexed, so copy, structured data and links dropped from the small layout are dropped from search. A missing viewport meta is the crude version; a mobile template serving half the page is the subtle one. Core Web Vitals sit on top: LCP is how long until the largest thing on screen has drawn, CLS how much the layout jumps while it loads, INP how long the page takes to answer a tap. Google grades each on field data from real visits, not the score a lab tool gives you on your own machine.
A fail: the page renders perfectly in your browser, and the copy Google holds is missing the paragraph you wrote it for.
Everything at this gate is an instruction. A noindex says discard this; a canonical naming another URL says index that one instead. Both are obeyed, both are invisible in a browser, and both usually shipped from staging by accident.
Duplicate content is the same conversation without a directive: where several URLs return substantially the same thing — a print view, a category reachable two ways — Google picks one and folds the rest in, on its own reading. Language and region targeting is the Singapore-specific case: en-SG says which English-speaking audience a page is written for, and on a bilingual site reciprocal hreflang annotations say the Chinese and English versions are alternates rather than duplicates competing for one query. Reciprocal is the operative word — an annotation the other page does not return is ignored, which is why most hreflang does nothing.
A fail: Search Console calls the page an alternate with a proper canonical tag, and nobody checks which URL it was handed to.
Structured data does not raise a ranking, and anyone telling you otherwise is selling something. What schema markup does is state, in a form machines parse without guessing, what the page is: an organisation, a service, a question with its answer. That earns eligibility for richer result treatments, and it is increasingly how a page is read by systems that assemble an answer rather than list links.
The other half is your internal link graph. Links from pages crawled often are how importance is communicated and how new pages are found at all — the orphan in the crawler above is the extreme case.
A fail: valid markup describing a product the page never mentions, and a services section reachable only from the footer.
Every firm on this search offers a free check, and most of them mean a three-minute automated score with a sales call attached. An SEO audit Singapore businesses can actually use ends with findings they can act on, in an order, with the evidence attached.
Ours is the one already published on our main search page, moved to where people look for it. It has not changed and it is not a new promise. This is what it contains.
Findings come with screenshots from Google Search Console, Ahrefs and page speed tooling — your accounts where they exist. Every line can be verified independently, and we would rather you did.
Afterwards there is a thirty-minute call to walk through what was found. If you want to work with us, good. If you want to take the document to your own developer, that is a normal outcome and it happens. What we are not doing is finding forty-seven critical issues, most of them trivial, and using the count as pressure.
One honest caveat on the free version. A free diagnostic is a read, not a rebuild. It tells you which gate is closed and roughly what opening it will take. It does not include log-file analysis, a full crawl of a hundred-thousand-URL catalogue, or a rewrite of your internal link graph — those are the paid parts, and we say so before you book the call rather than after.
The deliverable is a document and a call, not a dashboard login you will never open again.
Six deliverables is what everybody lists. What separates one audit from another is the standard each line is judged against.
Every template’s served response: status, redirect hops, canonical target, robots directives, whether the content is in the initial HTML, and the field values behind LCP, CLS and INP. A pass is every commercial template answering 200 in one hop, self-canonical and indexable.
Fixed on staging, proved on the served URLWhat you rank for, at which URL, against whom. A pass is one URL earning the impressions for each commercial term. A fail is two of your own pages trading places on one query.
We propose the give-way; we never delete a pageTitles, meta descriptions, heading structure, internal links pointing in. A pass is one H1 per page, a title leading with what the page is for, and a heading tree that reads as an outline. A fail is one title repeated across a template.
Rewrites arrive as a sheet before anything shipsThe referring domains, and whether each link sits in editorial content or an ad slot. A pass is growth you can explain and anchors that read like sentences. A fail is a cluster of unrelated cheap-TLD domains with commercial anchors — a liability, not an asset.
Judged by the container, not by the rel attributeThe arguments the pages above you make and yours do not — not a keyword list, the actual case. A pass is that every term you chase has one URL making a complete one. A fail is a page that names a service without explaining it.
Output is a brief per gap, not a keyword dumpFindings where the work is small and the blocker is removable now: a directive to delete, a canonical to point home, a chain to collapse, an orphan to link. A pass is that every item names its template and who has to touch it.
Ordered by the traffic behind the templateNo eleven-field form, and no discovery questionnaire before anybody has looked at the site. A URL is enough to begin. Access makes part of it sharper, and we will tell you which part.
Send the domain and nothing else, if that is where you want to start. That alone is enough to crawl every reachable URL and record its status, redirect hops, canonical target, robots directives and internal link count, to see what arrives in the initial HTML before any script runs, and to check the sitemap against what the crawl found.
Tell us if you want it scoped to one section or subdomain; otherwise we take the whole domain.
Read-only Search Console access is the one that changes the report. It makes the Page Indexing report readable line by line — Google’s own record of the decisions it has already taken about your URLs, grouped by reason — and turns position work from a third-party estimate into your own numbers.
Read-only analytics adds which pages earn anything, so triage is ordered by money rather than by severity colour. Neither is a login and neither is a password: both are a permission granted to an email address, revoked in one click.
A written document and a walkthrough call, not a dashboard login. Every finding is stated against the URL or template it sits on, with the evidence it came from and what changing it involves, and with screenshots from your own accounts where those exist, so each line can be checked without us.
If the honest finding is that the site is technically sound and the problem is content or authority, that is what the document says. There is no second version that reads better.
What is missing without access, exactly. No Page Indexing reasons, so indexation is inferred from the crawl rather than read from Google’s own record; no query data, so position work runs on third-party estimates carrying their own crawl dates; no revenue signal, so triage is ordered by template reach rather than by what a page earns. Plenty of sites start exactly that way.
The six in the crawler at the top of this page. Not exotic — what we find over and over on sites that look completely fine in a browser. Each fails silently, which is the whole problem.
| Fault | What it does to the crawl | How you usually notice | What the fix is |
|---|---|---|---|
| Redirect chain | One URL redirects to a second, which redirects to a third. Every hop is a separate fetch out of the same budget, and crawlers follow only a few before giving up. | A page that used to rank slides, and the URL in the result is one nobody has linked to for years. | Point the first URL straight at the final destination and retire the middle hops. |
| Canonical pointing at a parameter URL | The page names a filtered, parameterised copy of itself as canonical — the kind faceted navigation generates endlessly. Google obeys it, and the URL you sell is folded into a filter combination nothing links to. | Search Console says Alternate page with proper canonical tag and nobody reads past the word "proper". | Point the canonical at the clean URL, and stop the filters minting indexable ones. |
| noindex left on | A robots directive tells Google not to keep the page, so it is fetched, read and dropped. Usually added on staging and shipped with the release. | A whole section vanishes from the index within weeks of a launch, and nothing on the page looks wrong. | Remove it, request indexing, add a pre-deploy check so it cannot ship again. |
| Orphan page, no internal links | Nothing on the site links to it. It sits in the sitemap, which is a hint rather than a route — no path to follow, no signal of importance. | A page you paid to have written gets no impressions at all, ever, from the day it went up. | Link to it in prose from pages that are already crawled regularly. |
| A 500 across a URL pattern | The server errors, and not on one URL — on everything sharing that template. Repeated errors are read as a signal to slow down on the whole pattern. | Crawl rate falls across the site, including pages that were never broken. | Fix the template, confirm a clean status across the pattern, let the rate recover. |
| Mixed content on an HTTPS page | An HTTPS page requests a script over plain HTTP. The browser blocks it before it runs, so whatever it was meant to write into the page is absent from the rendered copy. | The page looks right to you, and the rendered version is missing a block of content. | Serve every sub-resource over HTTPS and clear the hard-coded http:// references. |
There is a seventh, and it is not a fault at all: a page that is crawled, indexed, allowed, and simply not good enough to beat what is already there. That is a content decision, and no amount of technical work substitutes for it.
Six steps, in this order, because the order is the method. Click through them: each says what we do and what you see at the end of it.
Every reachable URL, with its status code, redirect hops, canonical target, robots directives, internal link count, and how much content arrives in the initial response. This step needs nothing from you beyond the domain.
What you see: the URL inventory, with every URL that answers with something other than a clean 200 listed separately.
The Page Indexing report lists decisions Google has already made about your URLs, grouped by reason, and most sites have never had it read line by line. A fault Google has not acted on yet is a different priority from one it has.
What you see: each indexing reason, how many URLs sit under it, and which of them matter commercially.
Faults almost never affect one URL. They affect a template, and a template affects a few hundred URLs. Sorting findings by the template that produced them turns a four-hundred-row spreadsheet into six decisions. Most audits skip this.
What you see: the fault list collapsed to templates, ordered by how much traffic sits behind each one.
Nothing goes straight to production. Redirects, canonicals, directives and templates change on a staging copy and ship with a path back. On a live storefront a bad deploy costs more than the fault being fixed.
What you see: a written change list before anything ships, so your developer can veto or take it over.
A change is not done because the CMS saved it. Caching, edge rules and plugins sit between what was saved and what a visitor receives. Every fix is verified by fetching the live URL logged out and reading what came back.
What you see: the before and after of the served response, not a screenshot of an admin screen.
Recovery is neither instant nor uniform. Google re-crawls at its own rate. We re-crawl, request indexing where warranted, and leave monitoring running so the next regression is found by us, not by a quarterly traffic review.
What you see: the same indexing reasons, dated, so the movement is a measurement rather than a claim.
Step 03 in practice: four hundred flagged rows collapse to six templates, and six templates to three decisions.
Step 05 in practice: the live URL is fetched logged out and read as bytes. A saved change is not a served change.
This section is on every page we write, because at this stage what a service cannot do is more useful to you than what it can.
The most common honest answer to "why are we not ranking" is not technical. We would rather say so in week one.
We are not going to print a number here, because a number without the scope behind it is how people end up comparing two quotes that are not for the same work. What we can do is name the variables that move it, so you can read anybody's quote properly — including ours.
Pricing for the wider programme lives on one page rather than being scattered through six: seo pricing singapore. For technical work the scope conversation comes after the diagnostic, because until the site has been crawled neither of us knows what we are quoting for.
Ask what is in the scope before you ask what is on the invoice.
Where this sits next to everything else. This page is the infrastructure layer. The strategy, content and link work around it lives on seo services singapore; visibility inside AI answers is handled on ai seo singapore. If the underlying site is the problem rather than its configuration, that is web development singapore or, on WordPress specifically, a wordpress developer singapore. Keeping a fixed site fixed is website maintenance singapore.
The questions Google shows alongside this search, answered in the first sentence.
There is no single figure, and any page that gives you one without asking about your site is quoting a different job from yours. The cost is set by how many templates the site is built from, whether a staging environment exists, whether we can deploy or have to queue behind someone who can, and whether the fault is a directive to remove or a redirect map to reconstruct. Have the site crawled first — that part is free — then scope against what it found.
Technical work decides whether a page is allowed to compete; the rest decides whether it wins. Technical covers crawling, rendering, indexation directives, architecture, internal linking and speed. The wider discipline adds intent research, the content itself, and authority from other sites. On a broken site the technical half is the whole story; on a healthy one it is hygiene you check, not a project you run.
No, and the technical half is arguably more load-bearing than before. AI answers are assembled from pages that were crawled, parsed and retained, so a page a crawler cannot reach is missing from that pipeline exactly as it is missing from the blue links. What has changed is what a ranking is worth, because an answer rendered above the results absorbs clicks. That is a question about which searches are still worth pursuing, not a reason to stop making a site machine-readable. AI visibility has its own page: ai seo singapore.
An audit is a structured inspection of a site against the things that decide search performance, ending in a prioritised list of what to change. A real one covers technical health, current keyword positions, on-page structure and the backlink profile, plus a content gap against whoever is ranking now. The test is whether somebody can act on it next week. A score out of a hundred is not an audit, and nor is four hundred undifferentiated issues.
Ours is free, and that is not a promotion — it is how we start, because we do not know what a site needs until we have crawled it. You get the six-part findings document and a thirty-minute call, with no obligation. Paid audits exist where the scope is larger: log-file analysis, a very large catalogue, a migration review. If yours needs one, we will say so at the end of the free one.
Yes, and on a small site you should try before paying anyone. Open the Page Indexing report in Google Search Console and read the reasons Google gives for the URLs it has not indexed — that one report catches more real faults than most paid tools. Then run a crawler and look for redirect chains, canonicals pointing elsewhere, and pages with no internal links. Self-auditing fails at triage, not detection: tools flag hundreds of items without saying which template produced them.
It can explain findings well and it cannot gather them. A language model has no access to your Search Console, your server logs or a crawl of your site, so anything it produces without those is a generic checklist, not a diagnosis. Used the other way round it is useful: crawl the site, export the data, then have a model group and explain it. Gathering and verification still happen against the live site.
Indexation can move within days; ranking takes longer and is not guaranteed to move at all. Removing a noindex or fixing a canonical only needs Google to re-crawl and act on the new instruction — fast for pages it visits often, slow for pages it has learned to ignore. Putting a page back into the index only enters it into the competition. We report the indexation change as the outcome of technical work, and treat ranking movement as something to observe rather than promise.
The URL, and nothing else if that is where you want to start — the whole crawl half of the report is read from the live site and from public data. Read-only Search Console access is the useful extra: it is the only way to read Google’s own record of why URLs were or were not indexed. Both are permissions granted to an email address, not passwords.
Not directly, and be careful with anyone who says it does. Structured data states what a page is in a form machines parse without guessing — an organisation, a service, a question and its answer — which makes it eligible for richer result treatments and easier to use for systems that assemble an answer rather than list links. Eligibility is not entitlement: markup describing something a visitor cannot find on the page is grounds for exclusion, and invalid markup is ignored. It is worth doing and worth validating. It is not a ranking lever, and it will not rescue a page that fails an earlier gate.
We crawl it, read what Google has already decided about it, and tell you which of the four gates is closed. If the honest answer is that the site is technically fine and the problem is elsewhere, that is what you will hear.
UPSCALED PTE. LTD. · UEN 202219997D · 80 Playfair Road, #03-02A, Kapo Factory Building, Singapore 367998 · +65 8969 6680 · Mon–Fri 9am–6pm SGT, Sat 9am–1pm