Reassuring numbers aren’t always the ones that matter
A client called us a few months ago, satisfied. His site was on the first page of Google for 12 keywords. His developer had shown him impressive benchmarks for his application. Everything was fine, on paper.
Problem: his online revenue had been stagnating for eight months.
This is the classic trap of cosmetic optimisation. We measure what is easy to measure, not what actually impacts the business. It is exactly the same bias that pushes some companies to neglect their Google Business Profile listing, which is often worth more than a website for finding local clients. In Go development as in local SEO, the difference between a flattering metric and a useful metric can cost months of wasted work — or worse, give a false impression of progress.
Here is what we have learned to distinguish after 15 years of field projects in Normandy.
Go benchmarks: why your “fast” code might be slow where it counts
Go is renowned for its performance. Rightly so. But this reputation sometimes leads to a classic mistake: trusting generic benchmarks rather than contextual measurements.
The problem with decontextualised microbenchmarks
The go test -bench=. command is your friend. Until it gives you false confidence.
A microbenchmark measures an isolated function under ideal conditions: fresh memory, no contention, predictable data. That is not your production environment. In production, you have the garbage collector running, concurrent goroutines, database access with network latency, hot or cold caches depending on traffic.
What we concretely see with our clients developing Go applications: a function that benchmarks at 200ns can take 2ms under real conditions due to execution context. Factor of 10,000. The benchmark was not wrong — it was just measuring the wrong thing.
The real Go performance indicators
Memory allocation first. Not raw speed. Use go test -bench=. -benchmem to see allocations per operation. A function that allocates 0 bytes/op will almost always be faster in production than a function that is twice as fast on paper but allocates massively — because you reduce pressure on the GC.
Profiling under real conditions. pprof integrated into Go is an underused tool. Run a CPU and memory profile on your staging environment with representative traffic. You will often discover that the bottleneck is not where you thought it was.
Latency at the 99th percentile, not the average. If your API responds on average in 50ms but 1% of requests take 2 seconds, your most active users — often your best clients — experience a degraded service. The average hides the real problems.
The optimisation that truly pays off
On the Go projects we have led, three patterns come up systematically as sources of real gains:
Connection reuse. A poorly configured http.Client that creates a TCP connection per request can multiply your latency by 5 to 10 on external APIs. A well-placed sync.Pool on frequently allocated objects can divide your memory consumption by 3.
Serialisation. The stdlib’s encoding/json is correct but not optimal. On hot paths with large volumes, alternatives such as sonic or easyjson can bring 30 to 60% real gain — measurable in production, not just in benchmarks.
N+1 queries. This is not a Go problem, it is an architectural problem. But Go, with its goroutines, gives a false impression that concurrency solves the problem. It masks it. Identifying and eliminating N+1 queries with proper batching or JOINs remains the first optimisation to make, before any runtime tuning.
“Premature optimization is the root of all evil.” — Donald Knuth. What is often forgotten: the rest of the quote specifies that 97% of the time, we should ignore efficiency. Measure first. Optimise then, where it counts.
Local SEO: the difference between being visible and being chosen
Now let’s talk about the other side of the same problem. On the local search front, the most watched metric remains keyword ranking. “We’re first for ‘plumber Caen’.” Good. But does it generate calls?
Here is where it gets interesting: ranking is an intermediate metric. What counts is conversion — the click, the call, the appointment booking. And between ranking and conversion, there is a chain of optimisations that most agencies never touch.
What your competitors are not doing (and probably neither are you)
Local SEO in 2025 is no longer just a well-filled Google Business Profile and a few local backlinks. These basics are necessary, but they no longer differentiate.
What agencies never tell you: Google now evaluates the consistency of your local presence across all signals. This includes mentions of your NAP (Name, Address, Phone) on sector directories, customer reviews and their frequency, the freshness of your local content, and real engagement on your listing (questions/answers, posts, recent photos).
In the audits we carry out for SMEs in Normandy, we almost systematically find the same gaps:
- A Google Business Profile created 3 years ago, never updated
- Incorrect opening hours after the latest changes
- Zero responses to negative reviews (catastrophic signal for Google and prospects)
- No post published for at least 6 months
This is not advanced SEO. It is basic hygiene. Yet fixing these points generates measurable results in 4 to 8 weeks.
The local signals that truly convert
Reviews, their volume and velocity. Not just the overall rating. Google looks at the regularity of new reviews. A business that receives 2 reviews per month is perceived as more active than one that received 50 reviews two years ago and nothing since. Set up a simple process: an automated post-service email with a direct link to your listing. Cost: a few hours of setup once. Impact: ongoing.
Hyper-local content. “Joinery craftsman in Normandy” is too broad. “Carpenter in Caen for half-timbered house renovation” targets a precise intent and geography. This is precisely where the most costly mistakes in a keyword audit occur: targeting flattering terms but with no purchase intent. Geolocated service pages — one per main intervention area — consistently outperform generic pages. This is not keyword stuffing, it is relevance.
The link between your website and your Google listing. Your service pages should point to your Google Business listing. Your listing should point to the right landing pages, not your generic homepage. If someone searches for “electrician Bayeux” and clicks on your listing, they should land on a page that talks about electrical work in Bayeux — not on your homepage that talks about everything.
LocalBusiness structured data. The LocalBusiness schema markup with areaServed, openingHours, and geo is still underused by the majority of SMEs. Yet it helps Google understand precisely who you are, where you operate, and when. According to our audit data, fewer than 20% of SME websites in Normandy implement it correctly.
The question you should ask your agency
“What is my click-through rate on my Google Business listing, and how is it evolving?” If your agency cannot answer with a number and a trend, you are measuring the wrong things.
Google Search Console and Google Business Profile Insights provide this data for free. The metrics to track: calls generated, direction requests, clicks to the website, and queries that trigger the display of your listing. These four indicators tell you whether your local presence generates real activity — not just whether you are visible.
“What is not measured cannot be improved.” — Lord Kelvin. In local SEO, the mistake is to measure visibility rather than the action it generates.
The common thread between Go performance and local SEO
You saw it coming. The connecting thread is the same in both domains: the flattering metric vs the useful metric.
In Go, it is speed in nanoseconds vs P99 latency in production. In local SEO, it is ranking on a keyword vs the number of calls generated. In both cases, optimising the wrong thing gives an impression of progress without real business impact.
Let’s flip the situation: before launching any optimisation, ask yourself two questions. What is the final metric that impacts my revenue? And is what I am measuring today directly correlated with that metric?
If the answer to the second question is no — or “I don’t know” — you are optimising in the dark.
Three concrete actions to implement this week
For your Go code: Run pprof on your staging environment with a representative profile. Identify the top 3 functions that consume the most CPU or memory. Measure their impact in P99, not the average. Optimise only those three functions.
For your local SEO: Open Google Business Profile Insights and look at your call and direction request metrics over the last 90 days. If the full picture seems unclear, that is exactly the scope covered by our natural search engine optimisation service. Respond to all your unanswered reviews — positive and negative — before the end of the week. Publish a post on your listing with a concrete update from your business.
For both: Define a clear final conversion metric. Not a proxy, not an intermediate metric. The real one: revenue generated, incoming qualified leads, signed contracts. Everything else is a tool to reach that target — not an end in itself.
Conclusion: measure what matters, optimise where it pays
After 15 years of supporting companies in their digital development, the observation is always the same. Projects that fail do not lack effort. They lack accurate measurement.
A well-ranked website that does not convert is a cost, not an investment. A Go application fast in benchmarks but slow in production is a disguised technical debt.
At GDM-Pixel, we always start by defining the final metric before touching anything. Because optimising without a clear target means going fast in the wrong direction.
Do you want us to audit your local presence or your technical stack to identify where you are genuinely losing performance? Contact us — we’ll tell you what works, what doesn’t, and why. No bullshit.