Category: SEO

  • The start date decides the year

    The start date decides the year

    TL;DR

    A roofer calls in May, after the first storms, wanting to be visible for the season. The season is already running and whatever we build now lands in August. This is the most consequential decision in seasonal trades marketing and it is almost never treated as a decision at all.

    A roofer calls in May, after the first storms, wanting to be visible for the season. The season is already running. Whatever we build now lands in August.

    This is the single most consequential decision in seasonal trades marketing and it is almost never treated as a decision. It is treated as when somebody got round to it.

    The arithmetic

    Work takes weeks to be crawled and reflected, months to settle into position, and longer again in a competitive local market. Call it three months before anything is meaningfully working, on a site that is otherwise healthy.

    Now put that against a demand curve that is not flat. Roofing spikes after storms and through late summer. Heating spikes on the first genuinely cold night. Cooling spikes in the first real heat.

    Start three months before the spike and you arrive as demand does. Start at the spike and you arrive as it ends, having paid for the whole thing and captured the tail.

    The honest version of the advice: the best time to start is the quiet season, which is precisely when nobody feels like spending money on marketing. That tension is the whole problem and it is worth naming rather than talking around.

    What to do if the call comes in May anyway

    Because it will, and “you should have started in February” is not advice.

    • Buy the season, build for the next one. Ads carry the near term while the organic side is built. This is the one situation where I will straightforwardly recommend spending on ads first. The demand is real, it is time-boxed, and there is no way to make organic arrive faster.
    • Fix the things that work immediately. The Business Profile category, the phone number, the service area, whether the site loads on a phone in a driveway. None of those take three months.
    • Fix intake before visibility. More calls into an unanswered phone is not a win. MIT’s study of 15,000 leads and 100,000 call attempts found a twenty-one-fold drop in the odds of qualifying a lead between a five and a thirty minute response, and in emergency trades the caller is working down a list, so the drop is steeper still.

    What to do in the quiet months

    This is the part that gets skipped, and it is where the year is actually won.

    Publish the content that takes time to mature. The pages you want ranking in October should exist in June.

    Collect reviews while the work is fresh. A trade that goes quiet for months has a review timeline with a visible gap in it, and BrightLocal’s 2026 survey of 1,002 US consumers found 74% look for reviews written in the last three months. Ask every customer during the busy season, not after it.

    Photograph the jobs. Nobody wants to stage a photograph in November. The gallery you need next year is on somebody’s phone right now.

    The thing I would stop doing

    Switching the whole programme off in the off-season and on again in the spring. It is intuitive and it wastes the previous year’s work. Position decays, the review timeline gaps, and the rebuild starts partway back down the hill.

    A smaller continuous programme beats a large intermittent one in every seasonal account I have seen. The spend curve should be flatter than the demand curve, not matched to it.

    The other reason to be careful about arriving at the peak: succeeding at the wrong moment is its own problem. I have ended campaigns because they worked. A business that cannot answer the phone during a storm week does not benefit from being first in the pack during it.

    The short version

    1. Three months from work to results. Demand is a spike, not a line.
    2. Start in the quiet season, exactly when nobody wants to spend.
    3. If the call comes late: buy the season, build for the next one.
    4. Profile, phone, service area and mobile load all work immediately.
    5. Fix intake first. Odds of qualifying drop 21-fold between five and thirty minutes.
    6. Collect reviews and photographs in the busy months. 74% of people want reviews from the last three.
    7. Do not switch off in the off-season. Flatter spend beats matched spend.

    If a site should be ranking and it isn’t, that’s the work I do. Roofing and HVAC SEO covers seasonality, the profile and the phone. If you’re not sure which of several plausible problems is costing you, that’s what an SEO audit is for.

  • A personal injury firm’s intake is an SEO problem

    A personal injury firm’s intake is an SEO problem

    TL;DR

    I have watched a firm spend a year improving its visibility while losing people at the front door, and the marketing was working the whole time. Odds of qualifying a lead drop twenty-one-fold between five minutes and thirty. At $183 to $442 a lead, that half hour is the most expensive in the firm.

    I have watched a firm spend a year improving its visibility while losing people at the front door, and the marketing was working perfectly the whole time.

    That is the uncomfortable version of this job. Everything I control ends at the moment somebody calls. Everything that decides whether the money was well spent happens after.

    The number that makes it an SEO problem

    MIT’s Professor James Oldroyd, working with InsideSales.com, analysed more than 15,000 leads and 100,000 call attempts across six companies and found a twenty-one-fold drop in the odds of qualifying a prospect when response time went from five minutes to thirty.

    Five to thirty. Not five minutes to the next day.

    Now put that next to what a personal injury lead costs. First Page Sage tracked 49 PI firms across 36 states and put the average at $442 through Google Search Ads and $183 through SEO. Their data, their clients, and they sell SEO. I quote it with that caveat attached and I am also an SEO consultant quoting it to you.

    Either number, multiplied by a twenty-one-fold drop in qualification odds, is the most expensive half hour in the firm.

    It also decides whether the case for organic makes sense at all. The whole argument for building search over buying clicks rests on a cheaper cost per lead compounding over time, and a lead that is never contacted costs the same as one that signs. Intake is the multiplier sitting underneath both columns.

    Why it is worse in personal injury than almost anywhere

    The caller is shopping in parallel. Somebody in the days after an accident is not calling one firm. They are working down a list, and whoever engages first has an enormous advantage that has nothing to do with quality.

    The competition answers. The firms spending five figures a month on ads have staffed intake, because they have already done this arithmetic. You are not competing against nobody.

    The calls do not arrive at eleven on a Tuesday. Accidents happen at weekends and at night. The hours when your visibility is worth most are the hours the office is closed.

    What I check before agreeing a campaign

    I ask to call the firm, from an unknown number, at a time nobody is expecting it. It is a five minute test and it has changed the shape of more engagements than any crawl I have run.

    • Who answers, and after how many rings.
    • What happens at 7pm on a Saturday. Voicemail is an answer. It is just not a good one, and it should be a known quantity rather than a surprise.
    • Whether the form goes anywhere anybody watches. I have found forms routing to a mailbox nobody had opened in months, and forms that had silently stopped sending after a plugin update.
    • How long a form submission takes to get a reply. Submit one and time it.
    • What the person answering can actually do. Take details and promise a callback, or start qualifying the case.

    What I would rather do than sell a campaign

    If the answers are bad, fix that first. It is cheaper than SEO, it works immediately, and it improves the return on every channel the firm is already paying for.

    Doubling visibility for a firm that misses half its calls doubles the number of people who now have a poor opinion of them. That is not a neutral outcome. I have stopped campaigns over exactly this, in trades rather than law, and the mechanism is identical.

    The part that is genuinely not my job

    I can tell a firm their intake is losing cases. I cannot staff it, and I have no useful opinion on whether they should hire, use an answering service, or take calls themselves.

    What I will not do is take the money, produce the leads, and let the firm conclude twelve months later that SEO does not work for them. It worked. It arrived at a front door nobody was standing behind.

    The short version

    1. Everything I control ends when the phone rings.
    2. Odds of qualifying drop twenty-one-fold between five and thirty minutes.
    3. At $183 to $442 a lead, that half hour is the most expensive in the firm.
    4. PI callers shop in parallel and your competitors have staffed intake.
    5. Call the firm yourself, unannounced, at a bad time. Five minutes.
    6. Submit the form and time the reply. Some of them go nowhere.
    7. Fix intake before buying visibility. It is cheaper and it lifts every channel.

    If a site should be ranking and it isn’t, that’s the work I do. Personal injury SEO covers visibility, and it is worth nothing without the intake behind it. If you’re not sure which of several plausible problems is costing you, that’s what an SEO audit is for.

  • One ‘Personal Injury’ page, or fifteen?

    One ‘Personal Injury’ page, or fifteen?

    TL;DR

    Somebody hit by a truck is not searching for a personal injury attorney. They are searching what happened to them. Most firm sites answer fifteen different questions with one page and a bulleted list. Five to eight case type pages, on cases you take, where the process genuinely differs.

    Somebody hit by a truck on the interstate is not searching “personal injury attorney”. They are searching what happened to them.

    Most firm sites have one Personal Injury page with a bulleted list underneath: car accidents, truck accidents, motorcycle, slip and fall, dog bites, wrongful death. That page is trying to be the answer to fifteen different questions asked by fifteen different people in fifteen different states of mind.

    Why the single page loses

    The head term is also the most expensive and most defended query in the vertical. Competitive personal injury clicks run into the hundreds of dollars precisely because everybody is fighting over them, and a general PI page is fighting there with no differentiation.

    The case-type queries are a different market. Lower competition, far higher intent, and the person searching has already self-selected into a case you can evaluate. “Truck accident lawyer” is a person with a case. “Personal injury attorney” is often a person browsing.

    There is also less room on the page than there used to be. SparkToro’s analysis of Similarweb’s US clickstream found 68.01% of Google searches ended without a click in early 2026, up from 60.45% two years earlier. Competing broadly for a shrinking share of clicks is a worse bet every year. Competing specifically, where the query is unambiguous, is not.

    Where the line is

    A page per case type is legitimate. A page per case type per city is usually not, and Google’s spam policies name the difference: doorway abuse includes “pages targeted at specific regions or cities that funnel users to one page” and “substantially similar pages that are closer to search results than a clearly defined, browseable hierarchy.”

    A truck accident case and a dog bite case have nothing in common: different defendants, different insurers, different regulations, different evidence, different timelines. Writing both is writing two documents.

    “Car accident lawyer Springfield” and “car accident lawyer Shelbyville” are the same document with a noun swapped. Same test as always: could you write the second page without looking at the first?

    Which case types get a page

    • The ones you actually take. Stated plainly because it is routinely ignored. A medical malpractice page on a firm that refers malpractice out generates calls you will hand away and dilutes the pages you want ranking.
    • The ones with real volume. Car accidents carry most of the searches in most markets. Truck, motorcycle and premises liability are usually worth their own page. Beyond that it thins out fast.
    • The ones where the process genuinely differs. Trucking cases involve federal regulations, a corporate defendant and evidence that disappears if nobody sends a preservation letter in the first fortnight. That is a page. “Bicycle accident” on a firm that treats it identically to a car accident is a section, not a page.

    For most firms that is five to eight pages, not fifteen.

    What goes on one

    The questions in the order the person has them. Who pays. How long this takes. What happens to my medical bills in the meantime. Do I have to go to court. What is my case worth, all answered honestly, including why nobody can tell them precisely.

    Then the part only you can write: what you do first on this case type, what evidence you go after, what you have seen go wrong. On a truck case that might be the preservation letter and the electronic logging data. That paragraph is the difference between a page and a brochure.

    What this does not fix

    Better pages produce more leads, and leads are not cases. The economics only work if the intake works. A firm converting well at $442 a lead is in a better position than one converting badly at $183, and no amount of page structure touches that.

    The short version

    1. People search the case type, not the practice area.
    2. The head term is the most expensive and least differentiated query you can chase.
    3. 68% of searches now end without a click. Broad competition is a worsening bet.
    4. Case type pages are a hierarchy. Case type × city pages are a doorway.
    5. Five to eight pages: ones you take, with volume, where the process genuinely differs.
    6. The paragraph on what you do first is what makes it a page rather than a brochure.

    If a site should be ranking and it isn’t, that’s the work I do. Personal injury SEO covers the page set, the profile and the economics. If you’re not sure which of several plausible problems is costing you, that’s what an SEO audit is for.

  • What a DWI practice and a federal practice do not share

    What a DWI practice and a federal practice do not share

    TL;DR

    Both are criminal defence and on a website they are usually the same page. As businesses they share almost nothing. A DWI client decides in an evening, on a phone. A federal client researches for weeks, often before charges are filed. Length is right for one and wrong for the other.

    Both are criminal defence. On a website they are usually the same page. As businesses they have almost nothing in common, and treating them as one thing is why so many defence sites read as generic.

    The difference runs through everything: how the client searches, how long they take to decide, what they need to read, and what evidence of competence they will accept.

    How the client arrives

    DWI. Fast, high volume, mostly mobile, often within a day or two of the arrest. The search is the charge plus the place. The person is anxious but the situation is comprehensible. They know roughly what a DUI is, they want to know what happens now.

    Federal. Slow, low volume, and frequently the search starts before any charge exists: a target letter, a subpoena, a visit from agents. The queries are different in kind: not “federal defence lawyer” but the specific situation. The person may research for weeks and consult several firms.

    One of those is a decision made in an evening. The other is a decision made over a month with a family involved.

    What that changes on the site

    DWI pages should be fast, direct and mobile-first. Deadlines up top. The DMV hearing window is the classic one and it is genuinely urgent. Short paragraphs. A phone number that works with a thumb. Nobody facing a DUI reads three thousand words at eleven at night.

    Federal pages should be long, and it is the one place I would say that without hedging. Somebody deciding who defends them against a federal indictment will read everything you have written. Depth is the trust signal. This is the opposite of my usual position on length and it is the audience that justifies it.

    The evidence each audience accepts

    DWI clients behave like ordinary local consumers. They read reviews. BrightLocal’s 2026 survey of 1,002 US adults found 97% read reviews for local businesses and 31% will only use one rated 4.5 or above, and a DWI client is comfortable leaving one afterwards, because the outcome is a relief rather than something to bury.

    Federal clients accept almost none of that. They want to know which courts you are admitted to, whether you have tried a case in that district, what you have published, whether you have been a prosecutor. The substitutes for testimony matter far more at that end of the docket.

    Which produces the pattern I wrote about in the parent post: review volume tracks charge severity inversely. The firms with the most reviews are usually doing the least serious work.

    The map pack splits them too

    DWI is a local pack business. Distance matters, proximity matters, the profile matters.

    Federal is not. The relevant court may be a hundred miles away and the client will travel or hire remotely. Optimising a federal practice for the local pack is effort spent in the wrong competition entirely. the website and the pack are two different contests and federal lives almost entirely in the first.

    Google’s local ranking guidance makes the reason plain: the pack weighs relevance, distance and prominence, and distance is “how far each business is from the customer who’s searching.” For a federal client that measurement is close to meaningless, because they are not choosing a lawyer by driving time, so the entire mechanism the DWI side depends on simply does not apply.

    What I would actually do

    • Decide which practice the site is for. Most firms do both and lead with neither, which is how you get a home page that says “aggressive representation” and nothing else. Lead with the one that pays the bills and give the other its own properly built section.
    • Do not share templates between them. A federal page built on the DWI template will be too short and too transactional. A DWI page built on the federal template will bury the deadline under nine hundred words.
    • Separate the intake. A DWI enquiry needs answering in minutes. A federal enquiry needs a conversation. Same form, same phone tree, and one of them is being handled wrong.

    The short version

    1. Two businesses wearing one label.
    2. DWI: fast, mobile, deadline-driven, decided in an evening.
    3. Federal: slow, researched, often pre-charge, decided over weeks.
    4. Length is right for federal and wrong for DWI. The audience decides, not a rule.
    5. DWI clients read and leave reviews. Federal clients read credentials.
    6. DWI is a map pack business. Federal is not.
    7. Different templates, different intake. Sharing them means one is handled wrong.

    If a site should be ranking and it isn’t, that’s the work I do. Criminal defense SEO covers both ends of the docket. If you’re not sure which of several plausible problems is costing you, that’s what an SEO audit is for.

  • County and court pages that are not doorways

    County and court pages that are not doorways

    TL;DR

    A defence firm covering four counties wants a page for each. Reasonable instinct, and the easiest way to build a doorway set without meaning to. Location pages are not prohibited. Near-identical pages funnelling to one destination are. Make it about the court, not the town: twelve towns sharing four courthouses is four pages.

    A defence firm covering four counties wants a page for each. Reasonable instinct, because the courts genuinely are different, and clients search that way.

    It is also the single easiest way to build a doorway set without meaning to, and the difference between the two versions is not subtle once you know what to look for.

    What Google actually prohibits

    Worth quoting rather than paraphrasing. Google’s spam policies define doorway abuse to include “having multiple domain names or pages targeted at specific regions or cities that funnel users to one page” and “creating substantially similar pages that are closer to search results than a clearly defined, browseable hierarchy.”

    Notice what is not prohibited: having a page about a place. What is prohibited is a set of near-identical pages whose only function is to catch a place name and hand the visitor to the same destination.

    So the question is never “are location pages allowed”. It is “is this page a document about something, or a net”.

    The test

    Could you write the second page without looking at the first?

    For two genuinely different courts, yes. Easily, and you would struggle to make them similar even if you tried. For two towns in the same judicial district served by the same courthouse under the same DA, no. You would be writing the same page and changing a noun.

    Which points at the right unit. The page should be about the court, not the town. Four counties with four different courthouses is four pages. Twelve towns inside those four counties is still four pages, because the twelve towns share four courts and nothing else distinguishes them.

    That reframing usually reduces a proposed forty-page project to six, and makes the six defensible.

    What genuinely differs, and therefore what goes on the page

    This is the part that makes the page real, and a defence lawyer already knows all of it. It just rarely gets written down.

    • The court itself. Where it is, parking, which building, what happens at the door, how long a first appearance typically takes.
    • Local procedure. Arraignment scheduling, whether the county runs a diversion programme and who qualifies, bond practices, how continuances are handled.
    • The prosecutor’s office. Not gossip. Observable policy. Whether that DA charges certain offences more aggressively, whether they have a standing position on first-offence DUI, how plea discussions usually open.
    • What you have actually seen there. The judgement layer. How this court differs from the neighbouring one in practice, and what you do differently because of it.

    Any single one of those makes the page non-substitutable. All four make it the most useful page on the subject anywhere, which is the actual goal.

    The pack question, which people conflate with this

    A county page will not put you in the map pack for that county. The pack ranks your Business Profile, and distance is measured from where your office actually is, and a page cannot move it.

    What the county page does is compete in the ordinary results, where there is no distance constraint. That is the right expectation to set before anyone writes six pages hoping for a pack position they cannot get.

    Google is explicit that the pack runs on relevance, distance and prominence, and adds that there is “no way to request or pay for a better local ranking on Google.” A page is not one of those three inputs. It is worth saying out loud to a firm that has been sold county pages as a map pack strategy, and worth reading alongside what actually decides the pack in this vertical, which is rarely what people expect.

    How many, honestly

    As many as you have distinct courts and real knowledge of. Usually three to six for a firm that genuinely practises across a region.

    If the answer is “we would take a case anywhere in the state”, that is not a content strategy, and forty pages asserting it will read exactly like what it is. Write the ones you can write properly and let the rest be covered by the practice’s main pages.

    The short version

    1. Location pages are not prohibited. Near-identical pages funnelling to one destination are.
    2. The test: could you write the second without looking at the first?
    3. Make it about the court, not the town. Twelve towns sharing four courthouses is four pages.
    4. Court logistics, local procedure, the DA’s observable policy, and what you have seen there.
    5. A county page will not get you into the map pack. Distance is measured from your office.
    6. Three to six pages, written properly. Not forty asserting statewide coverage.

    If a site should be ranking and it isn’t, that’s the work I do. Criminal defense SEO covers the page set and the local layer. If you’re not sure which of several plausible problems is costing you, that’s what an SEO audit is for.

  • E-E-A-T when your clients can never be named

    E-E-A-T when your clients can never be named

    TL;DR

    Almost every piece of trust advice assumes you can point at satisfied customers. A criminal defence firm can do almost none of that, and the better the outcome you delivered, the less your client wants a permanent public record of it. Demonstrated legal reasoning is the substitute, and nobody can copy it.

    Almost every piece of advice about demonstrating experience and trust assumes you can point at satisfied customers. Testimonials, case studies, named results, before-and-afters, a wall of reviews.

    A criminal defence firm can do almost none of that. The better the outcome you delivered, the more your client needs no permanent public record that they were ever your client.

    So the standard playbook is unavailable, and the honest question is what actually replaces it.

    The scale of what you are giving up

    Worth being clear-eyed about the cost before working around it. BrightLocal’s 2026 Local Consumer Review Survey, covering 1,002 US adults in February 2026, found 97% read reviews for local businesses, and that 31% will only use one rated 4.5 or above.

    Those respondents were answering about restaurants and plumbers, and I have argued elsewhere that the finding does not transfer cleanly to a serious criminal charge. But it is not zero either. Some proportion of people facing a charge will look you up the way they look up anything, and find less than they expected.

    What actually substitutes

    Five things, in rough order of how much work they do.

    Demonstrated reasoning about the law. This is the strongest and the most under-used. A page explaining how a particular charge is actually defended, covering what the prosecution has to establish, where those cases typically break down and what you look at first, demonstrates competence directly rather than reporting it second-hand. It is also the thing nobody else can copy, because it is your judgement.

    Verifiable facts about the lawyer. Bar admissions, years in practice, courts admitted to, former prosecutor experience, teaching, published writing, bar association roles. These are checkable, which is precisely what makes them useful in the absence of testimony.

    Case results, within your bar’s rules. Most jurisdictions permit outcomes without identifying details and with a disclaimer. “Felony assault charge dismissed at preliminary hearing, 2024” names nobody. What your bar allows varies enormously and it is worth getting that answered precisely rather than avoiding the category entirely out of caution.

    The reviews you can get. Not every client is unnameable. A DWI client who is relieved and unembarrassed will often review you happily. Ask those clients. A firm with fifteen genuine reviews from the cases where reviewing is comfortable is in a better position than one with none on principle.

    Being visibly a real person. A photograph of the actual lawyer, a real biography, a phone number that reaches somebody. Sounds trivially obvious; a surprising number of defence sites are anonymous stock photography and a form.

    What Google is actually asking for

    Worth reading the source rather than the commentary. Google’s helpful content guidance frames this as a set of self-assessment questions: does the content demonstrate first-hand expertise, would a reader trust it, is it clear who produced it and what their credentials are.

    Nothing in that requires customer testimony. It requires evidence of expertise and clarity about who is speaking. A defence firm can satisfy both completely without naming a single client.

    What I would stop doing

    • Vague authority claims. “Aggressive representation”, “decades of combined experience”, “thousands of cases won”. Unverifiable, universal, and they read as filler because they are.
    • Hiding behind the firm. Pages written as “we” with no named lawyer attached. The expertise belongs to a person and the page should say which one.
    • Buying reviews to fill the gap. Beyond the obvious problem, a defence practice with two hundred glowing reviews and no serious cases in evidence is telling a story to anyone who reads carefully.

    The short version

    1. The standard trust playbook assumes nameable clients. You do not have them.
    2. 97% of consumers read reviews, so the constraint is real even if the finding does not transfer cleanly.
    3. Demonstrated legal reasoning is the strongest substitute and nobody can copy it.
    4. Verifiable credentials do the work testimony would.
    5. Case results are usually permitted, but find out exactly what your bar allows.
    6. Ask the clients who can comfortably review you. Not all cases are unnameable.
    7. Google asks for demonstrated expertise and clear authorship, not customer quotes.

    If a site should be ranking and it isn’t, that’s the work I do. Criminal defense SEO covers trust signals in a practice where clients cannot be named. If you’re not sure which of several plausible problems is costing you, that’s what an SEO audit is for.

  • A page per charge, not a page per practice area

    A page per charge, not a page per practice area

    TL;DR

    Nobody arrested last night is searching for a criminal defense attorney. They are searching the charge, by name, usually with the city attached. Most firm sites have one page called Criminal Defense with a bulleted list under it, and it meets nobody. Six to twelve charges, not forty.

    Nobody arrested last night is searching “criminal defense attorney”. They are searching the thing that happened to them: the charge, by name, usually with the city attached.

    So the page that should meet them is a page about that charge. Most defence firm websites have one page called Criminal Defense with a bulleted list of everything the firm handles, and it meets nobody.

    Why the practice area page loses

    Three reasons, and the third is the one people miss.

    • It matches the wrong query. A page listing twelve offence types is diffusely relevant to all of them and specifically relevant to none. A page about one charge can answer that charge’s questions properly.
    • It cannot answer the actual question. Someone facing a DUI wants to know about licence suspension, the breath test, the DMV hearing deadline, what a first offence typically carries. Someone facing a domestic violence charge wants to know about the protective order and whether they can go home. Those have nothing in common. A page trying to serve both says nothing to either.
    • It is the wrong emotional register. The bulleted list reads as a menu of services. The person reading it is frightened and looking for evidence that you have handled exactly their situation before. Specificity is the reassurance.

    Where the line is, because this can go wrong

    A page per charge is legitimate. A page per charge per city usually is not, and the difference matters because Google names the failure mode directly.

    Google’s spam policies define doorway abuse as, among other things, “having multiple domain names or pages targeted at specific regions or cities that funnel users to one page” and “creating substantially similar pages that are closer to search results than a clearly defined, browseable hierarchy.”

    Read that against what a charge page is. DUI and assault are genuinely different: different statute, different penalties, different process, different questions. Twelve charge pages are twelve different documents. That is a browseable hierarchy of real distinctions.

    “DUI lawyer Springfield” and “DUI lawyer Shelbyville”, identical but for the place name, are substantially similar pages funnelling to one contact form. Same law, same process, same everything. That is the pattern the policy describes.

    The test I would apply: could you write the second page without looking at the first? For two charges, yes. For two towns, usually not.

    Which charges get a page

    Not all of them, and this is where the discipline is.

    Charges you actually take. Obvious and routinely ignored. A page for a charge you would refer out is a page that generates calls you do not want and dilutes the ones you do.

    Charges with enough volume to be worth the page. DUI, drug possession, domestic violence, assault, theft. Below a certain volume the charge belongs as a section on a broader page, not a page of its own.

    Charges where you have something specific to say. If the page would be a restatement of the statute, it is not a page. It is a Wikipedia entry with your phone number on it.

    On most firms that is somewhere between six and twelve pages. Not forty.

    There is a second reason to keep the number honest, which is that the result page is getting less generous. SparkToro’s analysis of Similarweb’s US clickstream found 68.01% of Google searches ended without a click in January to April 2026, up from 60.45% in 2024. Thin pages competing for a share of a shrinking click are not a volume play any more. Fewer, better-answered charges is.

    What goes on one

    The questions the person actually has, in the order they have them. What am I facing. What happens next and when. What are the deadlines. What are the realistic outcomes. What does this cost.

    Then the firm-specific part, which is the only bit a competitor cannot copy: how you approach this charge, what you look at first, what you have seen work. In a practice where clients can rarely be named, that judgement is doing the work testimonials do everywhere else.

    The short version

    1. People search the charge, not the practice area.
    2. One page for twelve offences answers none of them, because the questions have nothing in common.
    3. A page per charge is a real hierarchy. A page per charge per city is a doorway, and Google names that pattern specifically.
    4. The test: could you write the second page without looking at the first?
    5. Six to twelve charges, not forty. Only ones you take, with volume, where you have something to say.
    6. Answer the questions in the order they are asked, then say how you approach it.

    If a site should be ranking and it isn’t, that’s the work I do. Criminal defense SEO covers the page set, the profile and the local pack. If you’re not sure which of several plausible problems is costing you, that’s what an SEO audit is for.

  • Theme-level fixes, or the same fix again in three weeks

    Theme-level fixes, or the same fix again in three weeks

    TL;DR

    I fixed a heading problem on a client site, confirmed it, wrote it up and moved on. Three weeks later it was back. Nobody had touched the page. A theme update had restored the template. The fixes most likely to be silently reverted are the ones that were invisible in the first place.

    I once fixed a heading problem on a client’s site, confirmed it, wrote it up, and moved on. Three weeks later it was back. Nobody had touched the page. A theme update had restored the original template and taken my change with it.

    Nobody noticed for months, because heading markup does not show on screen. That is the whole trap: the fixes most likely to be silently reverted are the same ones that were invisible in the first place.

    Why it happens

    Most site owners edit in the interface. The interface writes to whatever layer is easiest: a page, a block, a builder module, sometimes a database row that overrides the template.

    The template underneath still says what it always said. So the fix and the source of the problem now disagree, and the next thing that touches the template wins. A theme update, a builder version bump, someone duplicating a page from the old layout, a section reset.

    The change was never wrong. It was just made in the wrong layer, and the wrong layer is the default one.

    Which fixes are at risk

    Anything invisible. Headings, canonicals, meta robots, structured data, alt text on template-driven images. If reverting it produces no visible change, nobody will spot the revert.

    Anything you did in a page builder on one page that is really a template problem. Fixing seven blank H1s on one home page is a page edit. The builder emitting a heading per section container is a template problem, and it will emit them again on the next page anyone builds.

    Anything a plugin also has an opinion about. Two things writing the same tag is a fight you will lose at an unpredictable moment.

    Visible things are self-policing. If a theme update moves your logo, someone will mention it that afternoon.

    This is why heading problems in particular survive for years. They are emitted by a template, they are invisible on screen, and any fix made in the editor is sitting in the layer that loses.

    The aggregate picture is consistent with things quietly going backwards. WebAIM crawled the top million home pages in February 2026 and found skipped heading levels on 41.8% of them, up from 39% the year before, with detected errors per page rising 10.1% year on year. Whatever is happening across the web, it is not a slow accumulation of fixes holding.

    The scale of the exposure

    HTTP Archive’s 2025 Web Almanac puts 54% of the web on a CMS, WordPress at 64.3% of those, and roughly 60% of WordPress sites running a page builder, with Elementor at 43%. So a very large share of sites are built in exactly the arrangement where this happens, with an editing layer sitting on top of a template layer, updated independently, by different people, on different schedules.

    The same data shows WordPress passing mobile Core Web Vitals on 45% of sites against 85% for Duda. That gap is not the platform being slow. It is what years of additive edits in the top layer accumulate to.

    Making a fix that holds

    • Fix at the lowest layer that produces the problem. If the theme emits it, change the theme. If a plugin emits it, change the plugin’s setting rather than overriding its output downstream.
    • Use a child theme. Editing a parent theme directly guarantees the update eats it. This is old advice and it is still the single most common cause of reverted work I find.
    • Prefer a setting to a code edit where one exists, because settings survive updates and code edits in the wrong place do not.
    • Then verify after the next update, not after the change. Verifying immediately proves you made the edit. Verifying in a month proves it survived, and those are different claims.

    The unglamorous part that actually works

    Keep a change log. What changed, when, why, and where in the stack.

    I keep one for every site I touch and it sounds like bureaucracy until the first time a theme update reverts something and you genuinely cannot remember whether you fixed it, meant to fix it, or dreamt it. On a site where three people make changes, the log is the only thing that distinguishes “this was never done” from “this was done and undone.”

    It also makes the revert diagnosable. A dated list next to a theme update date usually identifies the culprit in about a minute.

    The short version

    1. Invisible fixes get silently reverted. Mine lasted three weeks.
    2. The editing layer and the template layer disagree, and the template wins eventually.
    3. 60% of WordPress sites run a page builder. This arrangement is the norm, not an edge case.
    4. Fix at the lowest layer that causes it. Child theme, not parent.
    5. Prefer a setting to a code edit.
    6. Verify after the next update, not after the change.
    7. Keep a change log. It is the only way to tell “never done” from “done and undone”.

    If a site should be ranking and it isn’t, that’s the work I do. Technical SEO covers themes, templates and the markup they emit. If you’re not sure which of several plausible problems is costing you, that’s what an SEO audit is for.

  • Auditing a headless build: what is actually different

    Auditing a headless build: what is actually different

    TL;DR

    Most of an audit on a headless build is the same audit. The questions do not change. What changes is that half your usual checks return the wrong answer if you run them the usual way. Crawl twice, raw and rendered, because the difference between the two is the finding.

    Most of an audit on a headless or React site is the same audit. The questions do not change. Is it crawlable, does it say what it is, is anything removing pages from search. What changes is that half your usual checks return the wrong answer if you run them the way you normally would.

    So this is the list of things I do differently, rather than another explanation of what headless means.

    Your tools will lie to you by default

    Turn on JavaScript rendering in the crawler before you start. Screaming Frog and Sitebulb both crawl raw HTML unless told otherwise. On a client-rendered site that produces a crawl of empty shells with no headings, no content and almost no internal links, and a report that looks catastrophic and is meaningless.

    The reverse mistake matters too: once rendering is on, the crawl shows you the rendered page and hides the very gap you are trying to find. Run both. The difference between the two crawls is the finding, and it is the single most useful artefact you can produce on one of these sites.

    Expect it to be slow. A rendered crawl is an order of magnitude slower. Budget for it or sample.

    There is a reason for that, and it is the same reason Google rations rendering. HTTP Archive’s 2025 Web Almanac puts the median mobile home page at 632 KB of JavaScript against 22 KB of HTML. Rendering means fetching and executing all of it, per URL, and neither your crawler nor Googlebot does that for free.

    The head is assembled at runtime

    On a traditional site the <head> is written by a template and you can read it. On a headless build it is often composed by a component, which means it can differ by route, by data state, and occasionally by whether an API call succeeded.

    What I check: the canonical, the title, meta robots and hreflang, in the raw response, on at least one page of each route type. Not one page. One of each type, because the composition logic is per-route and the bugs are per-route.

    The 2025 Web Almanac found an invalid element inside the <head> on 10.3% of mobile pages, most often a stray <img> or <div>. That matters more here than anywhere, because the head closes at the first invalid element, and a head assembled from components is exactly where a stray wrapper div gets introduced by someone who has never thought about it.

    Routing questions that do not exist elsewhere

    • Does every view have a URL? The classic headless failure is content reachable only through interaction, a tab, a modal, a state change, with no address of its own. If it has no URL it does not exist as far as search is concerned, and that is an architecture conversation, not a fix.
    • What does the server return for a URL that does not exist? Many SPA setups return 200 with the app shell for everything, which means every typo is a soft 404 and there is an infinite supply of them.
    • Are the links real anchors? A <div onClick> that routes is not a link. It works for people and it is invisible as a link to a crawler. This is common and it silently removes your internal linking.
    • Is anything a heading that should not be? Component libraries hand out <h2> and <h3> as typography rather than structure, so a card component used forty times produces forty headings. Same failure as a theme wrapping the menu in H2 tags, arrived at through a different route.
    • Is pagination real? Infinite scroll with no paginated URLs means everything past the first screen is unreachable.

    Who you are actually briefing

    The thing that most changes the engagement is not technical. On a WordPress site the person implementing is often the person you are talking to. On a headless build it is a development team with a sprint cadence, a backlog and their own priorities.

    That changes what a good recommendation looks like. “Add a canonical” is not a task. “The canonical is composed in the SEO component and returns undefined on the product route when the API response lacks a slug” is a ticket someone can pick up. Three well-specified tickets beat sixty findings, and on these projects that is not a preference, it is the difference between shipping and not.

    What is usually fine

    Worth saying, because these audits attract alarmism. Google renders JavaScript and has for years. A well-built Next or Nuxt site with server-side rendering has no inherent disadvantage, and some of them are the fastest sites I look at.

    The problems are not caused by the framework. They are caused by rendering decisions made by people who were not thinking about crawlers, which is a reasonable thing for a front-end developer not to be thinking about.

    The short version

    1. Crawl twice, raw and rendered. The difference is the finding.
    2. A raw-only crawl of a client-rendered site is meaningless.
    3. Check the head per route type, not per page. Bugs are per-route.
    4. One page in ten has an invalid element in the head, and everything after it is ignored.
    5. Does every view have a URL? Are the links real anchors?
    6. Check what a nonexistent URL returns. 200 for everything means infinite soft 404s.
    7. Write tickets, not findings. You are briefing a sprint, not a site owner.

    If a site should be ranking and it isn’t, that’s the work I do. Technical SEO covers rendering, routing and the crawl layer. If you’re not sure which of several plausible problems is costing you, that’s what an SEO audit is for.

  • What Googlebot actually sees on a JavaScript site

    What Googlebot actually sees on a JavaScript site

    TL;DR

    There are two versions of every page: the one your server sends and the one that exists after JavaScript has run. Your element inspector shows you the second, which is why it will happily show you a canonical tag that was never in the HTML Google first read. View the raw source instead.

    There are two versions of every page: the one your server sends, and the one that exists after JavaScript has run. Google reads both, but not at the same time and not with the same certainty, and almost every rendering problem I find lives in the gap between them.

    The practical version of this: view the raw source, not the inspector. Your browser’s element inspector shows you the rendered DOM, the page after everything has executed. It will happily show you a canonical tag, a meta description or an H1 that was not in what the server sent.

    The gap is measurable

    HTTP Archive’s 2025 Web Almanac found a canonical tag in the raw HTML of 64.3% of mobile pages and in the rendered HTML of 66.1%.

    That difference, call it two pages in a hundred, is sites where a directive Google uses to decide which URL to index does not exist until a script puts it there. It usually works. Google renders. But you have taken something that could have been a static line in the <head> and made it conditional on a script executing correctly, on a crawler’s schedule, with a rendering budget attached.

    When it fails there is no error anywhere. You get a page canonicalising to nothing and you find out months later.

    Why the second pass matters

    Google crawls the HTML first, and renders later. Sometimes seconds later, sometimes considerably longer, depending on how much it wants your pages. Anything only present after rendering is discovered on that second visit, if it happens.

    Which produces a specific and common symptom: the page is indexed but thin. Google took the raw HTML, found a shell, and indexed that. The content arrived afterwards and may or may not have been picked up. The page ranks for nothing in particular and the owner cannot work out why, because when they look at it, it is full of content.

    The same applies to links. A link that only exists after JavaScript runs is a link Google may not follow on the first pass. If your entire navigation is client-side rendered, your internal linking is conditional.

    Headings behave the same way, and that is the version I find most often. A page whose heading structure is assembled by a component can have a perfect outline in the inspector and nothing but a shell in what the server sent. The audit finds no H1, the owner opens the page and sees one, and everybody concludes the tool is broken.

    The scale of what has to be fetched

    The Almanac’s page weight data, from 16.2 million sites, puts the median mobile home page at 632 KB of JavaScript against 22 KB of HTML. Twenty-eight times more script than document.

    That is the modern web and it is not automatically a fault. But it explains the crawl stats I keep finding: sites where the majority of Googlebot’s requests are scripts and stylesheets rather than pages. Google is not refusing to index the content so much as never getting a clear run at it.

    Checking yours, in about five minutes

    view-source: and Ctrl+F. Look for your H1, your canonical, your main body copy and your primary navigation links. If they are not in what the server sent, they are conditional.

    URL Inspection in Search Console, then “View crawled page”. This is Google telling you what it actually got. It is the closest thing to ground truth available and it is free.

    Disable JavaScript and reload. Crude, fast, and it shows you the shape of the shell.

    Compare word counts. Raw versus rendered. A large gap tells you where the content is coming from.

    What I would actually change

    Not “stop using JavaScript.” That is not advice, it is nostalgia.

    • Put the directives in the served HTML. Canonical, meta robots, title, hreflang. These are small, static, and there is no good reason for them to be assembled at runtime.
    • Serve the primary content and the main navigation server-side if the framework allows it. Most modern ones do, and it is a configuration decision rather than a rewrite.
    • Leave the interactive parts client-side. Filters, carousels, personalisation, the cart. Nobody needs those in the first response.

    The line I would draw: if Google needs it to decide what the page is, send it. If a person needs it to use the page, render it.

    The short version

    1. Two versions of every page. The inspector shows you the wrong one.
    2. Two pages in a hundred have a canonical only after rendering. It works until it doesn’t, silently.
    3. Indexed but thin is the classic symptom. Google indexed the shell.
    4. Client-side navigation means conditional internal linking.
    5. Check view-source: and URL Inspection. Five minutes.
    6. Directives in the served HTML. Interactivity client-side.

    If a site should be ranking and it isn’t, that’s the work I do. Technical SEO covers crawling, rendering and indexing. If you’re not sure which of several plausible problems is costing you, that’s what an SEO audit is for.