# Gerris Corp: full text of gerriscorp.com > Chris Abraham's consultancy: fractional technical leadership, developer specs and QA, AI tools built with Claude Code, project rescue, technical SEO, site speed, migrations, AI search visibility, and reputation management. > Built 2026-10-06. Quote freely with attribution and a link to the source page. --- Source: https://gerriscorp.com/ Updated: 2026-10-05 # Experienced help for the digital work your business needs done I'm Chris Abraham, and Gerris is my consultancy. I'm the person you call when the technical side of your web presence is a mess and nobody owns it. I find out what's wrong, write the plan, direct the developers, human and AI, ship what I can myself, and explain all of it in plain English. I've built websites since 1994 and started Gerris in 2007. I'm based in Arlington, Virginia, just outside Washington, DC, and work with clients across the United States and the English-speaking world. Technical SEO is my deepest specialty and often how clients find me: crawling, indexing, site speed, Cloudflare, 301 redirects, Search Console, and migrations. Around that core I work as a fractional technical lead, write developer specs and check what ships, rescue stalled projects, and build small AI tools with Claude Code and Git. ## When to call me - **Nobody owns the website.** You have a developer, a few vendors, and logins scattered across old inboxes. I can be your [fractional technical lead](https://gerriscorp.com/services/technical-lead/). - **Your developers need a clear brief.** I turn vague complaints into [specs with acceptance criteria](https://gerriscorp.com/services/developers/) and check what ships. - **The project stalled.** The freelancer vanished or the agency handed over a zip file. I handle [rescues and takeovers](https://gerriscorp.com/services/rescue/). - **You want AI to save your team time without new risks.** I build [small, safe AI tools](https://gerriscorp.com/services/ai-automation/) with Claude Code. - **Traffic fell off a cliff.** I run [technical SEO forensics](https://gerriscorp.com/services/technical-seo/) and often find [content the crawler never sees](https://gerriscorp.com/services/crawler-visibility/). - **The site is slow or a migration is coming.** See [site speed and Cloudflare](https://gerriscorp.com/services/site-speed/) and [migrations](https://gerriscorp.com/services/migrations/). - **AI assistants get your business wrong.** See [AI search visibility](https://gerriscorp.com/services/ai-search/). Every service, from agency support to ecommerce, large sites, analytics, and email authentication, is on the [services page](https://gerriscorp.com/services/). ## How I work Every engagement starts with a paid diagnostic: a defined question, the evidence, the cause, and a prioritized plan with an owner for each item. Then I make the changes I have access to, give your developers specs with acceptance criteria for the rest, and check the live result once it ships. Everything is in writing, in Basecamp or by email, with a technical document for the engineers and a plain-English summary for leadership. Details are on [Work With Me](https://gerriscorp.com/work-with-me/). ## Recent work - Traced an e-commerce traffic loss to product templates that mounted specs, FAQs, and reviews only on scroll, which Googlebot never triggered. - Found a consent-management platform hiding every article's content from Googlebot on a WordPress media site. - Combined crawl evidence with an AI-assisted read of a Next.js repository to plan a clinical practice's migration off WordPress media hosting. - Took over a stalled React application for a consumer brand: servers, DNS, repository, and a production outage. - Directed the build of my own AI assistant with Claude Code: 9,600 lines, 106 tests, and safety rules on every action. More in [case studies](https://gerriscorp.com/case-studies/). ## Guides - [How to tell if JavaScript is hiding your content from Google and AI](https://gerriscorp.com/guides/javascript-seo/) - [How AI assistants decide what to say about your business](https://gerriscorp.com/guides/ai-assistants/) - [The website migration SEO checklist](https://gerriscorp.com/guides/migration-checklist/) - [SPF, DKIM, and DMARC for every domain that sends email](https://gerriscorp.com/guides/email-authentication/) See [all guides](https://gerriscorp.com/guides/). ## Tell me what's going on Email [chris@gerriscorp.com](mailto:chris@gerriscorp.com) or call or text [+1 202-352-5051](tel:+12023525051). [Contact me](https://gerriscorp.com/contact/) [Book a call](https://calendly.com/chrisabraham/30) [Hire me on Upwork](https://www.upwork.com/freelancers/chrisjabraham) Updated October 5, 2026 --- Source: https://gerriscorp.com/services/ Updated: 2026-10-05 # Services I'm the person you call when the technical side of your web presence needs someone in charge. Every engagement starts with a paid diagnostic and a clear next step, and I do the work myself, alongside your team. ## Consulting and technical direction - [Fractional technical lead](https://gerriscorp.com/services/technical-lead/): one experienced person who owns your web stack part time, directs your developers and vendors, ships fixes, and reports to leadership in plain English. - [Developer specs and implementation QA](https://gerriscorp.com/services/developers/): a diagnosis turned into a prioritized spec with evidence and acceptance criteria, then verification that the fix actually shipped. - [Agency partner and white-label support](https://gerriscorp.com/services/agency-partner/): technical SEO, AI search, and developer coordination inside your agency's client relationships. - [AI agents and automation, built safely](https://gerriscorp.com/services/ai-automation/): small AI tools built with Claude Code, with human confirmation on every action, tests, and encrypted backups. - [Project rescue, takeovers, and legacy migrations](https://gerriscorp.com/services/rescue/): stalled or inherited projects inventoried, stabilized, and moved off dead software. - [Data cleanup and AI-output audits](https://gerriscorp.com/services/data-cleanup/): contact lists, CRMs, and AI-generated spreadsheets verified, deduplicated, and rebuilt. - [Analytics and measurement](https://gerriscorp.com/services/analytics/): GA4 and Search Console you can trust, and an honest reading of what the numbers prove. - [Strategic advisory and second opinions](https://gerriscorp.com/services/advisory/): advice for founders and executives on AI, search, reputation, and technology decisions. ## Search and site performance - [Technical SEO forensics](https://gerriscorp.com/services/technical-seo/): traffic drops and indexing problems diagnosed with evidence and fixed with your developers. - [Content the crawler never sees](https://gerriscorp.com/services/crawler-visibility/): my signature diagnosis, for pages that look complete to visitors and empty to Google and AI crawlers. - [Large and programmatic sites](https://gerriscorp.com/services/large-sites/): crawling and indexing managed across tens of thousands of pages. - [Ecommerce SEO](https://gerriscorp.com/services/ecommerce/): Shopify, Magento, and WooCommerce fixed at the template level. - [On-page SEO](https://gerriscorp.com/services/on-page-seo/): titles, descriptions, headings, internal links, and structured data, written and published. - [Site speed, Core Web Vitals, and Cloudflare](https://gerriscorp.com/services/site-speed/): fast pages on real phones, and a CDN configured properly. - [Google Search Console](https://gerriscorp.com/services/search-console/): setup, cleanup, and fixes for what the indexing reports reveal. - [Website migrations](https://gerriscorp.com/services/migrations/): URL inventories, 301 redirect maps, launch checks, and cleanup. - [AI search visibility](https://gerriscorp.com/services/ai-search/): SEO, AEO, and GEO, so ChatGPT, Claude, Gemini, Perplexity, and Google's AI features represent you accurately. - [Ongoing SEO and website support](https://gerriscorp.com/services/ongoing-support/): an agreed amount of experienced help each month. ## Local, reputation, and email - [Multi-location and connected businesses](https://gerriscorp.com/services/multi-location/): entity structure, location pages, and sister brands kept distinct. - [Reputation and perception management](https://gerriscorp.com/services/reputation/): for founders, executives, and families who need privacy and an accurate public record. - [Google Business Profile hard cases](https://gerriscorp.com/services/google-business-profile/): suspensions and verification loops, starting with a written diagnostic. - [Email authentication and DNS](https://gerriscorp.com/services/email-and-dns/): SPF, DKIM, DMARC, deliverability, and domain consolidation. ## How engagements are shaped A **diagnostic** answers a defined question with evidence and a recommended next step. An **implementation sprint** delivers agreed fixes, verified against written acceptance criteria. A **migration review** covers a specific launch. A **pilot** builds and demonstrates one useful tool. **Retainers** cover fractional technical leadership, ongoing support, and advisory work. Terms are on [Work With Me](https://gerriscorp.com/work-with-me/). Not sure which fits? [Tell me what's going on](https://gerriscorp.com/contact/) and I'll say where I'd start. Updated October 5, 2026 --- Source: https://gerriscorp.com/services/technical-lead/ Updated: 2026-10-05 # Fractional technical lead For companies with a website, a developer or two, a few vendors, and nobody in charge of how it all fits together. I take that job part time. Plenty of businesses reach the same point. The site runs on a platform someone chose years ago. A freelance developer fixes things when asked. An agency handles marketing. Hosting, DNS, email, analytics, and Search Console logins are scattered across former employees' inboxes. Every problem turns into a week of emails because nobody can see the whole picture. A fractional technical lead is the one experienced person who can. ## What I take responsibility for - **The inventory.** What exists, where it runs, who controls each account, what it costs, and what's missing: repositories, CMS, hosting, DNS, email, analytics, Search Console, CDN, and vendors. - **Priorities.** A short, ranked list of what needs doing, with the business calendar in mind. A risky change can wait until after your busy season; a security hole can't. - **Specifications.** Every piece of work written up for whoever will do it, with evidence, scope, and acceptance criteria. See [developer specs and implementation QA](https://gerriscorp.com/services/developers/). - **Direction.** Briefing your developers and vendors, answering their questions, reviewing their proposals, and keeping work moving. - **Hands-on work.** The fixes I can ship myself, in the CMS, the repository, Cloudflare, DNS, or on the server, under a reviewable change history. - **Verification.** Checking what shipped against what was specified, on the live site. - **Reporting.** A plain-English summary for leadership, kept separate from the technical detail, so a founder can read it in two minutes and forward it. ## Who it suits Owner-led and founder-led companies, marketing teams without engineering leadership, and businesses that inherited a site from an agency or a departed employee. It also suits companies with a capable developer who needs a counterpart to set priorities and translate between the business and the code. ## How it runs 1. **A paid onboarding diagnostic.** Access gathered, the stack inventoried, the urgent problems found, and a first priority list delivered in writing. 2. **A monthly retainer.** An agreed number of hours each month, billed in advance, with a standing status update and a running decision log in Basecamp or by email. 3. **Clear authority.** In writing: what I can decide, what needs your approval, and who implements each kind of work. I advise and coordinate; you keep ownership of the business decisions and the accounts. ## What I bring More than thirty years of building and running websites. Twenty years of WordPress and solid working knowledge of Shopify, Magento, Umbraco, Drupal, Squarespace, Wix, Webflow, and React applications. Linux servers I provision and harden myself. Git and pull-request workflows. Cloudflare, DNS, and email authentication. Deep technical SEO, which is often how clients first find me. And the habit of writing everything down, so the project survives anyone's absence, including mine. ## Common questions ### How many hours a month does a fractional technical lead need? It depends on how much is broken and how much is changing. Most engagements settle into a fixed monthly block after the first month's cleanup, and the block is reviewed each quarter. ### Do you replace the in-house developer? I work with your developer. Most of the value comes from giving a good developer clear priorities, precise specs, and someone who checks the result. **Related:** [Developer specs and QA](https://gerriscorp.com/services/developers/) · [Project rescue](https://gerriscorp.com/services/rescue/) · [Work With Me](https://gerriscorp.com/work-with-me/) [Tell me what nobody owns](https://gerriscorp.com/contact/) Updated October 5, 2026 --- Source: https://gerriscorp.com/services/developers/ Updated: 2026-10-05 # Developer specs and implementation QA Your developers are good. What they need is someone to tell them exactly what to build, why, and how to know it's done, and then to check that it was. That's this service. ## The spec I turn a diagnosis into a developer-ready specification. A recent one ran to 13 pages of prioritized items from P0 to P3, each with: - **Confirmed evidence:** affected URLs, crawl data, screenshots, and the observed behavior. - **Consequence:** what the problem costs, in plain terms, which sets the priority. - **Build steps:** exactly what to change, in which template, file, or setting. - **Acceptance criteria:** a testable definition of done. I generate specs programmatically from the evidence, so they stay consistent and can be regenerated as findings change. The owner gets a separate plain-English summary, so the engineer gets precision and the CEO gets clarity, and neither has to wade through the other's document. ## A sample ticket ``` P0: Product specs, FAQs, and reviews missing from initial HTML Affected: all /products/* templates (example: /products/widget-200) Evidence: spec table, FAQ, and reviews render only after an x-intersect scroll trigger; crawler extraction shows 250 to 400 words per product page versus 2,000+ for category pages. Consequence: product pages clustered in "Crawled, currently not indexed"; organic product traffic falling. Build: render these sections in the server HTML; keep the scroll animation as progressive enhancement only. Acceptance: a plain fetch of the product URL returns the spec table, FAQ, and review text; Search Console live test shows them in the rendered HTML. ``` ## Implementation QA When the developer says it's done, I check, against the acceptance criteria, on the live site, in the page source. CMS panels and staging environments say one thing; the live HTML says what crawlers and visitors actually get. I check for side effects too, such as a fix applied too broadly or a cache that never purged, and I follow up on anything still open. ## Working with your team - Direct work with client developers and IT on cache purges, template constraints, CMS publish behavior, and access. - Content changes separated from template, routing, infrastructure, CDN, and rendering changes, so each goes to the person who can fix it. - Plain explanations in both directions. - Specialist subcontractors brought in and managed when a job needs one, with a clear handoff and a regular status cadence. - A blame-free working relationship. Developers are usually solving five problems at once; my job is to make one of them easy. ## In your repository I work in GitHub repositories through branches and pull requests, and I've made metadata changes directly in React and TypeScript codebases under review. I use AI coding assistants to search a codebase alongside crawl evidence, which finds the file responsible for a problem in minutes instead of days. ## Fractional SEO and AI search lead For teams shipping continuously, I join as the embedded, part-time person who writes the SEO and AEO acceptance criteria for new work, reviews templates and releases before they ship, and catches the change that's about to hide your content from Google. ## Common questions ### Can you change the code directly? When you want me to and access is set up for it, I work through branches and pull requests so your team reviews every change. Many teams prefer that I write the specs and verify the result, which works just as well. ### Which ticket systems do you use? Whatever your team uses, such as Jira, Linear, GitHub Issues, or Basecamp. **Related:** [Fractional technical lead](https://gerriscorp.com/services/technical-lead/) · [Content the crawler never sees](https://gerriscorp.com/services/crawler-visibility/) · [JavaScript SEO](https://gerriscorp.com/guides/javascript-seo/) [Get your developers a real spec](https://gerriscorp.com/contact/) Updated October 5, 2026 --- Source: https://gerriscorp.com/services/agency-partner/ Updated: 2026-10-05 # Agency partner and white-label support Marketing, PR, and web agencies bring me in when a client needs deeper technical SEO, AI search, or developer coordination than the team has in house. I work inside your relationship, on your terms, and your client stays yours. ## Why agencies call - A client's traffic fell and the account team can't explain it. - A client is migrating platforms and nobody on staff has run a migration before. - A client asks about AI search, llms.txt, or why ChatGPT gets their business wrong. - The agency sold SEO and needs someone who can actually implement the technical parts. - A client's developer needs precise specs rather than a slide deck. - A Google Business Profile is suspended and the client is panicking. ## How I work with agencies - **Your relationship, your brand.** I can work white-label, as a named specialist on your team, or as a referral partner, whichever suits the client. - **Your systems.** I work in your Basecamp, Asana, Slack, or email, follow your reporting cadence, and record Loom walkthroughs for your team and your clients. - **Confidentiality.** I sign a mutual nondisclosure agreement before seeing client details, and I never contact your clients outside the arrangement you set. - **Billable, documented work.** Every task is turned into a clear deliverable you can bill and explain: audits, specs, implementation, verification, and reports written for the client to read. - **No territory grabs.** Your client stays your client, during the engagement and after it. ## What I take on for agencies The full range of my work is available through partners: [technical SEO forensics](https://gerriscorp.com/services/technical-seo/), [migrations](https://gerriscorp.com/services/migrations/), [AI search visibility](https://gerriscorp.com/services/ai-search/) and answer-focused content, [e-commerce catalog work](https://gerriscorp.com/services/ecommerce/), [multi-location architecture](https://gerriscorp.com/services/multi-location/), site architecture and city-page priorities, metadata and schema implementation, GBP tracking and recovery, and [developer specs and QA](https://gerriscorp.com/services/developers/). I've worked with PR firms, digital marketing agencies, SEO agencies, and boutique web shops, across WordPress, Shopify, Magento, Umbraco, Wix, and modern JavaScript stacks. ## Arrangements - **Project subcontracting:** a defined deliverable for one client, scoped and prepaid. - **Retained capacity:** a monthly block of hours your team can draw on across clients. - **Referral:** you introduce the client and I contract directly, with a referral fee where agreed. ## Common questions ### Will you talk to the agency's client directly? Only if you want me to. Many agencies prefer that I stay behind the scenes and supply reports and specs for the account team to present; others bring me into calls as their technical specialist. ### Can you match an agency's reporting format? Yes. I write in your templates, use your branding, and keep the technical detail in an appendix your account team can share or hold back. **Related:** [Developer specs and QA](https://gerriscorp.com/services/developers/) · [Technical SEO forensics](https://gerriscorp.com/services/technical-seo/) · [Work With Me](https://gerriscorp.com/work-with-me/) [Talk to me about partnering](https://gerriscorp.com/contact/) Updated October 5, 2026 --- Source: https://gerriscorp.com/services/rescue/ Updated: 2026-10-05 # Project rescue, takeovers, and legacy migrations A developer disappeared. An agency handed over a zip file. The site is down, or running on software nobody can update. I find out what you actually have and get it working again. ## Takeover and handover review The first job in any rescue is finding out what exists. I inventory: - The source code: where it lives, whether it matches what's running, and whether it builds. - The environments: hosting, servers, databases, build pipelines, and process managers. - The accounts and credentials: registrar, DNS, hosting, CDN, email, analytics, payment and third-party services, and who controls each one. - The outstanding work: what was promised, what was half-finished, and what's broken. You get a written handover review and a credible plan, whether that's resuming development, stabilizing what exists, or transferring responsibility to a new developer. ## Hands-on stabilization I work directly on Linux servers over SSH: reading logs, editing application and environment configuration, managing Node applications with process managers, and resolving the port conflicts, failed services, and expired certificates that take sites down. When I provision a server, it's hardened from the start: key-only SSH, root and password login disabled, a firewall that allows only what's needed, and unattended security updates. ## Legacy CMS migrations Old sites on dead software still hold years of content and links. I move them to something maintainable without losing a word or a URL. I moved my own serialized novel, 309 entries from 2005 to 2022, off a broken Movable Type install onto static pages on GitHub Pages, keeping every original URL and the feel of the old site. The same approach works for abandoned WordPress installs, old Drupal and Joomla sites, and hand-built sites nobody can edit. ## Platform migrations Squarespace to Shopify, WordPress rebuilds, moves to static or headless builds, and hosting changes, with content, rankings, and email preserved. That includes DNS planning that leaves mail records untouched, 301 redirects for every changed URL, and post-launch 404 and redirect cleanup. See [website migrations](https://gerriscorp.com/services/migrations/) and the [migration checklist](https://gerriscorp.com/guides/migration-checklist/). ## Restoring self-service Sometimes the rescue is simply getting the client able to edit their own site again: a broken visual editor, lost admin access, or a publishing workflow that stopped working. Restoring that is often worth more than any new feature. ## What a handover review covers A good review answers a handful of plain questions in writing: Do you have the real source code? Can it be built and deployed by someone new? Who holds the domain, the DNS, and the hosting? Are there credentials only the departed developer knows? What would it cost to keep going versus starting over? The answers decide the next step, and they're useful even if someone else does the work. ## Common questions ### Where does a rescue start? With a paid diagnostic: access gathered, the inventory done, and a written plan. Recovery work follows under its own agreed scope. ### Do you host the rescued site? The site goes back onto hosting you own and control, set up properly and documented, so you never depend on one person's server. **Related:** [Fractional technical lead](https://gerriscorp.com/services/technical-lead/) · [Website migrations](https://gerriscorp.com/services/migrations/) · [Email and DNS](https://gerriscorp.com/services/email-and-dns/) [Tell me what you inherited](https://gerriscorp.com/contact/) Updated October 5, 2026 --- Source: https://gerriscorp.com/services/ai-automation/ Updated: 2026-10-05 # AI agents and automation, built safely Small AI tools and automations for real workflows, built with Claude Code and engineered so they can't send, spend, or delete anything without a person saying yes. ## Why I can build these I built my own first. My command-line assistant runs my tasks, calendar, and work pipeline every day, and it was built with Claude Code under the same rules I bring to clients. The numbers, the architecture, and the deploy process are on [Built with Claude Code](https://gerriscorp.com/case-studies/built-with-claude-code/). ## Safety by design Companies are discovering that AI agents need guardrails. Every tool I build for you comes with these: - **You approve every action that leaves the system.** Emails, payments, posts, and deletions wait for a person to confirm a single, specific target. - **Plain code wherever possible.** Routine steps run as ordinary, predictable code; a model is called only for writing and judgment, which keeps running costs to pennies. - **Defense against prompt injection.** Anything the tool reads from outside, such as an email or a web page, is handled as material to work on and never as a command to follow. - **Credentials kept out of the code repository,** in your own secret store. - **Automated tests** that run before every change ships, plus a quick check on the live system afterward. - **Encrypted backups** with a restore you've watched work. - **The right model for the job,** chosen by testing candidates on your real task rather than by brand. ## What I build for clients Focused tools with a clear job: a morning briefing assembled from your tasks, calendar, and inbox; triage of incoming requests into your project tool; a research assistant that gathers sources and drafts a reviewable summary; integrations between systems that don't talk to each other; command-line tools for repetitive website and data chores; and audits of AI output before anyone relies on it. ## How a pilot works Every build starts as a pilot, defined in writing before work begins: - **Inputs:** what goes in, from where. - **Permissions:** which accounts and data it touches, and nothing more. - **Outputs:** what it produces, where it's saved, and how a person reviews it. - **Acceptance:** the tests that prove it works, run in front of you. - **Handover:** the code in your repository, documentation, ownership of every account, and what to do when it fails. ## The questions I ask What's the actual job? What happens after this step? Where is the result saved? Can you recover it if something goes wrong? What does this error mean? Does the system remember what it needs to remember? Those questions decide whether an AI tool saves time or creates a new mess. ## Advice before building Not every team needs a custom tool. Often the right first step is advice: which tasks are worth automating, which off-the-shelf tools fit, what your team's working practices should be, and what should never be pasted into a public AI service. That's available on its own as part of [strategic advisory](https://gerriscorp.com/services/advisory/). ## Common questions ### Who owns what you build? You do. Pilots run on your accounts, and the code, prompts, tests, and documentation are handed over at the end. ### Do you build large AI applications? I build small, focused tools that prove value quickly. When a pilot needs to grow into a larger system, I specify it and work with developers who build at that scale. **Related:** [Built with Claude Code](https://gerriscorp.com/case-studies/built-with-claude-code/) · [Data cleanup and AI-output audits](https://gerriscorp.com/services/data-cleanup/) · [Strategic advisory](https://gerriscorp.com/services/advisory/) [Tell me the workflow you'd automate](https://gerriscorp.com/contact/) Updated October 5, 2026 --- Source: https://gerriscorp.com/services/data-cleanup/ Updated: 2026-10-05 # Data cleanup and AI-output audits Contact lists with thousands of duplicates. CRMs nobody trusts. Confident-looking spreadsheets an AI produced that turn out to be partly invented. I turn messy data into something you can rely on. ## Contact list and CRM cleanup I build Python pipelines for the job instead of cleaning by hand, so the work is repeatable and every change can be traced. A typical pipeline repairs broken export columns, checks names for plausibility by country, recovers missing names from email addresses, catches surnames in the wrong field, merges duplicates across domains and spellings, and gives every record a status explaining what happened to it. I've run this on lists from a few thousand records to nearly ninety thousand. The details are in the [data cleanup case study](https://gerriscorp.com/case-studies/data-cleanup/). The same approach works for CRM exports, newsletter lists, event registrations, and lists merged after an acquisition. ## Auditing AI output AI tools now produce trackers, reports, and spreadsheets that look finished, and some contain values that were never real: actions logged that never happened, timestamps too regular to be genuine, records counted twice. I check AI output the way I check anything else: against the source records, looking for patterns that are too neat, and separating what was verified from what was assumed. Then I rebuild the file so every row is backed by evidence. ## Measurement sanity checks Dashboards mislead, too. A sudden drop in a metric can be a vendor changing its methodology rather than a real decline. I once traced an industry-wide drop in AI visibility scores to exactly that. Before you react to a number, I find out what it actually measures. ## What you get - A cleaned, deduplicated dataset with a status for every record. - The script that did the work, so the cleanup can be rerun on the next export. - A short report: what was wrong, what changed, and what still needs a human decision. ## When to call me Before a big campaign goes out to a merged list, after an acquisition or CRM migration, when a newsletter's bounce rate starts climbing, or when a report built with AI is about to go to leadership. ## Common questions ### Is client data kept private? Yes. Data stays in your accounts or on encrypted storage I control for the duration of the project, it's never pasted into public AI tools, and it's deleted at the end unless you ask otherwise. ### Can you clean data directly inside a CRM? Usually I export, clean, and re-import with your approval at each step, which keeps a record of every change. Direct in-CRM cleanup is possible when the CRM supports it safely. **Related:** [AI agents and automation](https://gerriscorp.com/services/ai-automation/) · [Built with Claude Code](https://gerriscorp.com/case-studies/built-with-claude-code/) [Send me the messy spreadsheet](https://gerriscorp.com/contact/) Updated October 5, 2026 --- Source: https://gerriscorp.com/services/analytics/ Updated: 2026-10-05 # Analytics and measurement you can trust Bad numbers cause bad decisions. A spam traffic spike looks like growth. A tracking change looks like a collapse. A vendor's new methodology looks like lost visibility. I make your measurement accurate, and I tell you what it can and can't prove. ## What I fix - **Ghost and spam traffic** in GA4, filtered out so real visitors are what you measure. - **Conversion tracking** for forms, calls, purchases, and bookings, tested end to end. - **Channel classification,** including AI assistant referrals from ChatGPT, Perplexity, Gemini, and Copilot, which GA4 often lumps into referral or direct. - **Search Console and GA4 reconciled,** so clicks, sessions, and landing pages tell one consistent story. - **Bing Webmaster Tools** set up alongside Google, since Bing's index feeds Microsoft Copilot. - **Dashboards and monthly reports** that connect the numbers to the actions taken and say what comes next, in plain English. ## Reading the data honestly This is where I'm most useful. Before anyone reacts to a number, I ask what it actually measures: - **A short window proves little.** A drop in engagement over a few days after a site change might be the change, a tracking glitch, a holiday, or noise. I treat tracking, engagement, and site defects as separate questions, each needing its own evidence. - **Reports lag.** Search Console data trails reality, and a "fixed" problem can look unfixed for weeks. I check live behavior before declaring success or failure. - **Vendors change methods.** I once traced an industry-wide drop in a client's AI visibility scores to a change in the vendor's methodology, not a decline in the client's visibility. - **Coincidences happen.** When two things change at once, I keep them on separate tracks until the data connects them. ## Plain-English reporting For owners who aren't technical, I write short monthly reports that explain what happened, why, what I did, and what needs a decision, with the charts in support rather than in place of an explanation. ## Measuring AI search AI assistants send visitors without search-style keyword data, so I track them as their own channel, alongside a fixed set of test prompts run on a schedule. Together they show whether visibility in AI answers is changing, without pretending to more precision than the data allows. ## Common questions ### Can you set up GA4 from scratch? Yes, including events, conversions, filters, Search Console linking, and a simple report your team will actually read. ### Why don't GA4 and Search Console numbers match? They measure different things: Search Console counts clicks in Google, GA4 counts sessions it manages to record, and consent banners, ad blockers, and redirects all widen the gap. A consistent gap is normal; a sudden change in the gap is worth investigating. **Related:** [Data cleanup](https://gerriscorp.com/services/data-cleanup/) · [Search Console](https://gerriscorp.com/services/search-console/) · [Ongoing support](https://gerriscorp.com/services/ongoing-support/) [Ask me what your numbers mean](https://gerriscorp.com/contact/) Updated October 5, 2026 --- Source: https://gerriscorp.com/services/advisory/ Updated: 2026-10-05 # Strategic advisory and briefings An experienced outside advisor for the people who make decisions: founders, executives, boards, communications teams, and the agencies and firms that serve them. I've worked in digital since the early 1990s, through the first web communities, the rise of Google, social media, online reputation management, and now AI search. Leaders hire me as an advisor when they need someone who understands both the technology and how it plays out in public, and who will tell them plainly what matters. ## What I advise on - **AI search and your business.** How ChatGPT, Gemini, Claude, Perplexity, and Google's AI features are changing how customers find and judge you, and what to do about it this year. - **Your reputation online.** What search engines and AI assistants say about your company and your leaders, the risks in that record, and how to strengthen it. - **Digital risk.** Executive privacy, data brokers, impersonation, domain and email security, and the gaps that make an organization easy to attack or embarrass. - **Website and search decisions.** Replatforming, agency selection, and vendor proposals reviewed by someone with no stake in the outcome. - **AI adoption.** Which tasks are worth automating, which tools fit, how your team should use them, and what should never be pasted into a public AI service. When a custom tool makes sense, see [AI agents and automation](https://gerriscorp.com/services/ai-automation/). ## Formats - **Advisory retainer.** A standing relationship: regular calls, review of plans and proposals, and quick answers when something comes up. - **Briefings and workshops.** A focused session for executives, a board, a communications team, or an agency, on AI search, reputation, or digital risk, with written takeaways. - **Second opinions.** A written review of a website problem, a proposed rebuild, a migration plan, a developer's recommendation, an agency proposal, an SEO audit, or an AI vendor's pitch: the options, the missing evidence, the dependencies, and the sensible next move. ## Working alongside other advisors I work easily with legal, security, communications, and family office teams. Firms that need a search and reputation specialist to refer clients to are welcome to get in touch. ## How a second opinion works You send the proposal, plan, or audit, plus the context: what you're trying to achieve, the budget, and the timeline. I review it, ask the questions the document skipped, and write a short recommendation covering what's sound, what's missing, what it depends on, and what I'd do next. Most second opinions take a few days. ## Common questions ### Is advisory work confidential? Always. I name no advisory or reputation clients, and I'm happy to sign a nondisclosure agreement before the first conversation. ### How is advisory work billed? Retainers are billed monthly in advance. Briefings, workshops, and second opinions are scoped and prepaid individually. **Related:** [Reputation and perception management](https://gerriscorp.com/services/reputation/) · [AI agents and automation](https://gerriscorp.com/services/ai-automation/) · [About Chris Abraham](https://gerriscorp.com/about/) [Start a confidential conversation](https://gerriscorp.com/contact/) Updated October 5, 2026 --- Source: https://gerriscorp.com/services/technical-seo/ Updated: 2026-10-05 # Technical SEO forensics and fixes A site lost traffic and nobody knows why. My job is to find the mechanism, prove it, and get it fixed. Technical SEO is the work that decides whether search engines and AI systems can find, render, understand, and trust your pages. It's the part of SEO I love most: on-page structure, site speed, 301 redirects, canonical tags, indexing, and Google Search Console. Most sites that underperform have a technical cause hiding in plain sight, and most of those causes leave evidence. ## When to call me - Organic traffic fell after a redesign, a platform change, a template update, a hosting move, or for no visible reason. - Search Console shows a growing pile of pages marked "Crawled, currently not indexed" or "Discovered, currently not indexed." - Important pages rank below thin ones, or Google picks a different URL than the one you want. - The site looks complete to people and nearly empty to crawlers. - Pages are slow on phones, or Core Web Vitals are failing. - Redirects have piled up over the years and nobody trusts them. ## What I check ### Rendering What crawlers actually receive, compared with what a visitor sees. JavaScript frameworks and lazy-loading patterns can leave product details, reviews, and FAQs out of the HTML a crawler reads. I compare the raw HTML, the rendered DOM, and a crawler's extraction for the same page. The [JavaScript SEO guide](https://gerriscorp.com/guides/javascript-seo/) explains the method. ### Crawling and indexing Robots rules, XML sitemaps, canonical tags, status codes, parameters, pagination, duplicate URLs, and how Google's chosen canonical compares with yours. I read the Search Console page indexing report as a set of clues, then confirm each with URL Inspection and a crawl. ### Redirects and broken links Chains, loops, temporary redirects that should be permanent, redirects to irrelevant pages, and internal links that still point at old URLs. ### On-page structure Titles, meta descriptions, heading order, internal linking, image alt text, and whether each page says plainly what it's about. ### Site speed and Core Web Vitals Largest Contentful Paint, Interaction to Next Paint, and Cumulative Layout Shift, measured from real users where data exists and from lab tests where it doesn't. The usual culprits are oversized images, render-blocking CSS and JavaScript, third-party scripts, web fonts, and slow servers or missing caching. ### Structured data Schema.org JSON-LD for your organization, people, products, services, articles, and breadcrumbs, and whether it matches the visible page. ### Off-site signals Backlink anomalies such as a sudden spike in spam links, and whether they matter at all. ## One cause at a time Two problems often arrive together: a template change and a spam link spike, or a redirect error and a seasonal dip. I keep each on its own track until the data connects them, so every fix targets a proven cause and nobody spends a quarter fixing the wrong thing. ## What you get - Findings with evidence: crawl data, Search Console reports, rendered HTML comparisons, and example URLs. - The mechanism, explained in plain language for owners and in technical detail for developers. - A prioritized list of fixes, each with an owner and an expected effect. - Developer tickets with affected URLs, observed behavior, the fix, and acceptance criteria. - A check of the live site once the fixes ship, and a follow-up read of Search Console as Google recrawls. I make the changes I have access to myself, in the CMS or the repository, and work with your developers on the rest. See [working with your developers](https://gerriscorp.com/services/developers/). ## Tools Google Search Console, GA4, Screaming Frog, Semrush, Ahrefs, PageSpeed Insights and the Chrome UX Report, Cloudflare, browser developer tools, and the command line. ## Common questions ### How long does a technical SEO diagnostic take? Usually one to three weeks, depending on the size of the site, the access I have, and how many separate problems turn up. I agree the questions and the timeline in writing before I start. ### What access do you need? Search Console and analytics access, a staging or production URL I can crawl, and ideally read access to the CMS or repository so I can find the template behind a problem. ### Do you fix things or only report them? Both. I fix what I have access to and write developer-ready tickets for changes that belong in the codebase, then check the result once it's live. ### How soon will traffic recover after the fixes? Google has to recrawl and reprocess the affected pages first, which takes days for important pages and weeks or months for large sites. I track the recovery in Search Console and report what changes. **Related:** ["Crawled, currently not indexed" explained](https://gerriscorp.com/guides/crawled-not-indexed/) · [JavaScript SEO](https://gerriscorp.com/guides/javascript-seo/) · [Website migrations](https://gerriscorp.com/services/migrations/) [Tell me what happened to your traffic](https://gerriscorp.com/contact/) Updated October 5, 2026 --- Source: https://gerriscorp.com/services/crawler-visibility/ Updated: 2026-10-05 # Content the crawler never sees The page looks complete in a browser. Googlebot and the AI crawlers get a shell. There are no crawl errors anywhere, only a growing pile of pages marked "Crawled, currently not indexed" and traffic that won't come back. This is the diagnosis I'm best known for. ## One failure, many stacks The same class of failure keeps turning up on completely different technology. In a single year I found it on three different stacks: ### Magento with Hyvä: content mounted on scroll Product specifications, FAQs, and reviews were wrapped in Alpine.js directives that only rendered them once a shopper scrolled down. Crawler extraction on the store's most valuable product pages fell to a few hundred words, and exactly those pages piled up in Search Console's not-indexed report. [Read the Magento case study](https://gerriscorp.com/case-studies/ecommerce-rendering/). ### WordPress media site: consent management blocking the page The cookie consent platform held back scripts until a visitor accepted, including the script that opened the tabs holding every article. A crawler never accepts cookies, so it met empty tabs everywhere. [Read the consent case study](https://gerriscorp.com/case-studies/consent-blocking/). ### React event platform: links crawlers couldn't follow Server-side rendering was already in place, yet event pages stayed undiscovered because the cards navigated with JavaScript click handlers instead of anchor links. [Read the React case study](https://gerriscorp.com/case-studies/react-event-platform/). ## The pattern behind all three In each case the page was technically "there." Visitors saw it, the CMS showed it, and no tool reported an error. The failure only appears when you look at the page the way a crawler does: no scrolling, no clicking, no cookie consent, and often no JavaScript at all. That's why it survives for months, and why ordinary SEO audits miss it. ## How I find it 1. **Compare three views of the same page:** the raw HTML the server sends, the DOM after JavaScript runs, and what a crawler extracts. 2. **Crawl with and without rendering,** and compare word counts and links by template. A template that loses most of its text without JavaScript stands out at once. 3. **Ask Google directly** with Search Console's live URL test, and read the rendered HTML it returns. 4. **Read the code** for the template responsible, often with an AI coding assistant searching the repository alongside the crawl evidence, until the exact mechanism is clear. 5. **Keep other problems separate.** A backlink spike or redirect error in the same month gets its own investigation. ## What you get - The mechanism, proven with side-by-side evidence. - A developer spec with the affected templates, example URLs, the fix, and acceptance criteria, such as "a plain fetch of a product URL returns the specification table." - Verification once the fix ships, in the raw HTML and in Search Console. ## Why it matters more every year Google renders JavaScript, slowly and imperfectly. Most AI crawlers don't render it at all. As more buyers ask ChatGPT, Perplexity, Claude, and Gemini instead of searching, content that exists only after scripts run is invisible to a growing share of the people looking for you. The [JavaScript SEO guide](https://gerriscorp.com/guides/javascript-seo/) shows how to run the first tests yourself. ## Common questions ### How do I know if my site has this problem? Search view-source for a sentence from your most important content. If it's missing, crawlers that don't run JavaScript can't see it. A growing "Crawled, currently not indexed" count in one template is another strong sign. ### Does the fix require a rebuild? Rarely. Most fixes change how one template renders a few sections, such as rendering on the server, keeping content in the HTML and toggling visibility with CSS, or using real links. **Related:** [JavaScript SEO guide](https://gerriscorp.com/guides/javascript-seo/) · ["Crawled, currently not indexed"](https://gerriscorp.com/guides/crawled-not-indexed/) · [Technical SEO forensics](https://gerriscorp.com/services/technical-seo/) [Ask me what Google actually sees](https://gerriscorp.com/contact/) Updated October 5, 2026 --- Source: https://gerriscorp.com/services/large-sites/ Updated: 2026-10-05 # SEO for large and programmatic sites Sites with tens of thousands of pages, built from databases, feeds, or templates, live or die on how search engines crawl and index them. The work is managing collections of pages, not tuning a handful. ## The usual story A programmatic site launches, indexing climbs fast, and then a large share of pages drops out. Search Console fills with "Crawled, currently not indexed" and "Discovered, currently not indexed." The cause is rarely one bug. It's usually some mix of near-duplicate pages, URL variations generated by tools and filters, weak internal linking to deep pages, thin templates, and, on expired or repurposed domains, history the site inherited. ## What I work on - **Segmented XML sitemaps.** Separate sitemaps for each page type or collection, so Search Console reports indexing coverage per segment and problems show up where they live. - **Baselines and comparisons.** Indexing measured per segment over time, so changes are judged against data rather than impressions. - **Parameter and tool URLs.** Calculators, filters, sort orders, and search tools that spawn endless URL variations, handled with robots rules, canonicals, and link changes. - **Index bloat.** Deciding which page types deserve indexing at all, and which should be merged, improved, or kept out. - **Template quality.** Making sure each generated page carries enough unique, useful information to earn its place, rather than a template with a name swapped in. - **Internal linking at scale.** Hub pages, related-item links, and breadcrumbs that give deep pages a path from the home page. - **Crawl efficiency.** Server response times, crawl stats, redirect chains, and soft 404s that waste crawl attention. - **Reporting lag.** Search Console reports trail reality by days or weeks. I check live behavior and server evidence before concluding a fix failed or worked. ## Working with the development team Large sites are built by developers, so the fixes go through them. I work in the repository and the team's chat tools, write changes as specs with acceptance criteria, and verify them with crawls and Search Console data. See [developer specs and QA](https://gerriscorp.com/services/developers/). ## Common questions ### Why did my programmatic pages drop out of the index? Google indexes generously at first and then reassesses. Pages that look alike, add little beyond a template, or sit far from internal links are the first to drop. A diagnostic finds which segments are affected and why. ### Does an expired domain help or hurt? It can do either. Old links can help a new site get noticed, but a domain's history and a sudden change of topic can also weigh on how Google treats it. It's one more factor to separate from the site's own problems. **Related:** ["Crawled, currently not indexed"](https://gerriscorp.com/guides/crawled-not-indexed/) · [Search Console](https://gerriscorp.com/services/search-console/) · [E-commerce SEO](https://gerriscorp.com/services/ecommerce/) [Tell me what dropped out](https://gerriscorp.com/contact/) Updated October 5, 2026 --- Source: https://gerriscorp.com/services/ecommerce/ Updated: 2026-10-05 # E-commerce SEO: templates, catalogs, and product data Online stores rarely fail one product at a time. They fail by template: one product page design, one category layout, or one theme setting repeated across thousands of URLs. I find the template-level problem and fix it once. ## Platforms Shopify and Liquid themes, Magento 2 and Hyvä, WooCommerce on WordPress, and headless storefronts. I make theme changes in a duplicated theme or a branch, so the live store is never at risk while work is under way. ## What I work on ### Product content crawlers can read Specs, descriptions, FAQs, and reviews that live in the page's HTML instead of appearing only after scripts run, scroll events, or clicks. On one Magento and Hyvä store, scroll-triggered rendering left flagship product pages with 250 to 400 words visible to crawlers. See [content the crawler never sees](https://gerriscorp.com/services/crawler-visibility/). ### Duplicate and competing URLs The same product reachable at several addresses, such as collection-path URLs on Shopify, legacy paths after a migration, variant parameters, and sort and filter combinations. I choose the canonical version, consolidate signals, and keep the rest out of the index. ### Faceted navigation and filters Filter combinations can generate millions of near-duplicate URLs. I decide which filtered views deserve to rank as landing pages and keep the rest from swallowing crawl attention. ### Product data and metadata Default titles and descriptions inherited from a theme, thin manufacturer descriptions, missing categories, and broken meta descriptions, fixed in bulk where possible and by hand where it matters. ### Product structured data One complete, valid Product schema block per page, with price, availability, brand, identifiers, and review data from the right source. Duplicate blocks from a theme and an app, and encoding bugs that corrupt the JSON, are common and easy to miss. I've found and fixed both. ### Out-of-stock and discontinued products Keeping pages for items that will return, redirecting discontinued items to the closest equivalent, and avoiding soft 404s. ### Migrations Squarespace to Shopify, Magento upgrades, and platform switches, with every product, collection, and image URL mapped. After one Squarespace to Shopify move, I found more than 3,400 404s left from the migration and duplicate product URLs competing in Google. See [migrations](https://gerriscorp.com/services/migrations/). ### Speed Product images, app scripts, and theme bloat, which drag down Core Web Vitals on mobile. See [site speed](https://gerriscorp.com/services/site-speed/). ## How it runs A paid diagnostic finds the template-level problems and ranks them by revenue at stake. Then I either implement the fixes in the theme, or write developer specs and verify the result, or both. A pilot group of pages often comes first, so the fix can be measured before it's rolled out across the catalog. ## Common questions ### Can you work on a large catalog? Yes. Large catalogs are where template-level fixes pay off most. I work from crawls, exports, and the platform's own data tools, and test fixes on a pilot group first. ### Do you write product descriptions? For priority products and categories, yes. For large catalogs, I set up templates and rules that improve every product at once, and write by hand where it counts. **Related:** [Content the crawler never sees](https://gerriscorp.com/services/crawler-visibility/) · [Large and programmatic sites](https://gerriscorp.com/services/large-sites/) · [Case studies](https://gerriscorp.com/case-studies/) [Tell me about your store](https://gerriscorp.com/contact/) Updated October 5, 2026 --- Source: https://gerriscorp.com/services/on-page-seo/ Updated: 2026-10-05 # On-page SEO Every page should tell people, search engines, and AI assistants exactly what it's about and why it deserves the click. On-page SEO is how a page says that. On-page SEO covers everything on the page itself: the title, the meta description, the headings, the copy, the internal links, the images, and the structured data. It's where technical SEO meets writing, and it's where I spend a lot of my time, because a technically perfect site still fails if its pages are vague. ## What I work on ### Titles and meta descriptions A title tag that names the topic like a news headline, usually 50 to 60 characters, and a description of 140 to 160 characters that tells a searcher what they'll find. I avoid pipes, dashes, and repeating the brand on every page, and I write each one for the page it's on. Google rewrites titles and descriptions it finds unhelpful; well-written ones are rewritten far less often. ### Headings and structure One clear H1, then H2 and H3 headings in a logical order that a reader, a screen reader, and a crawler can all follow. Headings that carry information, so each section can stand on its own when an AI system quotes it. ### Copy that matches intent A service page that plainly explains what you do, for whom, and how. An explanatory article that answers its question completely. I follow legitimate keyword priorities, and I write for the person searching first, because that's what both Google and AI assistants reward. ### Internal linking Descriptive links between related pages, so authority flows to the pages that matter and every important page sits within a few clicks of the home page. Orphaned pages, the ones nothing links to, get found and connected. ### Images Descriptive file names, alt text that serves people using screen readers, explicit dimensions to prevent layout shift, and modern formats at sensible sizes. ### Structured data Schema.org JSON-LD for your organization, people, services, products, articles, FAQs, and breadcrumbs, consistent with what the page visibly says. FAQ and HowTo rich results are now rare in Google, but structured data still helps search engines and AI systems understand who you are and what each page covers. ## Publishing, too I do the unglamorous part as well: getting a document into the CMS properly formatted, with the headings, links, images, metadata, and schema in place. WordPress with Yoast or WPCode, Umbraco, Wix, Squarespace, Shopify, and static sites are all familiar ground. ## What you get - An audit of titles, descriptions, headings, internal links, and structured data across the site, with the worst problems first. - Rewritten titles and descriptions for the pages that matter, ready to paste or published by me. - An internal linking plan and the orphaned pages to connect. - Improved or new pages, written and published in your CMS. ## Common questions ### Do you write the content yourself? Yes. I write and edit service pages, landing pages, FAQs, glossaries, and articles, working from your knowledge of the business and checking facts with you before anything is published. ### How many pages can you cover? Audits cover the whole site. Rewrites start with the pages that bring in the most traffic or revenue, and ongoing support works through the rest month by month. **Related:** [Technical SEO](https://gerriscorp.com/services/technical-seo/) · [AI search visibility](https://gerriscorp.com/services/ai-search/) · [Glossary](https://gerriscorp.com/guides/glossary/) [Ask me to review your pages](https://gerriscorp.com/contact/) Updated October 5, 2026 --- Source: https://gerriscorp.com/services/site-speed/ Updated: 2026-10-05 # Site speed, Core Web Vitals, and Cloudflare Fast pages rank better, convert better, and get crawled more. I find what's actually slowing your site on real phones and fix it. ## Core Web Vitals Google measures page experience with three Core Web Vitals, scored from real Chrome users at the 75th percentile: | Metric | Measures | Good | | --- | --- | --- | | Largest Contentful Paint (LCP) | How fast the main content appears | 2.5 seconds or less | | Interaction to Next Paint (INP) | How fast the page responds to taps and clicks | 200 milliseconds or less | | Cumulative Layout Shift (CLS) | How much the layout jumps while loading | 0.1 or less | INP replaced First Input Delay in March 2024, and many sites that passed before now fail on it, usually because of heavy JavaScript and third-party scripts. ## What I fix - **Images:** right-sized, modern formats such as WebP and AVIF, explicit dimensions, lazy loading below the fold, and priority loading for the main image. - **CSS and JavaScript:** render-blocking files, unused code, oversized bundles, and long tasks that block interaction. - **Third-party scripts:** tag managers, chat widgets, ad and analytics scripts, and what each one actually costs. - **Fonts:** fewer files, preloading, and font-display settings that avoid invisible text and layout shifts. - **Servers and caching:** slow time to first byte, missing page caching, and cache headers that make browsers download the same files again. ## Cloudflare and CDNs A CDN puts copies of your site close to every visitor and absorbs load and attacks. I've used Cloudflare for years and set it up properly: - DNS moved without downtime and without disturbing email records. - Caching configured with Cache Rules, including full-page caching where it's safe, and Tiered Cache for sites with global traffic. - Automatic Platform Optimization for WordPress sites that benefit from it. - Compression, HTTP/3, and Early Hints switched on, and image optimization through Polish or Cloudflare Images. - Redirects moved to Redirect Rules and Bulk Redirects, so they run at the edge and survive CMS changes. Cloudflare is retiring the older Page Rules, and I migrate them. - Crawler Hints turned on, which notifies search engines of changes through IndexNow. - Bot and AI crawler settings checked. Cloudflare now blocks many AI crawlers by default on newer setups, which can quietly keep you out of AI search. I set them deliberately. I also work with Netlify, GitHub Pages, and other hosts' built-in CDNs. ## What you get - A speed diagnosis from field data and lab tests, with the causes ranked by impact. - The fixes I can make directly, and developer tickets for the rest. - A before and after comparison on the pages that matter. ## Common questions ### Will Cloudflare make my site faster by itself? It helps immediately with static files and distance. The large gains come from configuring caching, compression, images, and redirects for your specific site, which is the work I do. ### How long until Core Web Vitals improve in Search Console? The Chrome UX Report uses a rolling 28 days of real-user data, so improvements show up gradually over about a month after the fixes ship. **Related:** [Technical SEO](https://gerriscorp.com/services/technical-seo/) · [Email and DNS](https://gerriscorp.com/services/email-and-dns/) · [JavaScript SEO](https://gerriscorp.com/guides/javascript-seo/) [Ask me why your site is slow](https://gerriscorp.com/contact/) Updated October 5, 2026 --- Source: https://gerriscorp.com/services/search-console/ Updated: 2026-10-05 # Google Search Console setup, cleanup, and indexing fixes Search Console is the closest thing to a direct line into how Google sees your site. Most businesses have it set up badly or never look at it. I set it up properly and act on what it says. ## Setup done right - A Domain property verified by DNS, so every subdomain and protocol is covered, plus URL-prefix properties where they help. - The right people with the right permission levels, and former agencies and staff removed. - XML sitemaps submitted and checked against what's actually indexable. - Bing Webmaster Tools set up as well, because Bing's index feeds Microsoft Copilot and other AI assistants. It imports directly from Search Console. - Search Console linked to GA4 where it's useful. ## Reading the reports ### Page indexing The report that explains why pages aren't in Google: "Crawled, currently not indexed," "Discovered, currently not indexed," "Duplicate without user-selected canonical," "Alternate page with proper canonical tag," "Page with redirect," "Not found (404)," "Soft 404," and "Blocked by robots.txt." Each status has different causes and different fixes. The guide to ["Crawled, currently not indexed"](https://gerriscorp.com/guides/crawled-not-indexed/) covers the most misunderstood one. ### Performance Clicks, impressions, and positions by query and page, which show what you rank for, what's slipping, and which pages earn impressions without clicks because their titles undersell them. ### URL Inspection The live test shows the HTML Google rendered for a page, which is how I prove whether content is visible to Googlebot. ### Core Web Vitals, HTTPS, and enhancements Field speed data by URL group, security problems, and structured data errors and warnings. ### Crawl stats Found under Settings: how often Googlebot visits, what it fetches, and how fast your server responds. It's essential after migrations and server changes. ## Cleanup and fixes I turn the reports into a list of real problems, ignore the noise, and fix the causes: redirects, canonicals, thin or duplicate pages, sitemap errors, blocked resources, and soft 404s. Then I request reindexing where it's worth it and watch the reports as Google recrawls. ## Common findings The same problems turn up again and again: a property verified by an agency that no longer works with you, sitemaps listing redirected or noindexed URLs, parameter URLs multiplying in the index, staging sites indexed by accident, and important templates quietly dropping out of the index after a release. ## Common questions ### Should every page on my site be indexed? No site needs every URL indexed. Filter pages, internal search results, tag archives, and near-duplicates are better left out. The goal is to get every page that deserves to rank into the index, and keep the rest out deliberately. ### Is a Search Console cleanup a one-time job? The setup and first cleanup are a project. Monitoring fits naturally into [ongoing support](https://gerriscorp.com/services/ongoing-support/), since new problems appear whenever the site changes. **Related:** ["Crawled, currently not indexed" explained](https://gerriscorp.com/guides/crawled-not-indexed/) · [Technical SEO](https://gerriscorp.com/services/technical-seo/) · [Website migrations](https://gerriscorp.com/services/migrations/) [Ask me to read your Search Console](https://gerriscorp.com/contact/) Updated October 5, 2026 --- Source: https://gerriscorp.com/services/migrations/ Updated: 2026-10-05 # Website migrations A migration is the moment a site is most likely to lose what it built in search. I help before the move, during the launch, and after it. Every migration changes something search engines rely on: URLs, templates, internal links, rendering, or the domain itself. When those changes are mapped and tested, rankings carry over. When they aren't, pages vanish from the index, links point at 404s, and nobody notices until traffic is gone. I make sure each change is deliberate. ## Kinds of migration - **Platform changes:** WordPress to a headless or static build, Wix or Squarespace to WordPress, Magento to Shopify, a CMS upgrade with new templates. - **Domain changes:** rebrands, consolidations of several domains into one, country domains into folders, and HTTP to HTTPS. - **Structure changes:** new URL patterns, merged or retired sections, and new navigation. - **Redesigns:** the same URLs with new templates, which can still change rendering, headings, internal links, and speed. ## Before launch - An inventory of every URL that matters, built from a crawl, the XML sitemaps, Search Console, analytics, and backlink data, so pages with traffic or links can't slip through. - A 301 redirect map from every old URL to its closest new equivalent, and deliberate decisions about pages you're retiring. - A review of the new templates on staging: titles, canonicals, headings, structured data, internal links, and content crawlers can read without running JavaScript. - A plan for analytics, Search Console, sitemaps, and robots rules on launch day. ## At launch - Redirects tested in bulk on the live site, including status codes, chains, and destinations. - Staging blocks removed and production robots rules confirmed. - New XML sitemaps submitted, and Google's Change of Address tool used for domain moves. - A quick round of fixes with your developer or host while the launch is fresh. ## After launch I watch crawl stats, the page indexing report, 404s, and organic landing pages for the weeks Google needs to process the move, and fix gaps as they appear. If the launch already happened and something went wrong, I reconcile old and new URLs, find orphaned pages and broken media, repair redirect gaps, and track down what changed. I'm useful when the marketing team, the developer, the host, and the owner each hold part of the answer. ## Platforms WordPress, Umbraco, Wix, Squarespace, Shopify, Magento, Netlify, GitHub Pages, Jekyll, and hand-built static sites, including a WordPress to Netlify migration and a Movable Type to GitHub Pages move. ## Common questions ### When should I bring you into a migration? As early as the URL structure and templates are being decided. The earlier the redirect map and template review start, the cheaper every fix is. ### How long should redirects stay in place? Google recommends keeping redirects for at least a year. I recommend keeping them indefinitely unless they cause a real problem, because old links keep arriving for years. ### Can you help after a migration that already went wrong? Yes. Post-launch cleanup is a common engagement: I rebuild the URL mapping from crawl, log, Search Console, and backlink data and repair what's missing. **Related:** [The website migration SEO checklist](https://gerriscorp.com/guides/migration-checklist/) · [Technical SEO forensics](https://gerriscorp.com/services/technical-seo/) · [Email and DNS](https://gerriscorp.com/services/email-and-dns/) [Talk to me about your migration](https://gerriscorp.com/contact/) Updated October 5, 2026 --- Source: https://gerriscorp.com/services/ai-search/ Updated: 2026-10-05 # AI search visibility People now ask ChatGPT, Claude, Gemini, Perplexity, and Google's AI Overviews and AI Mode before they ever click a link. I help those systems, and traditional search engines, understand and represent your business accurately. ## SEO, AEO, and GEO **SEO** is search engine optimization. **AEO**, answer engine optimization, shapes content so it directly answers the questions people ask. **GEO**, generative engine optimization, makes your business easy for AI systems to find, understand, and cite. All three rest on the same foundation: crawlable pages, clear answers, consistent facts, accurate structured data, and a site that loads fast. The [guide to how AI assistants decide what to say](https://gerriscorp.com/guides/ai-assistants/) explains the mechanics. ## AI search readiness audit I test a set of real prompts across the major assistants, the questions your buyers actually ask, and record what each one says about you, your products, and your competitors. Then I trace where those answers come from: your own pages, review sites, directories, news, forums, and the search indexes the assistants draw on. You get: - A record of the prompts, the answers, and the sources cited, so you can repeat the test later and measure change. - The errors, omissions, and outdated facts, ranked by how much they matter. - The technical blockers: content hidden behind JavaScript, crawlers blocked in robots rules, missing or wrong structured data. - A prioritized plan for the pages, facts, and sources you control. ## Content that answers the question I write and improve service pages, landing pages, FAQs, glossaries, titles, and descriptions, and I publish them properly in your CMS. A service page plainly explains what you do, how it helps, and why your approach makes sense. An explanatory article answers its question completely, with the definitions and context an AI needs to quote it accurately. Self-contained pages like these are the ones answer engines cite. ## Machine-readable you For founders, experts, and brands: consistent facts across your site and the profiles AI systems read, schema.org structured data that ties them together, and a body of self-contained pages that describes you accurately. I've practiced this on myself for more than two decades by publishing my own work in the open. ## Technical foundations - Important text present in the HTML your server sends, because most AI crawlers don't run JavaScript. - Deliberate robots rules for AI crawlers such as GPTBot, OAI-SearchBot, ClaudeBot, PerplexityBot, and Google-Extended. - An [llms.txt](https://gerriscorp.com/guides/glossary/#llms-txt) file and Markdown versions of key pages for language models. - Fast indexing through XML sitemaps and IndexNow, which notifies Bing and other engines of changes within minutes. ## Measurement AI answers vary by phrasing, location, and time, so I measure with a fixed prompt set run on a schedule, plus referral traffic from AI assistants in analytics. I report trends and specific corrections, and I'm candid about what the data can and can't show. This site follows its own advice: static HTML, structured data on every page, an [llms.txt](https://gerriscorp.com/llms.txt) file, Markdown versions of every page, and a full-text [llms-full.txt](https://gerriscorp.com/llms-full.txt). ## Common questions ### How long does an AI search readiness audit take? Usually two to three weeks, including the prompt testing, the source tracing, and the written plan. ### Can you get my business mentioned in ChatGPT? I improve the things that decide whether assistants mention you: the content and facts you control, the sources they cite, and the technical access their crawlers need. Each AI company decides how its system answers. ### Is AI search optimization different from SEO? It builds on SEO. Most AI assistants search the web before answering, so strong technical SEO is the price of entry. AI search adds a focus on direct answers, consistent facts, and the third-party sources assistants trust. **Related:** [How AI assistants decide what to say](https://gerriscorp.com/guides/ai-assistants/) · [JavaScript SEO](https://gerriscorp.com/guides/javascript-seo/) · [Strategic advisory](https://gerriscorp.com/services/advisory/) [Ask me what the AI assistants say about you](https://gerriscorp.com/contact/) Updated October 5, 2026 --- Source: https://gerriscorp.com/services/ongoing-support/ Updated: 2026-10-05 # Ongoing SEO and website support A continuing pair of experienced hands for businesses that need steady improvement and someone who already knows the site. Websites drift. Plugins update, pages get added in a hurry, a developer changes a template, a redirect breaks, Google changes how it treats something. Ongoing support means somebody is watching, fixing, and improving every month, without the overhead of a large agency retainer. ## What it covers - Technical SEO fixes and Search Console monitoring, with problems caught before they cost traffic. - Writing, editing, and publishing pages in your CMS, with titles, descriptions, internal links, and structured data. - Site speed and Cloudflare upkeep. - AI search checks: a recurring look at what the major assistants say about you. - Troubleshooting when something breaks or traffic moves. - Coordinating with your developers, host, and marketing team. - A short monthly report: what changed, what I fixed, what's next, and what needs your decision. ## How it works You and I agree on a monthly capacity and a priority list. The retainer is billed at the start of each month. Work is tracked in Basecamp or by email, so you always know the status, and priorities can change month to month as the business does. ## Who it suits Businesses with a site that matters to revenue and no full-time SEO on staff, marketing teams that need a specialist they can call on, and agencies that need experienced technical SEO help for their own clients. ## A typical month A check of Search Console and analytics for anything new or broken. Two or three pages written, improved, or republished with proper metadata. A round of technical fixes from the priority list. A look at site speed after the latest plugin or theme updates. Answers to your developer's questions. Then a short written report, and an updated list for next month. ## What makes it work A clear priority list that you own, access to the systems I need, and a single written channel for requests, so nothing gets lost in text messages. The best ongoing relationships feel like having an experienced technical person on staff for a fraction of the cost. ## Combining services Ongoing support pairs naturally with the rest of my work. It's the follow-through after a [technical SEO diagnosis](https://gerriscorp.com/services/technical-seo/), the monitoring after a [migration](https://gerriscorp.com/services/migrations/), and the steady implementation behind a [fractional technical lead](https://gerriscorp.com/services/technical-lead/) arrangement. ## Common questions ### Is there a minimum term? Ongoing support runs month to month after an initial diagnostic, so the first month starts from a clear picture of the site. ### What happens to unused hours? The capacity is reserved for you each month. Whether unused time carries over is set out in the written agreement before work starts. **Related:** [Search Console](https://gerriscorp.com/services/search-console/) · [On-page SEO](https://gerriscorp.com/services/on-page-seo/) · [Work With Me](https://gerriscorp.com/work-with-me/) [Ask about ongoing support](https://gerriscorp.com/contact/) Updated October 5, 2026 --- Source: https://gerriscorp.com/services/multi-location/ Updated: 2026-10-05 # Multi-location and connected businesses A parent brand with several locations. Sister companies sharing an owner, a building, or a phone number. Stores in neighboring towns competing with each other in Google. These businesses confuse search engines and AI assistants unless their identities are untangled deliberately. ## Common problems - Search engines can't tell the parent brand from its original location, so the wrong one shows up. - Location pages that repeat the same copy with a city name swapped in. - Google Business Profiles that link to the home page instead of the matching location page. - Sister businesses with conflicting names, addresses, or phone numbers across the web, or duplicate listings. - Structured data that describes every location as the same business, or several businesses as one. - Several related sites and domains, some redirecting, some not, competing for the same searches. ## What I do ### Entity architecture A clear map of who is who: the parent organization, each location, each sister business, and how they relate. Then structured data that states it, using organization and local business types with parent and branch relationships, so search engines and AI systems describe each one correctly. ### Location pages that earn their place One page per real location, with the address, hours, services, staff, directions, and local details that make it useful, linked from the matching Google Business Profile. Service-area pages where the business travels to customers, written for that area instead of cloned. ### Consistency everywhere Names, addresses, phone numbers, and categories aligned across websites, profiles, and directories, with duplicates found and resolved. ### Connected businesses kept distinct Separate content, FAQs, and structured data for each business, even when they share an owner and an office. A plumbing company and a foundation repair company with the same owner need different answers to different questions. ### Multi-site cleanup Old domains, duplicate sites, and inconsistent domain versions consolidated with 301 redirects, and Search Console history preserved for each property. ### Seasonal planning For seasonal businesses, risky changes such as category edits that can trigger reverification happen in the off-season, and a change freeze covers the peak. ## How it starts A paid diagnostic maps every site, profile, and listing the business controls, finds the conflicts, and ranks the fixes. Implementation follows in the order that protects existing rankings, visibility, and reviews first. ## Common questions ### Should each location have its own website? Usually one site with a strong page per location works best, because the locations share the brand's authority. Separate sites make sense for genuinely separate businesses. ### Can you fix suspended or duplicate profiles too? Yes, as part of the same engagement. See [Google Business Profile hard cases](https://gerriscorp.com/services/google-business-profile/). **Related:** [Google Business Profile](https://gerriscorp.com/services/google-business-profile/) · [AI search visibility](https://gerriscorp.com/services/ai-search/) · [Migrations](https://gerriscorp.com/services/migrations/) [Tell me how your locations are set up](https://gerriscorp.com/contact/) Updated October 5, 2026 --- Source: https://gerriscorp.com/services/reputation/ Updated: 2026-10-05 # Reputation and perception management For founders, executives, and families who need privacy and a defensible public record at the same time. Your reputation is whatever comes up when someone searches your name, and increasingly whatever an AI assistant says when someone asks about you. Both draw on the same sources: your own pages and profiles, news coverage, public records, data broker listings, and whatever else the web holds. Perception management means knowing what's in that record, removing what shouldn't be public, and making sure accurate information is what people and machines find first. ## What I do ### Audit the record A full picture of what search engines and the major AI assistants say about you or your company, across names, spellings, and related searches, with the sources behind each result and answer. ### Remove what shouldn't be public Personal information removed from data broker and people-search sites, removal requests through Google's "Results about you" tool for contact details in search results, and use of state privacy rights where they apply, including California's new Delete Request and Opt-out Platform. The [guide to removing your personal information](https://gerriscorp.com/guides/personal-information-removal/) explains how each works. ### Strengthen what's accurate Pages you control, consistent facts across them, and structured data that tells search engines and AI systems who you are. Strong, accurate pages are what push weaker or outdated results down. ### Correct AI answers When an assistant gets you wrong, I trace the answer to its sources and fix or outweigh them, then retest on a schedule. ### Monitor and report Monthly reporting on search results, AI answers, new broker listings, and anything that needs attention, with fast response when something new appears. ## Working with your other advisors This work plugs into security, legal, and family office teams, and the disciplines strengthen each other: they watch for threats, and I keep the public record accurate and the private information private. ## Background I've done this work for more than twenty years, starting at New Media Strategies, where online reputation management grew up as a practice, and including high-end reputation and executive privacy work at Reputation.com. ## Common questions ### Is this work confidential? Completely. I name none of my reputation clients, and I'm happy to sign a nondisclosure agreement before the first conversation. ### How is reputation work structured? It starts with a paid audit, then usually continues as a monthly retainer billed in advance, because the record changes and data brokers relist people constantly. ### Can negative articles be removed? Removal depends on the source and the law. Some content qualifies for removal under platform policies or privacy rules; most legitimate news coverage doesn't. Where removal isn't available, accurate and stronger pages change what people see first. **Related:** [Removing your personal information](https://gerriscorp.com/guides/personal-information-removal/) · [Strategic advisory](https://gerriscorp.com/services/advisory/) · [How AI assistants decide what to say](https://gerriscorp.com/guides/ai-assistants/) [Start a confidential conversation](https://gerriscorp.com/contact/) Updated October 5, 2026 --- Source: https://gerriscorp.com/services/google-business-profile/ Updated: 2026-10-05 # Google Business Profile hard cases Suspensions, failed video verifications, profiles that are live in public and stuck in the dashboard, and access problems across managed profiles. A Google Business Profile is often the first thing a local customer sees, and when it's suspended or stuck, calls and visits drop at once. Google handles these cases through automated systems, an appeals process, and a support queue that moves at its own pace. The cases I take are the hard ones: repeated suspensions, verification loops, duplicate or split profiles, and accounts where one problem has spread to every profile they manage. ## Advisory work, priced for the effort I take on Google Business Profile cases as paid advisory engagements or as part of an ongoing SEO or reputation retainer. Each stage is scoped and paid in advance, so the work is defined before it starts. ## Stage one: a written diagnostic A prepaid review of the profile, its history, the account and its other profiles, the business's documentation, and Google's guidelines, delivered as a written findings report: - What most likely triggered the problem, based on the evidence available. - What documentation exists and what's missing. - Whether an appeal or reverification is viable, and what it would involve. - What to fix first, whether or not you hire me for the next stage. ## Stage two: remediation and appeal When there's a viable path, a separately scoped engagement covers compliance fixes to the profile and website, the appeal, and correspondence with Google, with agreed limits on profiles, appeal rounds, and hours. I build appeals like a legal brief: the strongest verifiable document first, nothing that exposes private information, and only claims the paperwork supports. Further rounds are agreed and paid separately. ## What I need from you Truthful documentation, access to the profile and account, and prompt answers to Google's requests. Google makes every reinstatement decision, on its own schedule. ## Prevention Most suspensions trace back to a mismatch between the profile and reality: an address that's really a service area, a name with extra keywords, a category that doesn't fit, or information that differs from the website. Fixing those before Google notices is far cheaper than an appeal, and it fits naturally into [ongoing support](https://gerriscorp.com/services/ongoing-support/). ## Local search beyond the profile A profile is only as strong as the website and listings behind it. Consistent name, address, and phone details across directories, location and service pages that match the profile, and reviews answered promptly all support local visibility. ## Common questions ### How long does reinstatement take? Google's appeal reviews take anywhere from days to several weeks, and complex cases take longer. The diagnostic itself is delivered within a week of receiving access and documents. ### Do you manage profiles that aren't suspended? Yes, as part of local SEO within [ongoing support](https://gerriscorp.com/services/ongoing-support/) or a broader SEO engagement. [Book a profile diagnostic](https://gerriscorp.com/contact/) Updated October 5, 2026 --- Source: https://gerriscorp.com/services/email-and-dns/ Updated: 2026-10-05 # Email authentication and DNS Unglamorous plumbing that decides whether your email arrives and whether your domains keep their value. Since February 2024, Gmail and Yahoo have required authenticated email, and Microsoft's Outlook.com followed in May 2025 for high-volume senders. Mail that fails authentication lands in spam or bounces. At the same time, DNS is where websites, email, and verification records all live, so a careless change for a website move can quietly break email. I handle both with an inventory first and a change list second. ## Email authentication - **SPF** listing every service allowed to send as your domain, within the ten-lookup limit. - **DKIM** signing for your mailbox provider and every sending service: newsletters, CRM, invoicing, help desk. - **DMARC** starting at monitoring, reading the aggregate reports to find every legitimate sender, then tightening to quarantine and reject. - Alignment, one-click unsubscribe headers for bulk mail, and spam-rate monitoring in Google Postmaster Tools. The [SPF, DKIM, and DMARC guide](https://gerriscorp.com/guides/email-authentication/) explains each record and the current requirements. ## Deliverability When mail goes missing, I trace it: authentication results in message headers, DMARC reports, blocklists, sending reputation, and content. Then I fix the cause. ## DNS and domains - A complete DNS inventory before any change, so nothing breaks by accident. - Moves between DNS providers, such as Cloudflare, Squarespace, GoDaddy, and Route 53, without downtime. - Website moves that change only the web records and leave mail exactly where it is. - Domain consolidation, including internationalized domains, with 301 redirects that carry search equity to the right place. - Verification records for Google, Microsoft, and other services kept intact and documented. ## How an engagement runs 1. A complete export of every DNS record, and a list of every service that sends mail as your domain. 2. A written change plan: what changes, what stays, and in what order. 3. The changes, made in a quiet period with time-to-live values lowered first. 4. Verification with test messages, header analysis, and DMARC reports. 5. A record of the final configuration, so the next person who touches DNS knows what everything does. ## Domains you own but don't use Old brand names, typo domains, and defensive registrations need attention too. Parked domains get spoofed for phishing, so they need SPF and DMARC records that reject all mail, and any that still attract visitors or links should redirect to the right place on your main site. ## Common questions ### How long does DMARC take to set up? The records take minutes. Moving safely from monitoring to enforcement usually takes a few weeks of reading reports, because every legitimate sender has to be found and authenticated first. ### Will changing DNS take my site or email offline? Not when it's planned. I copy every record, lower time-to-live values ahead of the change, and verify mail and web after the switch. **Related:** [SPF, DKIM, and DMARC explained](https://gerriscorp.com/guides/email-authentication/) · [Site speed and Cloudflare](https://gerriscorp.com/services/site-speed/) · [Website migrations](https://gerriscorp.com/services/migrations/) [Get your email and domains in order](https://gerriscorp.com/contact/) Updated October 5, 2026 --- Source: https://gerriscorp.com/guides/ Updated: 2026-10-06 # Guides Plain explanations of the problems I'm hired to fix, written for 2026 and kept up to date. Each one stands on its own, and each ends with how I handle the problem for clients. ## AI search - [How AI assistants decide what to say about your business](https://gerriscorp.com/guides/ai-assistants/): training data versus live retrieval, which search indexes feed ChatGPT, Gemini, Claude, Perplexity, and Copilot, the crawlers behind them, and what to do this quarter. - [Structured data in 2026: which schema markup is worth adding](https://gerriscorp.com/guides/structured-data/): the rich results that remain, the ones Google retired, and building an entity graph that search engines and assistants can trust. - [How to use AI coding assistants on a business website safely](https://gerriscorp.com/guides/ai-coding-assistants/): specs, project memory, automated checks, review, and keeping secrets and production out of reach. ## Diagnosis - [How to diagnose a Google traffic drop in Search Console](https://gerriscorp.com/guides/traffic-drop/): confirm the drop, find where it is, line it up with dates, and name the cause. - ["Crawled, currently not indexed": what it means and how to fix it](https://gerriscorp.com/guides/crawled-not-indexed/): a method for finding the real cause behind Search Console's most misunderstood status. - [How to tell if JavaScript is hiding your content from Google and AI](https://gerriscorp.com/guides/javascript-seo/): five tests, the common causes, and the fixes developers can ship. - [ADA website compliance for businesses](https://gerriscorp.com/guides/ada-website-compliance/): the six fixes that cover most of the legal risk, what to skip, and the search and AI benefits that come with them. - [Lynx for website QA](https://gerriscorp.com/guides/lynx-qa/): scripted text browser checks for thin pages, stray noindex tags, and broken links before every launch. ## Technical SEO - [Canonical tags: how Google chooses which URL to index](https://gerriscorp.com/guides/canonical-tags/): the signals Google weighs, the Search Console statuses, and the mistakes that send rankings to the wrong page. - [How robots.txt works, and the mistakes that cost traffic](https://gerriscorp.com/guides/robots-txt/): matching rules, crawling versus indexing, status codes, and AI crawlers. - [Faceted navigation SEO: filters, parameters, and crawl budget](https://gerriscorp.com/guides/faceted-navigation/): which filter pages to index and how to keep the rest out of the crawl. - [hreflang for English-language sites serving the US, UK, Canada, and Australia](https://gerriscorp.com/guides/hreflang/): the codes, the return links, and the errors that void them. ## Speed and infrastructure - [Core Web Vitals explained: LCP, INP, CLS, and the fixes that work](https://gerriscorp.com/guides/core-web-vitals/): field data versus lab data, and what moves each number. - [Cloudflare settings that help or hurt SEO and AI crawlers](https://gerriscorp.com/guides/cloudflare-seo/): proxying, bot protection, AI crawler controls, caching, HTTPS, and edge redirects. ## Migrations and redirects - [The website migration SEO checklist](https://gerriscorp.com/guides/migration-checklist/): the URL inventory, the 301 redirect map, launch day, and the weeks after. - [How to plan 301 redirects that keep your rankings and links](https://gerriscorp.com/guides/301-redirects/): which redirect to use, mapping, implementation by platform, testing, and how long to keep them. ## Analytics - [Google Consent Mode v2 for GA4: a practical setup guide](https://gerriscorp.com/guides/ga4-consent-mode/): the four signals, basic and advanced mode, regional defaults, and how to verify it. ## Email and domains - [SPF, DKIM, and DMARC for every domain that sends email](https://gerriscorp.com/guides/email-authentication/): what each record does, the Gmail, Yahoo, and Microsoft requirements, and how to reach enforcement safely. - [Why business email lands in spam, and how to find the cause](https://gerriscorp.com/guides/email-deliverability/): headers, authentication failures, reputation, blocklists, and sending practices. ## Privacy and reputation - [How to remove your personal information from data brokers and search](https://gerriscorp.com/guides/personal-information-removal/): opt-outs, Google's Results about you, and California's DROP. ## Reference - [Glossary of SEO, AI search, and technical website terms](https://gerriscorp.com/guides/glossary/): plain definitions, from 301 redirects to XML sitemaps. ## How these guides are written Each guide answers one question completely, with the definitions and context needed to act on it, and carries the date it was last updated. They're written from the work itself: the problems clients bring me, the tests I run, and the fixes that hold. New guides are announced in the [Atom feed](https://gerriscorp.com/feed.xml). Updated October 6, 2026 --- Source: https://gerriscorp.com/guides/ai-assistants/ Updated: 2026-10-05 # How AI assistants decide what to say about your business By [Chris Abraham](https://gerriscorp.com/about/) · Published October 5, 2026 When someone asks ChatGPT, Claude, Gemini, Perplexity, or Google's AI Overviews about your company, the answer comes from two places: what the model learned in training, and what it finds by searching the web right then. You can influence both, and the second is where most of the action is. ## Two sources of knowledge ### Training data Every large language model is trained on a huge snapshot of text, much of it crawled from the public web, and that knowledge stops at a training cutoff. What a model "knows" about you from training reflects whatever was public and widely repeated before that date. It changes only when the company trains a new model, so it lags reality by months or years. Older press coverage, Wikipedia, directories, and anything that was repeated often all weigh heavily here. ### Live retrieval Most assistants now search the web before answering questions about specific businesses, products, and recent events. The assistant turns the question into one or more searches, reads the top results, and writes an answer grounded in those pages, often with citations. This is called retrieval or grounding, and it means a page that ranks well and answers the question clearly can shape the answer within days of being published. ## Which search indexes feed which assistants - **Google AI Overviews and AI Mode** are built on Google Search's own index, crawled by Googlebot. - **Gemini** grounds its answers with Google Search. - **Microsoft Copilot** uses Bing's index. - **ChatGPT search** uses OpenAI's own crawler, OAI-SearchBot, alongside third-party search providers. - **Perplexity** runs its own crawler, PerplexityBot, and its own index. - **Claude** searches the web through a search provider and fetches pages with Anthropic's crawlers. The practical lesson: being well indexed in both Google and Bing covers most of the AI landscape. Bing Webmaster Tools and IndexNow, which tells Bing and other engines about changed pages within minutes, matter more than they used to. ## The crawlers, and what each one is for | Company | Training | Search index | Fetches for a user | | --- | --- | --- | --- | | OpenAI | GPTBot | OAI-SearchBot | ChatGPT-User | | Anthropic | ClaudeBot | Claude-SearchBot | Claude-User | | Perplexity | (none listed) | PerplexityBot | Perplexity-User | | Google | Google-Extended (a robots.txt token) | Googlebot | Google's user-triggered fetchers | You can allow or block each in robots.txt. Blocking a training crawler keeps your future pages out of future models; blocking a search crawler keeps you out of that assistant's live answers. Google-Extended controls whether your content is used for Gemini, and it doesn't affect Google Search or AI Overviews, which follow Googlebot. Check your CDN, too: Cloudflare began blocking many AI crawlers by default on new setups in 2025, which can keep a business out of AI answers without anyone deciding that on purpose. ## What assistants favor when they write an answer - **Direct answers.** Pages that state the answer plainly near the top, in a sentence that still makes sense when quoted on its own. - **Self-contained context.** Definitions, dates, locations, and names on the page itself, so the assistant doesn't have to guess. - **Consistency.** The same facts about you on your site, your profiles, directories, and press. Conflicting facts produce hedged or wrong answers. - **Third-party confirmation.** Reviews, news coverage, industry directories, and community discussions. Assistants treat what others say about you as evidence. - **Freshness.** Visible "updated" dates and current information, especially for anything that changes. - **Readable HTML.** Most AI crawlers fetch the HTML without running JavaScript, so content that appears only after scripts run is invisible to them. The [JavaScript SEO guide](https://gerriscorp.com/guides/javascript-seo/) shows how to check. ## What you can do this quarter 1. Ask the major assistants the ten questions your buyers ask, and write down the answers and the sources cited. 2. Fix your own pages first: one clear page per service or product, with the facts stated plainly and an FAQ section with real answers. 3. Make your facts consistent everywhere: name, description, location, founding date, leadership, services, prices where public. 4. Add schema.org structured data for your organization, people, products, and services, matching the visible page. 5. Check robots.txt and your CDN's bot settings for the AI crawlers you want. 6. Submit your sitemap to Google Search Console and Bing Webmaster Tools, and turn on IndexNow. 7. Consider an [llms.txt](https://gerriscorp.com/guides/glossary/#llms-txt) file. It's a proposed convention from 2024 that gives language models a plain summary of your site; adoption by AI companies is still uncertain, and it costs almost nothing. 8. Repeat the same questions in a month and compare. ## Measuring it AI answers vary with phrasing, location, account history, and time, so a single test proves little. Use a fixed set of prompts, run them on a schedule, and record the answers and citations. Add referral traffic from chatgpt.com, perplexity.ai, gemini.google.com, and copilot.microsoft.com in analytics, and watch which pages they land on. I do this work as [AI search visibility](https://gerriscorp.com/services/ai-search/), starting with an AI search readiness audit. ## References - [Google Search Central: AI features and your website](https://developers.google.com/search/docs/appearance/ai-features) - [Google Search Central: Creating helpful, reliable, people-first content](https://developers.google.com/search/docs/fundamentals/creating-helpful-content) - [OpenAI: Overview of OpenAI crawlers](https://platform.openai.com/docs/bots) Written by [Chris Abraham](https://gerriscorp.com/about/), founder of Gerris Corp in Arlington, Virginia, from his own client engagements, with every technical claim checked against the documentation listed. Websites since 1994, digital marketing since 2002. [Editorial standards](https://gerriscorp.com/standards/) · [Upwork profile](https://www.upwork.com/freelancers/chrisjabraham) --- Source: https://gerriscorp.com/guides/javascript-seo/ Updated: 2026-10-05 # How to tell if JavaScript is hiding your content from Google and AI By [Chris Abraham](https://gerriscorp.com/about/) · Published October 5, 2026 A page can look complete in a browser and nearly empty to a crawler. When the important content depends on JavaScript, search engines may see less of it, later, and AI crawlers may not see it at all. ## How crawlers handle JavaScript Googlebot renders pages with an up-to-date version of Chromium, so it can run JavaScript. Rendering happens in a queue after the initial crawl, though, and the renderer behaves like a very patient visitor who never clicks, never types, and never scrolls the way a person does. It loads the page with a tall viewport and takes a snapshot. Content that waits for a click, a real scroll event, or a user action can be missing from that snapshot. Most AI crawlers are simpler. GPTBot, ClaudeBot, PerplexityBot, and similar crawlers generally fetch the HTML the server sends and read it without running JavaScript. If your product details, prices, reviews, or answers exist only after scripts run, those crawlers see a shell. ## Five tests that settle it ### 1. Compare view-source with the rendered page Open the page, then open view-source. View-source shows the HTML your server sent; the Elements panel in developer tools shows the DOM after JavaScript ran. Search view-source for a sentence from the content you care about. If it's missing, crawlers that don't render can't see it. ### 2. Fetch it from the command line ``` curl -sL https://example.com/products/widget-200 | grep -c "Specifications" ``` A count of zero means the text isn't in the server's HTML. ### 3. Disable JavaScript Turn off JavaScript in your browser's developer tools and reload. What remains is roughly what a non-rendering crawler gets. ### 4. Ask Google directly In Search Console, run URL Inspection on the page, click "Test live URL," then "View tested page" and the HTML tab. That's the HTML Google rendered. If your content is missing there, Google doesn't have it. ### 5. Crawl both ways Crawl a sample of pages in Screaming Frog with JavaScript rendering off, then on, and compare word counts by template. In one diagnosis I ran, category pages yielded thousands of words while flagship product pages yielded 250 to 400 words despite weighing more than a megabyte, which pointed straight at the product template. ## Common causes - **Client-side rendering.** Single-page apps that send an empty HTML shell and build the page in the browser. - **Content that loads on scroll or interaction.** Sections rendered only when they enter the viewport after a real scroll, such as Alpine.js `x-if` combined with `x-intersect`, or reviews fetched when a visitor scrolls near them. - **Content that loads on click.** Tabs and accordions that fetch their content when opened. Tabs that merely hide content already in the HTML are fine. - **Links without real URLs.** Navigation built with click handlers instead of `` links, which crawlers can't follow. - **Infinite scroll without paginated URLs.** Products beyond the first batch never get a crawlable link. - **Metadata changed by JavaScript.** Titles, canonical tags, or robots directives rewritten after load, so the raw HTML and the rendered page disagree. - **Blocked resources.** JavaScript or CSS files disallowed in robots.txt, which prevents Google from rendering the page properly. ## Fixes - **Render on the server.** Server-side rendering or static generation puts the content in the initial HTML. Next.js, Nuxt, SvelteKit, Astro, and similar frameworks do this well when pages are configured for it. - **Keep content in the HTML and hide it with CSS.** In Alpine.js, `x-show` keeps an element in the DOM and only toggles visibility, while `x-if` removes it entirely until the condition is true. Use animation as progressive enhancement on content that's already present. - **Use real links and paginated URLs** for navigation and long lists. - **Put titles, canonicals, and structured data in the server's HTML**, and keep them unchanged after load. - **Avoid dynamic rendering** as a long-term answer. Google describes serving crawlers a separately rendered version as a workaround, and server rendering is the durable fix. ## Writing the ticket Developers fix these problems fastest with evidence: the affected template, example URLs, the word count with and without rendering, the Search Console live test result, and a testable definition of done, such as "a curl of the product URL returns the specification table." There's a [sample ticket on the developers page](https://gerriscorp.com/services/developers/). I diagnose rendering problems as part of [technical SEO forensics](https://gerriscorp.com/services/technical-seo/). ## References - [Google Search Central: JavaScript SEO basics](https://developers.google.com/search/docs/crawling-indexing/javascript/javascript-seo-basics) - [OpenAI: Overview of OpenAI crawlers](https://platform.openai.com/docs/bots) Written by [Chris Abraham](https://gerriscorp.com/about/), founder of Gerris Corp in Arlington, Virginia, from his own client engagements, with every technical claim checked against the documentation listed. Websites since 1994, digital marketing since 2002. [Editorial standards](https://gerriscorp.com/standards/) · [Upwork profile](https://www.upwork.com/freelancers/chrisjabraham) --- Source: https://gerriscorp.com/guides/crawled-not-indexed/ Updated: 2026-10-05 # "Crawled, currently not indexed": what it means and how to fix it By [Chris Abraham](https://gerriscorp.com/about/) · Published October 5, 2026 Google visited the page, read it, and decided not to put it in the index, at least for now. It's the most misunderstood status in Search Console, and the fix depends entirely on why Google made that call. ## Where you see it In Google Search Console, open Indexing, then Pages. The "Why pages aren't indexed" table lists every reason Google has for leaving URLs out. "Crawled, currently not indexed" means Googlebot fetched the URL successfully and chose not to index it. Google gives no specific reason, and the status alone isn't an error. Every large site has some URLs here, and many of them deserve to be. ## How it differs from "Discovered, currently not indexed" "Discovered, currently not indexed" means Google knows the URL exists and hasn't crawled it yet. That usually points to crawl priority: too many URLs, weak internal linking, a slow server, or a site Google doesn't consider worth crawling quickly. "Crawled, currently not indexed" means Google did crawl the page and judged it not worth indexing. One is about getting Google to look; the other is about what Google saw when it looked. ## Common causes - **Thin or duplicate content.** Pages that say little, or say nearly the same thing as other pages: tag archives, near-identical location pages, product variants, and boilerplate-heavy templates. - **Content hidden from the renderer.** The page looks rich to visitors, but Google's rendered HTML holds only the template, because the substance loads on scroll or click. The [JavaScript SEO guide](https://gerriscorp.com/guides/javascript-seo/) shows how to check. - **Weak signals of importance.** Few internal links, no external links, buried deep in the site. - **Low-value URL patterns.** Filter and sort parameters, internal search results, and session URLs that multiply without adding anything. - **Soft 404s and empty states.** Out-of-stock or "no results" pages that return a 200 status. - **A new or recently changed site.** Google is still deciding, and many URLs move into the index over the following weeks. ## A method that finds the real cause 1. **Export the examples.** Click the status in the report and export the URL list. Search Console shows a sample of up to 1,000 URLs. 2. **Group them by template.** Sort the URLs into page types: product, category, article, location, tag, parameter. A status spread evenly across the site tells a different story than a cluster in one template. 3. **Ask whether each group deserves indexing.** Parameter URLs, tag pages, and near-duplicates are often correctly excluded. Handle those with canonicals, noindex, or by removing the links that create them, and move on. 4. **Inspect the important ones.** For pages that should rank, run URL Inspection, test the live URL, and read the rendered HTML. Is the main content there? Is the canonical the URL you expect? Is the page returning 200? 5. **Compare with pages that are indexed.** Crawl both groups and compare word counts, internal links, duplication, and load time. The difference usually points at the cause. 6. **Check the dates.** Line up when the count started rising with deployments, template changes, migrations, and plugin updates. 7. **Keep other problems separate.** A backlink spike or a redirect error at the same time may be a coincidence. Investigate each on its own track until the data connects them. ## Fixes, by cause - Thin or duplicate pages: merge them, expand them with real substance, or canonicalize them to the strongest version. - Hidden content: render it in the server's HTML. - Weak signals: link to the pages from relevant, indexed pages and from navigation where it makes sense. - Low-value patterns: stop generating crawlable links to them, and keep them out with canonicals or noindex. - Soft 404s: return a real 404 or 410, or give the page useful content. After the fix ships, click "Validate fix" in the report. Validation takes days to weeks, and Google reprocesses pages at its own pace. Request indexing through URL Inspection for a handful of the most important pages. ## When it's a crisis A sudden rise concentrated in your most valuable template, with a matching traffic drop, is a technical emergency, and it's usually a rendering or template change. A slow, even scatter across low-value pages is housekeeping. Telling the two apart is the first job. I diagnose indexing problems as part of [technical SEO forensics](https://gerriscorp.com/services/technical-seo/) and [Search Console cleanup](https://gerriscorp.com/services/search-console/). ## References - [Search Console Help: Page indexing report](https://support.google.com/webmasters/answer/7440203) - [Google Search Central: JavaScript SEO basics](https://developers.google.com/search/docs/crawling-indexing/javascript/javascript-seo-basics) Written by [Chris Abraham](https://gerriscorp.com/about/), founder of Gerris Corp in Arlington, Virginia, from his own client engagements, with every technical claim checked against the documentation listed. Websites since 1994, digital marketing since 2002. [Editorial standards](https://gerriscorp.com/standards/) · [Upwork profile](https://www.upwork.com/freelancers/chrisjabraham) --- Source: https://gerriscorp.com/guides/migration-checklist/ Updated: 2026-10-05 # The website migration SEO checklist By [Chris Abraham](https://gerriscorp.com/about/) · Published October 5, 2026 Migrations lose traffic for predictable reasons: URLs that weren't mapped, redirects that weren't tested, templates that changed what crawlers see, and nobody watching afterward. This checklist covers each stage. ## Before you start - Record a baseline: organic sessions and conversions by landing page from analytics, and clicks, impressions, and indexed pages from Search Console. Export them, because you'll compare against them for months. - Decide the launch window. Avoid your busiest season. - Make sure Search Console and Bing Webmaster Tools are verified for both the old and new sites, and that you'll keep access to the old domain if it's changing. ## Build the URL inventory Combine every source, because each one misses something: - A full crawl of the current site. - Every URL in the XML sitemaps. - Pages with clicks or impressions in Search Console over the last 16 months. - Landing pages with traffic in analytics. - URLs with external backlinks, from Ahrefs, Semrush, or Search Console's Links report. - Images, PDFs, and other files that rank or receive links. ## Build the redirect map - Map every old URL to its closest equivalent on the new site with a 301 or 308 permanent redirect. - Redirect to the most relevant page, never to the home page in bulk. Google treats mass redirects to the home page like soft 404s. - Make deliberate decisions about pages you're retiring: redirect them to a close substitute, or let them return 404 or 410 if nothing fits. - Avoid chains. Every old URL should reach its final destination in one hop, including URLs that were already redirecting. - Keep the map in a spreadsheet: old URL, new URL, status, reason. It's the document every later question goes back to. ## Review the new site before launch - Crawl staging and compare titles, descriptions, headings, canonicals, and word counts with the old site, template by template. - Check that the main content is in the server's HTML, so it doesn't depend on JavaScript. - Check structured data, internal links, image alt text, and hreflang if you have more than one language. - Test Core Web Vitals on the new templates. - Keep staging blocked from search with authentication or noindex, and write down exactly how, so it can be removed at launch. ## Launch day - Remove the staging block, and confirm production robots.txt and meta robots tags allow crawling. - Test the redirect map in bulk against the live site: status codes, single hops, correct destinations. - Submit the new XML sitemaps. Keep a sitemap of the old URLs available for a few weeks so Google recrawls them and discovers the redirects faster. - For a domain change, use Google's Change of Address tool in Search Console and Bing's Site Move tool. - Confirm analytics and tag tracking work on every template. - If DNS changes, confirm that mail records were left untouched and email still arrives. ## The weeks after - Watch Search Console daily for the first two weeks: page indexing, crawl stats, and 404s. - Compare organic landing pages with the baseline, and investigate every important page that lost traffic. - Fix redirect gaps as they appear in 404 reports and server logs. - Update internal links that still point at old URLs. - Ask the most valuable sites linking to you to update their links. - Keep the redirects in place for at least a year, and ideally indefinitely. ## Special cases ### HTTP to HTTPS and www changes Pick one canonical host and protocol, redirect every other combination to it in a single hop, and update canonicals, sitemaps, and internal links to match. ### Merging several sites into one Map each old site's pages to their best home on the new one, and keep every old domain registered and redirecting. Old domains carry links for years. ### Moving to a JavaScript framework Check that the new templates render their content on the server. A migration from a traditional CMS to a client-rendered app is a common way to lose content from Google and AI crawlers. See the [JavaScript SEO guide](https://gerriscorp.com/guides/javascript-seo/). ## What to expect A well-run migration often shows some fluctuation for a few weeks while Google reprocesses the site, then settles. Domain changes take longer than platform changes on the same domain. A drop that deepens after the first month, or that's concentrated in one template, means something specific went wrong, and it's worth diagnosing rather than waiting out. I run this process as [website migration support](https://gerriscorp.com/services/migrations/), before launch or after it. ## References - [Google Search Central: Site moves with URL changes](https://developers.google.com/search/docs/crawling-indexing/site-move-with-url-changes) - [Google Search Central: Redirects and Google Search](https://developers.google.com/search/docs/crawling-indexing/301-redirects) Written by [Chris Abraham](https://gerriscorp.com/about/), founder of Gerris Corp in Arlington, Virginia, from his own client engagements, with every technical claim checked against the documentation listed. Websites since 1994, digital marketing since 2002. [Editorial standards](https://gerriscorp.com/standards/) · [Upwork profile](https://www.upwork.com/freelancers/chrisjabraham) --- Source: https://gerriscorp.com/guides/email-authentication/ Updated: 2026-10-05 # SPF, DKIM, and DMARC for every domain that sends email By [Chris Abraham](https://gerriscorp.com/about/) · Published October 5, 2026 Three DNS records decide whether mail from your domain is trusted. Since 2024, the largest mailbox providers require them, and mail without them increasingly lands in spam or bounces. ## The current requirements Since February 2024, Gmail and Yahoo require every sender to authenticate mail with SPF or DKIM, to have valid forward and reverse DNS for sending servers, and to keep spam complaint rates low. Bulk senders, those sending around 5,000 or more messages a day to Gmail accounts, must also have SPF, DKIM, and a DMARC policy, align the visible From domain with SPF or DKIM, offer one-click unsubscribe on marketing mail, and keep the spam rate reported in Google Postmaster Tools below 0.3%. Since May 2025, Microsoft's Outlook.com has required SPF, DKIM, and DMARC from senders of more than 5,000 messages a day to its consumer addresses. Even small businesses are affected, because a newsletter tool, CRM, invoicing system, or help desk sending as your domain counts as a sender. ## SPF: who may send SPF (Sender Policy Framework) is a TXT record on your domain listing the servers and services allowed to send mail as you. ``` example.com. TXT "v=spf1 include:_spf.google.com include:sendgrid.net ~all" ``` - Publish exactly one SPF record per domain. Two records break SPF. - SPF allows at most ten DNS lookups. Each `include` counts, and nested includes count too. Too many services can push you over. - `~all` (soft fail) is the common ending; `-all` (fail) is stricter. With DMARC in place, either works. ## DKIM: a signature on every message DKIM (DomainKeys Identified Mail) signs each message with a private key; receivers check the signature against a public key published in DNS under a selector. ``` google._domainkey.example.com. TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkq..." ``` - Every service that sends as your domain needs its own DKIM setup, usually a TXT or CNAME record the service provides. - Use 2048-bit keys where the service offers them. - DKIM survives forwarding better than SPF, which makes it the more reliable of the two for DMARC alignment. ## DMARC: the policy that ties them together DMARC (Domain-based Message Authentication, Reporting, and Conformance) tells receivers what to do when a message claiming to be from your domain fails authentication, and asks them to send you reports. ``` _dmarc.example.com. TXT "v=DMARC1; p=none; rua=mailto:dmarc@example.com" ``` - A message passes DMARC when SPF or DKIM passes and the domain it passed for aligns with the visible From address. - `p=none` monitors only, `p=quarantine` sends failures to spam, and `p=reject` refuses them. - `rua` sets where daily aggregate reports go. They're XML files listing every source that sent mail as your domain and whether it passed. ## Reaching enforcement safely 1. Inventory every service that sends mail as your domain. 2. Set up SPF and DKIM for each. 3. Publish DMARC at `p=none` with reporting, and read the reports for two to four weeks, using a report viewer to make them readable. 4. Fix every legitimate source that fails. 5. Move to `p=quarantine`, optionally with `pct` below 100 to phase it in, and keep reading reports. 6. Move to `p=reject` once failures are only spoofing. Enforcement is what stops criminals sending invoices and password resets in your name. It also unlocks BIMI, which can show your logo next to your mail in supporting inboxes when combined with a verified mark certificate. ## Common mistakes - Two SPF records after a new service is added, which invalidates both. - A sending service set up without DKIM, so its mail fails DMARC once enforcement begins. - DMARC reports sent to a mailbox nobody reads. - Jumping straight to `p=reject` and blocking legitimate invoices or password resets. - Mail records lost during a DNS provider change because only the web records were copied. ## Domains that don't send mail Parked and secondary domains get spoofed too. Protect them with an SPF record of `v=spf1 -all`, a DMARC record at `p=reject`, and no MX records if they receive no mail. ## Changing DNS without breaking mail Website moves, CDN setups, and DNS provider changes are when mail records get lost. Export every record first, recreate them exactly, keep MX, SPF, DKIM, and DMARC untouched unless they're the point of the change, and send test messages afterward. Header analyzers show exactly which checks passed. I set this up and troubleshoot deliverability as [email authentication and DNS](https://gerriscorp.com/services/email-and-dns/) work. ## References - [RFC 7208: Sender Policy Framework (SPF)](https://www.rfc-editor.org/rfc/rfc7208) - [RFC 7489: DMARC](https://www.rfc-editor.org/rfc/rfc7489) - [Google Workspace Admin Help: Email sender guidelines](https://support.google.com/a/answer/81126) Written by [Chris Abraham](https://gerriscorp.com/about/), founder of Gerris Corp in Arlington, Virginia, from his own client engagements, with every technical claim checked against the documentation listed. Websites since 1994, digital marketing since 2002. [Editorial standards](https://gerriscorp.com/standards/) · [Upwork profile](https://www.upwork.com/freelancers/chrisjabraham) --- Source: https://gerriscorp.com/guides/personal-information-removal/ Updated: 2026-10-05 # How to remove your personal information from data brokers and search By [Chris Abraham](https://gerriscorp.com/about/) · Published October 5, 2026 Your home address, phone numbers, relatives, and age are probably for sale on dozens of people-search sites. Removing them is tedious and never permanent, and it's still worth doing, especially for executives, public figures, and anyone with a reason to be careful. ## Where the information comes from Data brokers compile profiles from public records such as property deeds, voter files, court records, and business filings, combined with marketing data, social media, and other brokers. People-search sites such as Spokeo, Whitepages, BeenVerified, Radaris, and many others sell access to those profiles, and search engines index the result pages, which is how your address ends up in Google results for your name. ## Opting out, site by site - Most people-search sites have an opt-out form, usually linked from the footer as "Do not sell," "Opt out," or "Privacy." - Search each site for every version of your name, past and current addresses, and relatives' listings that include you. - Use a dedicated email address for opt-out requests, since many sites require confirmation by email. - Keep a log of each site, the date, and the confirmation. Listings reappear when brokers refresh their data, so the work repeats every few months. - Commercial removal services automate much of this for a subscription. They cover the major sites well and the long tail less well. ## Google's "Results about you" Google's Results about you tool lets you request removal of search results that show your phone number, email address, or home address, and it can alert you when new results with your contact information appear. Removal from Google doesn't delete the page from the website itself, so pair it with an opt-out at the source. Google also has separate removal policies for doxxing, non-consensual explicit images, and certain other harmful content. ## Your legal rights ### California's Delete Act and DROP California's Delete Act created the Delete Request and Opt-out Platform, known as DROP, run by the California Privacy Protection Agency. Since January 2026, California residents can submit one request that goes to every registered data broker, and brokers must begin processing those requests in August 2026 and keep checking for new ones on a regular schedule. It's the most significant change to data broker removal in years. ### Other states California, Vermont, Texas, and Oregon require data brokers to register, which makes the industry easier to identify. A growing number of state privacy laws give residents a right to delete personal information held by businesses, with exceptions, so check what your state provides. ### Outside the US In the European Union and the United Kingdom, data protection law gives a right to erasure, and search engines handle delisting requests for results about you that are inaccurate, inadequate, or no longer relevant. ## What removal can't do Public records themselves usually stay public, though some states let certain people, such as judges, law enforcement officers, and domestic violence survivors, shield their addresses. Legitimate news coverage is rarely removable. Where removal isn't available, the practical answer is a stronger, accurate public record that ranks above what you can't remove. ## Protecting the people around you Broker profiles link relatives, so a spouse's or parent's listing can expose your address even after your own is removed. For executives and public figures, the work should cover the household, old addresses, and any properties held in a personal name. Consider holding new property in a trust or entity where that's appropriate, and use a mailing address that isn't your home for registrations and subscriptions. ## Keeping it clean Brokers refresh their data from public records and other brokers constantly, so removed listings come back. A quarterly sweep across all the major sites catches relistings early, and monitoring tools, including Results about you, flag new appearances between sweeps. ## A sensible routine 1. Search your name, with and without your city, in Google and Bing, and on the largest people-search sites. 2. Opt out of every listing you find, and log each request. 3. Set up Results about you, and use DROP if you're a California resident. 4. Repeat every three months. 5. For families and executives, cover spouses, children, and older addresses as well. I handle this for clients as part of [reputation and perception management](https://gerriscorp.com/services/reputation/). ## References - [FTC Consumer Advice: People search sites that sell your information](https://consumer.ftc.gov/articles/what-know-about-people-search-sites-sell-your-information) - [California Privacy Protection Agency: Data broker registry](https://cppa.ca.gov/data_broker_registry/) Written by [Chris Abraham](https://gerriscorp.com/about/), founder of Gerris Corp in Arlington, Virginia, from his own client engagements, with every technical claim checked against the documentation listed. Websites since 1994, digital marketing since 2002. [Editorial standards](https://gerriscorp.com/standards/) · [Upwork profile](https://www.upwork.com/freelancers/chrisjabraham) --- Source: https://gerriscorp.com/guides/traffic-drop/ Updated: 2026-10-06 # How to diagnose a Google traffic drop in Search Console By [Chris Abraham](https://gerriscorp.com/about/) · Published October 6, 2026 Organic traffic fell and everyone wants an answer by Friday. The answer is almost always findable, and it comes from narrowing the drop down until only one explanation fits. This is the order I work in. ## 1. Confirm the drop is real Start by ruling out measurement. Analytics can fall while search traffic is fine. - Compare Google Analytics with Search Console clicks over the same dates. If Search Console is flat and analytics fell, the problem is tracking: a broken tag, a new consent banner, a site redesign that dropped the snippet from some templates. - Check that the date ranges match in length and in days of the week. A Monday-to-Sunday week compared with a Thursday-to-Wednesday week shows a false drop on a business site. - Compare with the same period last year. Many businesses fall every summer or every January, and that's seasonality. One reporting change to know about: in September 2025 Google stopped supporting a parameter that rank-tracking tools used to load a hundred results at a time. Desktop impressions fell sharply for many sites and average position appeared to improve, with no change in clicks. A drop in impressions alone from that month is usually that. ## 2. Read clicks, impressions, CTR, and position together | Pattern | Likely meaning | | --- | --- | | Impressions and clicks both fell, position fell | Rankings dropped: an algorithm update, a technical problem, or stronger competition | | Impressions steady, clicks and CTR fell | The results page changed: an AI Overview, more ads, a new feature above you, or a rewritten title | | Impressions fell, position steady | Fewer people are searching: seasonality, a news cycle ending, or a product falling out of fashion | | Everything fell to near zero | The site is blocked, deindexed, or under a manual action | ## 3. Find where the loss is Use the Compare option in the Performance report, then sort each tab by the change in clicks. - **Pages.** Is the loss spread across the site, or concentrated in one section or template? A drop in one template points to something technical about that template. - **Queries.** Separate branded searches from everything else with a regular expression filter on the brand name. Branded loss means fewer people are looking for the business; unbranded loss means rankings. - **Countries and devices.** A drop on mobile alone suggests a mobile rendering or speed problem. A drop in one country suggests hreflang, a local competitor, or a regional update. - **Search appearance and search type.** Lost rich results, or lost image and video traffic, show up here. ## 4. Line it up with dates Find the first day of the decline as precisely as the daily data allows, then check what happened that week. - **Google's Search Status Dashboard** lists confirmed core updates, spam updates, and incidents with start and end dates. - **Your own changes.** Deploys, plugin and theme updates, CMS upgrades, migrations, CDN or security changes, new consent tools, and changes to robots.txt or redirects. Ask the developers for the deploy log. - **Outside events.** A competitor's launch, a press story, a product recall. ## 5. Check the technical reports - **Security and Manual actions.** One look, and either there's a notice or there isn't. - **Page indexing.** A rise in "Crawled, currently not indexed," "Excluded by noindex," "Blocked by robots.txt," or "Duplicate, Google chose different canonical" that starts on the same date is a strong lead. - **Crawl stats.** Under Settings: host status problems, a spike in server errors, slower response times, or a sudden change in crawl volume. - **URL Inspection.** Run a live test on a page that lost traffic and read the rendered HTML. Content missing from Google's render is a common, invisible cause. The [JavaScript SEO guide](https://gerriscorp.com/guides/javascript-seo/) has the tests. ## 6. Separate the problems Drops often have more than one cause at once: a core update lands the same month a redesign broke a template, or a backlink spam spike shows up beside a redirect error. Treat each candidate as its own hypothesis and test it against the data separately. When the evidence for each one points to different pages or different dates, they're different problems, and each gets its own fix. ## 7. Write it down The deliverable is a short document: the size and start date of the drop, where it is concentrated, the cause, the evidence for it, the explanations that were ruled out and why, and the fix with tickets the developers can act on. Then mark the fix's ship date and watch the same report, filtered the same way, over the following weeks. ## Questions about traffic drops ### How fast does traffic recover after a fix? A technical fix such as an unblocked template often recovers within weeks, as Google recrawls. Losses from a core update usually move only when Google runs a later update, after the content has improved. ### How far back does Search Console go? Sixteen months. For longer history, set up the bulk export to BigQuery now, because it only collects data from the day it starts. Finding the cause of lost traffic is the core of [technical SEO forensics](https://gerriscorp.com/services/technical-seo/). See also the [indexing recovery case study](https://gerriscorp.com/case-studies/indexing-recovery/). ## References - [Google Search Central: Debugging drops in Google Search traffic](https://developers.google.com/search/docs/monitor-debug/debugging-search-traffic-drops) - [Google Search Status Dashboard](https://status.search.google.com/) - [Search Console Help: Page indexing report](https://support.google.com/webmasters/answer/7440203) Written by [Chris Abraham](https://gerriscorp.com/about/), founder of Gerris Corp in Arlington, Virginia, from his own client engagements, with every technical claim checked against the documentation listed. Websites since 1994, digital marketing since 2002. [Editorial standards](https://gerriscorp.com/standards/) · [Upwork profile](https://www.upwork.com/freelancers/chrisjabraham) --- Source: https://gerriscorp.com/guides/canonical-tags/ Updated: 2026-10-06 # Canonical tags: how Google chooses which URL to index By [Chris Abraham](https://gerriscorp.com/about/) · Published October 6, 2026 Most sites publish the same content at more than one address: with and without tracking parameters, sorted and filtered, printed, paginated, or copied across domains. Google picks one address from each group to show in results. The canonical tag is how you tell Google which one you prefer. ## What the tag does A canonical tag is a line in the page's head: ``` ``` It says: this page is a copy, or the original, of the content at that address, and that address is the one to index. Google consolidates ranking signals such as links onto the chosen URL and shows it in results. The duplicates stay reachable for visitors. For files without a head, such as PDFs, the same instruction can go in an HTTP header: `Link: ; rel="canonical"`. ## A hint, weighed against other signals Google treats the canonical tag as a strong hint. It weighs the tag together with redirects, internal links, the URLs listed in the XML sitemap, hreflang annotations, and a preference for HTTPS and for shorter, cleaner URLs. When the signals agree, Google follows the tag almost every time. When they disagree, Google decides for itself. A typical conflict: every product page declares a clean canonical URL, while the navigation, the sitemap, and the breadcrumbs all link to a version with a parameter. Three signals point one way and one points the other, and Google may side with the majority. ## The Search Console statuses The Page indexing report shows canonical decisions in three statuses. - **Alternate page with proper canonical tag.** The page points elsewhere, and Google agreed. This is working as intended. - **Duplicate without user-selected canonical.** Google found duplicates with no canonical tag and picked one itself. Add tags so the choice is yours. - **Duplicate, Google chose different canonical than user.** You named one URL and Google picked another. Look for conflicting signals, or for pages that are more different than you think. URL Inspection shows both the user-declared canonical and the Google-selected canonical for any page, which settles individual cases. ## The rules I apply - **Every indexable page declares itself.** A self-referencing canonical guards against parameter copies that other sites and ad platforms create. - **Absolute URLs.** Include the protocol and host. Relative canonicals are valid, and they break the moment a page is served from a staging host or a second domain. - **The target returns a 200.** A canonical pointing at a redirect, a 404, or a noindexed page sends contradictory instructions. - **One tag per page, in the head.** Two different canonicals cancel each other, and Google ignores canonical tags in the body. Plugins and themes that each add their own tag are the usual cause. - **In the server's HTML.** A canonical inserted or changed by JavaScript may be read late or not at all. If the raw HTML and the rendered HTML disagree, fix the template. - **Internal links match.** Navigation, breadcrumbs, and sitemaps link to the canonical version. ## Common mistakes - **Pagination pointing to page one.** Page two of a category holds different products from page one. Each paginated page should declare itself. Google stopped using rel prev and next as an indexing signal in 2019, so plain crawlable links between the pages do that job. - **Canonical and noindex together.** One says "index that other page instead," the other says "index nothing." Pick one. - **Every page pointing at the home page.** A template bug that copies the home URL into every canonical can remove most of a site from results within weeks. - **Canonicals to the HTTP version, or to the old domain.** Leftovers from a migration that nobody updated. - **Product variants.** Color and size variants that differ only by a parameter usually canonicalize to the main product. Variants that people search for by name, such as a specific model, may deserve their own indexable pages. ## Across domains A canonical can point to another domain, which is how a business that runs two sites with overlapping content can concentrate signals on one. For syndicated articles republished by partners, Google's current advice is that the partner should block indexing of its copy with noindex, because a cross-domain canonical on a large partner site doesn't always win against that site's own authority. ## Canonical or redirect When visitors never need the duplicate URL, redirect it. A 301 is a stronger signal, and nobody lands on the copy. Use a canonical when the duplicate has to keep working, such as a filtered view, a tracking link, or a print version. Canonical audits are part of [technical SEO forensics](https://gerriscorp.com/services/technical-seo/) and [large-site SEO](https://gerriscorp.com/services/large-sites/). For the related indexing status, see [Crawled, currently not indexed](https://gerriscorp.com/guides/crawled-not-indexed/). ## References - [Google Search Central: What is canonicalization](https://developers.google.com/search/docs/crawling-indexing/canonicalization) - [Google Search Central: How to specify a canonical URL](https://developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls) Written by [Chris Abraham](https://gerriscorp.com/about/), founder of Gerris Corp in Arlington, Virginia, from his own client engagements, with every technical claim checked against the documentation listed. Websites since 1994, digital marketing since 2002. [Editorial standards](https://gerriscorp.com/standards/) · [Upwork profile](https://www.upwork.com/freelancers/chrisjabraham) --- Source: https://gerriscorp.com/guides/robots-txt/ Updated: 2026-10-06 # How robots.txt works, and the mistakes that cost traffic By [Chris Abraham](https://gerriscorp.com/about/) · Published October 6, 2026 robots.txt is a plain text file at the root of a site that tells crawlers which paths they may fetch. It's small, it's public, and a single wrong line in it can take a site out of Google. Here's how it actually behaves. ## Where it lives and what it covers The file must sit at the root of the host, such as `https://example.com/robots.txt`. It applies only to that exact protocol and host: `www.example.com`, `shop.example.com`, and the HTTP version each need their own. Google reads up to 500 kibibytes of it and generally caches it for up to a day, so changes take effect within about 24 hours. ## The syntax ``` User-agent: * Disallow: /cart/ Disallow: /search Allow: /search/help User-agent: GPTBot Disallow: / Sitemap: https://example.com/sitemap.xml ``` - **User-agent** starts a group of rules for a named crawler. `*` means every crawler that has no group of its own. A crawler obeys only the most specific group that names it and ignores the rest, so a bot with its own group skips everything under `*`. - **Disallow** and **Allow** take a path prefix. `Disallow: /search` blocks `/search`, `/search?q=shoes`, and `/searching`. - **Wildcards.** `*` matches any characters, and `$` anchors the end. `Disallow: /*.pdf$` blocks every URL ending in .pdf. - **Conflicts.** When an Allow and a Disallow both match, Google uses the longer, more specific rule, and Allow wins a tie. - **Sitemap** lines can appear anywhere and apply to every crawler. Google ignores `Crawl-delay`; Bing honors it. Google also stopped supporting `Noindex` lines in robots.txt in 2019. ## Blocking crawling is different from blocking indexing This is the most expensive misunderstanding. Disallow stops a crawler from fetching a page. It doesn't stop the URL from being indexed. If other pages link to a blocked URL, Google can index the address alone, with no content, and Search Console reports it as "Indexed, though blocked by robots.txt." To keep a page out of results, let it be crawled and give it a `noindex` robots meta tag or an `X-Robots-Tag: noindex` header. Google has to fetch the page to see that instruction, so a page that's both disallowed and noindexed stays in the index, because the noindex is never read. For content that must stay private, use a login. robots.txt is public, and listing secret paths in it advertises them. ## Status codes matter - **200**: Google follows the rules in the file. - **404 or another 4xx**: Google treats the site as having no restrictions and crawls everything. - **500 or another 5xx, or a timeout**: Google treats the whole site as disallowed and pauses crawling. If the error lasts, Google falls back to its last good copy, and after about a month without one it treats the site as unrestricted. A server or firewall that errors only on robots.txt can quietly stop all crawling, which is why it's one of the first URLs I check on a site that lost traffic. ## AI crawlers Each AI company publishes the user agents it uses, and each honors robots.txt. They split into crawlers that gather training data, such as GPTBot, ClaudeBot, and CCBot, and crawlers that fetch pages for live answers, such as OAI-SearchBot, Claude-SearchBot, and PerplexityBot. Google-Extended and Applebot-Extended are tokens rather than separate crawlers: they control whether content fetched by Googlebot and Applebot may be used for AI models, and blocking them leaves ordinary search crawling alone. The [AI assistants guide](https://gerriscorp.com/guides/ai-assistants/) lists which crawler feeds which product. This site lets every AI crawler read everything, and keeps the Markdown copies of its pages out of traditional search engines, so they never compete with the HTML pages. Because a crawler follows only its own group, naming the search engines in one group and the AI crawlers in another gives each its own rules: ``` User-agent: Googlebot User-agent: Bingbot Allow: / Disallow: /*.md$ User-agent: GPTBot User-agent: ClaudeBot User-agent: PerplexityBot Allow: / ``` ## Mistakes I find most often - **The staging file goes live.** `Disallow: /` protects a staging site, gets copied to production at launch, and blocks everything. Check robots.txt on launch day before anything else. - **Blocking CSS and JavaScript.** Google renders pages, and a disallowed script folder can leave it looking at a broken layout with missing content. - **Blocking parameters that carry real pages.** A broad rule like `Disallow: /*?` also blocks paginated categories and filtered pages that rank. - **A bot's own group dropping the general rules.** Adding a group for one crawler without repeating the shared rules gives that crawler free run of everything else. ## Testing changes Search Console's robots.txt report shows the version Google last fetched, when it fetched it, and any parsing errors. Before changing a live file, test the proposed rules against a list of important URLs with a parser that follows Google's rules, such as Google's open-source robots.txt library or a crawler like Screaming Frog with a custom robots.txt. Then confirm the change in Search Console after Google picks it up. robots.txt is part of every [crawler visibility audit](https://gerriscorp.com/services/crawler-visibility/) and every [technical SEO](https://gerriscorp.com/services/technical-seo/) engagement I run. ## References - [Google Search Central: Introduction to robots.txt](https://developers.google.com/search/docs/crawling-indexing/robots/intro) - [OpenAI: Overview of OpenAI crawlers](https://platform.openai.com/docs/bots) Written by [Chris Abraham](https://gerriscorp.com/about/), founder of Gerris Corp in Arlington, Virginia, from his own client engagements, with every technical claim checked against the documentation listed. Websites since 1994, digital marketing since 2002. [Editorial standards](https://gerriscorp.com/standards/) · [Upwork profile](https://www.upwork.com/freelancers/chrisjabraham) --- Source: https://gerriscorp.com/guides/structured-data/ Updated: 2026-10-06 # Structured data in 2026: which schema markup is worth adding By [Chris Abraham](https://gerriscorp.com/about/) · Published October 6, 2026 Structured data is a machine-readable description of what a page is about: this is a product with this price, this is a business at this address, this article was written by this person. It can earn enhanced listings in Google, and it helps every system that reads the page, including AI assistants, understand the facts without guessing. ## The format Use JSON-LD: a block of JSON in a `script` tag with the type `application/ld+json`, using the vocabulary from schema.org. Google supports Microdata and RDFa too, and recommends JSON-LD because it sits apart from the visible HTML and is easy to generate from a template. A minimal example for a business: ``` ``` ## What still earns rich results Google has narrowed the list of types that change how a result looks. In 2023 it limited FAQ rich results to well-known government and health sites and dropped How-to rich results. In 2025 it retired several more, including Claim Review, Estimated Salary, and Vehicle Listing, and stopped showing breadcrumb trails on mobile results. The types that still produce visible features include: - **Product**, with offers, price, availability, shipping, and return policy, for product snippets and merchant listings. - **Review snippets and aggregate ratings** on products, recipes, books, software, and other eligible types. Reviews of your own business on your own site are excluded. - **Organization and LocalBusiness**, for the logo and business details Google uses in knowledge panels. - **Article**, for headline, image, dates, and author. - **Event, JobPosting, Recipe, VideoObject, and Course list**, each tied to its own search feature. - **BreadcrumbList**, still shown on desktop and still useful for understanding site structure. Google's search gallery in its developer documentation is the current list, and it changes, so check it before building anything around a feature. ## Markup without a rich result still helps A retired rich result doesn't make the markup useless. FAQPage markup no longer produces dropdowns for most sites, and it still states plainly which question each answer belongs to. Search engines use structured data to understand entities: who the business is, who wrote the page, which person is which, and how they relate. Microsoft's Bing team has said that schema markup helps its language models understand content. When an assistant has to decide whether two mentions refer to the same business, consistent structured data across the web removes doubt. ## Build a connected graph The strongest pattern is one graph per page, where each thing has an `@id` and refers to the others by it. The WebSite is published by the Organization. The Organization is founded by the Person. The Article is written by the Person and is about the Service. Every page on this site carries a graph like that, built from one template, so the facts never contradict each other. - **sameAs** links an entity to its profiles elsewhere: a Wikipedia article, Wikidata, a professional profile, a Google Business Profile. Those links are how systems confirm identity. - **Stable identifiers.** Use the same `@id` for the same entity on every page. - **The same facts everywhere.** Name, address, phone, founding date, and founder should match the visible page, the business profile, and the directories. ## Rules that keep markup safe - **Mark up only what visitors can see.** Reviews, prices, and FAQs in the markup must appear on the page. Hidden or invented markup can earn a manual action for spammy structured data, which removes rich results for the whole site. - **Keep it current.** A price or an event date in the markup that disagrees with the page is a quality problem. Generate the markup from the same data as the page. - **Server-rendered.** Google can read JSON-LD injected by JavaScript, and many other crawlers can't. Put it in the HTML. ## How to validate it - **Google's Rich Results Test** shows which rich results a page is eligible for and flags missing required properties. - **The Schema Markup Validator** at validator.schema.org checks any schema.org markup against the full vocabulary, including types Google ignores. - **Search Console** lists each detected rich result type under Enhancements, with valid and invalid counts across the site and alerts when a template breaks. ## Questions about structured data ### Is structured data a ranking factor? Google says it isn't a direct ranking factor. It affects how results look and how well Google understands the page, and both of those affect clicks. ### Can a plugin handle it? Yoast, Rank Math, and Shopify themes add sensible defaults for common types. For a connected graph, custom business types, or multiple plugins that each add their own markup, it usually needs a hand-built template. I build schema and entity markup as part of [on-page SEO](https://gerriscorp.com/services/on-page-seo/) and [AI search visibility](https://gerriscorp.com/services/ai-search/) work. ## References - [Google Search Central: Introduction to structured data](https://developers.google.com/search/docs/appearance/structured-data/intro-structured-data) - [Google Search Central: Local business structured data](https://developers.google.com/search/docs/appearance/structured-data/local-business) Written by [Chris Abraham](https://gerriscorp.com/about/), founder of Gerris Corp in Arlington, Virginia, from his own client engagements, with every technical claim checked against the documentation listed. Websites since 1994, digital marketing since 2002. [Editorial standards](https://gerriscorp.com/standards/) · [Upwork profile](https://www.upwork.com/freelancers/chrisjabraham) --- Source: https://gerriscorp.com/guides/301-redirects/ Updated: 2026-10-06 # How to plan 301 redirects that keep your rankings and links By [Chris Abraham](https://gerriscorp.com/about/) · Published October 6, 2026 A redirect tells browsers and search engines that a page has moved. Done well, it carries the old page's links, bookmarks, and search history to the new address. Done badly, it quietly throws all of that away. Here's how I plan them. ## Which redirect to use | Type | Meaning | Use it for | | --- | --- | --- | | 301 | Moved permanently | Almost every move: renamed pages, merged pages, domain changes, HTTP to HTTPS | | 308 | Moved permanently, and the request method stays the same | The same jobs as a 301; some servers and APIs prefer it | | 302 or 307 | Moved temporarily | A page that will come back: a short promotion, maintenance, a geographic or login handoff | | Meta refresh at zero seconds | An HTML instruction to load another page | Hosts that can't send server redirects, such as GitHub Pages | | JavaScript redirect | A script that changes the location | A last resort; it only works once the page renders | Google treats 301 and 308 as strong signals that the new URL should replace the old one in its index. A temporary redirect is a weaker signal, though Google may eventually treat a 302 that never goes away as permanent. An instant meta refresh is read as a permanent move too, which is how this site handles the hundreds of old gerriscorp.com addresses it inherited: GitHub Pages can't send a real 301, so each old path holds a tiny page that forwards immediately and names the new page as its canonical. ## Map every old URL to its closest equivalent The redirect map is a two-column list: old URL, new URL. The work is in the second column. Each old page goes to the page that answers the same question its visitors arrived with. - **One to one when you can.** A product, article, or service that still exists goes to its new address. - **Merged pages go to the survivor.** Three thin pages folded into one strong page all point at it. - **Retired pages go to the nearest parent.** A discontinued product goes to its category, and a retired service goes to the services overview. - **Junk can stay gone.** Spam URLs, old tag archives, and test pages with no links and no traffic can return a 404 or 410. Send old pages to relevant pages, and keep the home page for the home page. Google treats a mass redirect to an unrelated page as a soft 404, so the old page's signals are dropped anyway, and visitors land somewhere that doesn't answer what they came for. ## Where the old URLs come from Build the list from every source you have, because no single one is complete. Crawl the current site with a tool such as Screaming Frog. Export pages from Search Console's Performance report and from analytics landing pages. Pull linked pages from a backlink tool. For an old site that's already gone, the Internet Archive's Wayback Machine keeps a record of URLs it captured, which is how I recovered more than six hundred old paths for this domain. ## Where to implement them - **At the edge.** Cloudflare's Redirect Rules and Bulk Redirects answer before the request ever reaches your server, which is fast and survives a change of host or platform. - **On the web server.** Apache uses `Redirect 301` or `RewriteRule` in the configuration or `.htaccess`; Nginx uses `return 301` inside a `location` block. - **In the platform.** WordPress handles them with a plugin such as Redirection or the redirect manager in Rank Math. Shopify has a URL redirects screen in the admin, and it only applies a redirect when the old path would otherwise return a 404. Squarespace, Wix, and Webflow each have a redirects panel in their settings. - **In the framework.** Next.js, Netlify, and Vercel take redirects in a configuration file that ships with the code, which keeps them under version control. Pick one layer and keep all the redirects there. Rules split across Cloudflare, the server, and a plugin are how loops and chains happen. ## Chains and loops A chain is a redirect that lands on another redirect: A goes to B, and B goes to C. Googlebot follows up to ten hops, but each hop costs time for visitors and makes the signal weaker. When a site has been redesigned more than once, old redirects often point at URLs that are themselves redirected now. Update the old rules so every one points straight at the final address. A loop is A to B and B back to A. Browsers give up with an error. Loops usually come from two layers fighting, such as an HTTPS rule in Cloudflare and a different HTTPS rule on the server. ## How to test them From a terminal, `curl -sIL https://example.com/old-page` prints every hop with its status code, so you can see a 301 followed by a 200 and nothing in between. For the full map, feed the old URL list to a crawler in list mode and check three things for each row: the first response is a 301 or 308, the final response is a 200, and the final URL matches the target in the map. Then spot check the same URLs in a private browser window, since your own browser caches permanent redirects aggressively. ## How long to keep them Google's advice is at least a year. I keep them indefinitely. Backlinks from other sites never get updated, and a redirect costs almost nothing to keep. Removing redirects after a year is how a business loses links it earned a decade ago. ## Questions about redirects ### Do 301 redirects lose PageRank? No. Google has said for years that 301, 302, and 308 redirects pass link value without a penalty. The losses people see come from redirecting to the wrong page, from chains, or from removing redirects too soon. ### Should I redirect a page I deleted on purpose? Only if something on the site now answers the same need. Otherwise a 410 tells search engines the removal was deliberate, and they drop the URL a little faster than with a 404. ### How many redirects is too many? There's no practical limit on the number of rules. Tens of thousands are normal on large sites. What matters is that each one is a single hop to a relevant page. Redirect mapping is part of every [website migration](https://gerriscorp.com/services/migrations/) I run. For the whole process, see the [migration checklist](https://gerriscorp.com/guides/migration-checklist/). ## References - [Google Search Central: Redirects and Google Search](https://developers.google.com/search/docs/crawling-indexing/301-redirects) - [Google Search Central: Site moves with URL changes](https://developers.google.com/search/docs/crawling-indexing/site-move-with-url-changes) Written by [Chris Abraham](https://gerriscorp.com/about/), founder of Gerris Corp in Arlington, Virginia, from his own client engagements, with every technical claim checked against the documentation listed. Websites since 1994, digital marketing since 2002. [Editorial standards](https://gerriscorp.com/standards/) · [Upwork profile](https://www.upwork.com/freelancers/chrisjabraham) --- Source: https://gerriscorp.com/guides/faceted-navigation/ Updated: 2026-10-06 # Faceted navigation SEO: filters, parameters, and crawl budget By [Chris Abraham](https://gerriscorp.com/about/) · Published October 6, 2026 Filters are how shoppers narrow a catalog: size, color, brand, price, rating. Every combination can become its own URL, and a store with a few thousand products can produce millions of them. Google spends its time crawling those combinations instead of the pages that sell. ## How the problem grows A category with ten colors, eight sizes, twelve brands, and five price bands has 4,800 single combinations before sort order, page number, and the order the parameters appear in. Multiply by every category and the site has far more filter URLs than products. Most of them show the same handful of items, many show none, and almost nobody searches for them. Google's documentation names faceted navigation as the most common cause of crawling problems it sees, and its December 2024 guidance on the subject is the clearest statement of what it wants. ## When crawl budget actually matters Google says crawl budget is a concern mainly for sites with more than a million unique pages that change weekly, or more than ten thousand pages that change daily. Smaller sites rarely need to think about it. The signs that a site has crossed the line: - New products take weeks to appear in Google. - Search Console's Page indexing report shows a large and growing count of "Discovered, currently not indexed." - Crawl stats show most of Googlebot's requests going to parameter URLs. - Server logs show Googlebot fetching filter combinations far more often than product pages. Server logs are the definitive source. Search Console shows a sample; the logs show every request Googlebot made and where its time went. ## Decide which filters deserve pages Some filtered views match real searches. "Women's trail running shoes," "red sofa," and "Makita cordless drills" are all a category plus one filter, and each can be a strong landing page. Use keyword research to find the combinations with search demand, usually one filter deep and occasionally two. Give each one a clean, permanent URL such as `/shoes/womens/trail/`, a unique title and heading, some introductory text, and links from the category navigation. Everything else stays a convenience for shoppers and stays out of the crawl. ## Keep the rest away from crawlers Google's guidance offers two approaches for filter URLs that shouldn't be indexed. - **Block them in robots.txt.** Disallow the parameters that create combinations, such as `Disallow: /*?*color=`. This stops crawling immediately and saves the most budget. The [robots.txt guide](https://gerriscorp.com/guides/robots-txt/) covers the syntax. - **Use URL fragments.** Filters applied after a `#`, handled by JavaScript, never create new crawlable URLs, because Google ignores fragments. Other tools are weaker for this job: - **Canonical tags** pointing filter pages at the category consolidate signals over time, and Google still has to crawl every URL to read them, so they save no crawl budget. - **noindex** keeps pages out of results and also has to be crawled to work. Over time Google crawls noindexed pages less often. - **nofollow on filter links** discourages crawling and is a hint Google may disregard. Search Console's URL Parameters tool, which used to handle this, was retired in 2022. ## If filter pages must be crawlable - Use the standard `&` separator and the same parameter order every time, so one combination has one URL. - Return a 404 for combinations with no products, and for nonsense values. A "no results" page with a 200 status becomes a soft 404 and wastes crawls. - Keep sort order and items-per-page out of the URL, or block them, since they reshuffle the same products. - Limit how many filters can be stacked into one crawlable URL. ## Pagination Paginated category pages are different from filters: they list different products, and they're how crawlers reach products deep in a catalog. Keep them crawlable with plain links, let each page declare itself as canonical, and keep pages from going on forever by giving categories sensible sizes. ## Measure the change Before changing anything, record the share of Googlebot requests going to parameter URLs, the count of discovered and unindexed pages, and how long new products take to be indexed. After the change, watch the same numbers. On large catalogs the shift in crawl toward products shows up within weeks, and the indexing of new products speeds up soon after. Crawl control for big catalogs is the focus of [large-site SEO](https://gerriscorp.com/services/large-sites/) and [ecommerce SEO](https://gerriscorp.com/services/ecommerce/). See also the [programmatic indexing case study](https://gerriscorp.com/case-studies/programmatic-indexing/). ## References - [Google Search Central: Managing crawling of faceted navigation URLs](https://developers.google.com/search/docs/crawling-indexing/crawling-managing-faceted-navigation) - [Google Search Central: How to specify a canonical URL](https://developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls) Written by [Chris Abraham](https://gerriscorp.com/about/), founder of Gerris Corp in Arlington, Virginia, from his own client engagements, with every technical claim checked against the documentation listed. Websites since 1994, digital marketing since 2002. [Editorial standards](https://gerriscorp.com/standards/) · [Upwork profile](https://www.upwork.com/freelancers/chrisjabraham) --- Source: https://gerriscorp.com/guides/hreflang/ Updated: 2026-10-06 # hreflang for English-language sites serving the US, UK, Canada, and Australia By [Chris Abraham](https://gerriscorp.com/about/) · Published October 6, 2026 A business that sells in several English-speaking countries often ends up with near-identical pages for each one. hreflang tells Google which version belongs to which audience, so a shopper in Leeds sees prices in pounds and a shopper in Toronto sees Canadian dollars. Written wrong, it does nothing at all. ## Do you need it? hreflang is for sites with separate versions of a page for different languages or regions. One English site that serves everyone the same content needs none. The tags start paying off when the versions differ in ways that matter to the visitor: - Prices and currency - Shipping, taxes, returns, and delivery times - Legal terms, regulated claims, and contact details - Spelling and vocabulary: color and colour, sneakers and trainers, apartment and flat Without hreflang, Google sees several pages saying almost the same thing, may pick one as canonical for every country, and shows the American page in Australia. With it, Google treats the pages as a set and swaps in the right member for each searcher. ## The codes Each value is an ISO 639-1 language code, optionally followed by an ISO 3166-1 country code: | Audience | Code | | --- | --- | | United States | `en-US` | | United Kingdom | `en-GB` (never en-UK, which isn't a valid code) | | Canada, English | `en-CA` | | Canada, French | `fr-CA` | | Australia | `en-AU` | | New Zealand | `en-NZ` | | Ireland | `en-IE` | | English speakers anywhere else | `en` | | Fallback for everyone unmatched | `x-default` | The language is required. A country on its own, such as `gb`, is read as a language code, and since there's no language with that code, the annotation is ignored. ## Writing the tags Every version in the set lists every version, including itself: ``` ``` The same block goes on the US, UK, and Australian pages. The annotations can also live in the XML sitemap, which is easier to maintain on large sites, or in HTTP headers for files such as PDFs. Pick one method. Mixing them invites the two copies to drift apart, and a set that disagrees with itself is ignored. ## The rules that void it - **Missing return links.** If the UK page names the US page and the US page doesn't name the UK page back, Google ignores the pair. This is the most common failure. - **Pointing at non-canonical URLs.** Every URL in the set should return a 200 and declare itself as canonical. A UK page whose canonical points at the US page tells Google to drop the UK page, and hreflang can't override that. - **Relative or mixed URLs.** Use full absolute URLs, with the same protocol and host style used everywhere else. - **Tags only in JavaScript.** Put them in the server's HTML or in the sitemap. ## How to structure the versions - **Subfolders** such as `/uk/` and `/au/` on one domain share all its authority and are the simplest to run. This is my default recommendation. - **Country domains** such as `.co.uk` and `.com.au` send the strongest local signal and build trust with local buyers, and each domain has to earn its own links. - **Subdomains** such as `uk.example.com` work, with more setup and no real advantage over subfolders. ## Don't redirect by location Redirecting visitors automatically by IP address hides versions from Google, because Googlebot crawls mostly from the United States and would only ever see the American pages. Let every URL load for everyone, and offer a banner that suggests the local version. hreflang handles search; the banner handles direct visitors. ## Bing Bing gives hreflang less weight and looks more at the `content-language` meta tag and the page's `lang` attribute. Set `` on UK pages, and so on, so both engines get a clear signal. ## Checking it Search Console retired its International Targeting report in 2022, so checking falls to crawlers. Screaming Frog and Sitebulb both validate hreflang sets, flag missing return links and non-canonical targets, and export the errors by page. After that, search from each country with a VPN or with Google's country settings and confirm the right page appears. Spot check a few sets by hand as well: open the source of each version and confirm the block of annotations is identical on every page in the set. I sort out international setups as part of [technical SEO](https://gerriscorp.com/services/technical-seo/) and [ecommerce SEO](https://gerriscorp.com/services/ecommerce/) engagements, for clients across the English-speaking world. ## References - [Google Search Central: Tell Google about localized versions of your page](https://developers.google.com/search/docs/specialty/international/localized-versions) - [Google Search Central: Managing multi-regional and multilingual sites](https://developers.google.com/search/docs/specialty/international/managing-multi-regional-sites) Written by [Chris Abraham](https://gerriscorp.com/about/), founder of Gerris Corp in Arlington, Virginia, from his own client engagements, with every technical claim checked against the documentation listed. Websites since 1994, digital marketing since 2002. [Editorial standards](https://gerriscorp.com/standards/) · [Upwork profile](https://www.upwork.com/freelancers/chrisjabraham) --- Source: https://gerriscorp.com/guides/core-web-vitals/ Updated: 2026-10-06 # Core Web Vitals explained: LCP, INP, CLS, and the fixes that work By [Chris Abraham](https://gerriscorp.com/about/) · Published October 6, 2026 Core Web Vitals are three measurements of how a page feels to real visitors: how fast the main content appears, how quickly the page responds, and how much it jumps around. Google uses them in ranking as part of page experience. They matter more to visitors than to rankings, and that alone makes them worth fixing. ## The three measurements | Metric | What it measures | Good | Poor | | --- | --- | --- | --- | | LCP, Largest Contentful Paint | Time until the biggest image or text block in view finishes rendering | 2.5 seconds or less | Over 4 seconds | | INP, Interaction to Next Paint | Delay between a tap, click, or key press and the screen visibly responding, across the whole visit | 200 milliseconds or less | Over 500 milliseconds | | CLS, Cumulative Layout Shift | How much visible content moves unexpectedly while the page is in use | 0.1 or less | Over 0.25 | INP replaced First Input Delay in March 2024. FID only measured the first interaction; INP watches every interaction and reports one of the slowest, which is why many sites that passed under FID fail under INP. ## Field data and lab data Google's assessment uses field data: measurements from real Chrome users, collected in the Chrome User Experience Report over a rolling 28 days. A page passes when the 75th percentile of visits meets the good threshold for all three metrics. Mobile and desktop are judged separately. Lab data comes from a single simulated load, such as a Lighthouse run. It's useful for debugging and for testing a fix before it ships, and it can't measure INP at all, because nobody clicks anything during a lab test. Lighthouse reports Total Blocking Time as a stand-in. A perfect Lighthouse score with failing field data is common, and the field data is the one that counts. ## Where to read it - **PageSpeed Insights** shows field data for the URL and for the whole origin at the top, and a Lighthouse lab run below it. - **Search Console's Core Web Vitals report** groups URLs with similar problems, usually by template, and tracks them over time. Fixing one template often fixes thousands of URLs. - **Chrome DevTools**, in the Performance panel, records a real session on your own machine, shows each interaction's timing, and highlights layout shifts. - **Real user monitoring**, through Google's web-vitals JavaScript library or a commercial tool, collects the metrics from your own visitors, with the element and script responsible attached. ## Fixing LCP Break LCP into its parts: time to first byte, the delay before the browser discovers the LCP resource, the time to download it, and the time to render it. Fix whichever part is largest. - **Slow server response.** Cache HTML at a CDN, speed up database queries, and remove redirects in front of the page. - **Late discovery.** Put the hero image in the HTML as an ordinary `img` tag with `fetchpriority="high"`. A background image set in CSS, or an image inserted by JavaScript, is found late. - **Lazy loading the hero.** `loading="lazy"` belongs on images below the fold. On the LCP image it delays the most important download on the page. - **Heavy files.** Serve images at the size they're displayed, in WebP or AVIF, with `srcset` for different screens. - **Render blocking.** Large stylesheets and synchronous scripts in the head hold back the first paint. Inline the critical CSS and defer the rest. ## Fixing INP Poor INP almost always means the browser's main thread was busy when the visitor interacted. The culprits are long JavaScript tasks. - **Third-party scripts.** Chat widgets, heatmaps, tag managers full of old tags, and ad scripts. Audit them, remove the ones nobody uses, and load the rest after the page is interactive. - **Heavy event handlers.** A click that triggers a large re-render or a synchronous calculation blocks the next paint. Show visual feedback first, then do the work, and break long tasks up so the browser can paint in between. - **Hydration.** Frameworks such as React and Vue attach their behavior after load, and interactions during that window wait. Smaller bundles, partial hydration, and server components shorten it. ## Fixing CLS - Give every image and video `width` and `height` attributes, or a CSS `aspect-ratio`, so the browser reserves the space. - Reserve fixed space for ads, embeds, and cookie banners, or show banners as overlays that cover content instead of pushing it. - Load web fonts with `font-display: swap` and a fallback font sized to match, or use system fonts, as this site does. - Never insert content above what the visitor is already reading, unless they asked for it. ## How much it matters Page experience is one ranking signal among hundreds, and relevance wins. A slow page with the best answer still outranks a fast page with a weak one. The business case is visitors: faster pages convert better, and slow mobile pages lose people before they ever see the offer. I treat Core Web Vitals as a quality bar every template should clear, and I fix the templates in order of the traffic and revenue they carry. Speed work is its own service: [site speed, Core Web Vitals, and Cloudflare](https://gerriscorp.com/services/site-speed/). For the CDN side, see [Cloudflare settings for SEO](https://gerriscorp.com/guides/cloudflare-seo/). ## References - [Google Search Central: Understanding Core Web Vitals and Google search results](https://developers.google.com/search/docs/appearance/core-web-vitals) - [web.dev: Web Vitals](https://web.dev/articles/vitals) Written by [Chris Abraham](https://gerriscorp.com/about/), founder of Gerris Corp in Arlington, Virginia, from his own client engagements, with every technical claim checked against the documentation listed. Websites since 1994, digital marketing since 2002. [Editorial standards](https://gerriscorp.com/standards/) · [Upwork profile](https://www.upwork.com/freelancers/chrisjabraham) --- Source: https://gerriscorp.com/guides/cloudflare-seo/ Updated: 2026-10-06 # Cloudflare settings that help or hurt SEO and AI crawlers By [Chris Abraham](https://gerriscorp.com/about/) · Published October 6, 2026 Cloudflare sits in front of millions of websites, and a handful of its switches decide whether search engines and AI assistants can read yours. I set it up for clients often, and I audit it every time a site's crawling looks strange. These are the settings I check first. ## Proxied or DNS only Every DNS record in Cloudflare has a cloud icon. Orange means proxied: visitors and crawlers reach Cloudflare's network, which applies caching, security, and rules before passing the request to your server. Grey means DNS only: Cloudflare answers the DNS lookup and then steps aside. Only proxied records get Cloudflare's speed and protection, and only proxied records can be blocked by its security features. When a crawling problem appears, the cloud color is the first thing to confirm. Mail records always stay grey. MX targets and the hostnames used by mail services must resolve to the real servers. ## AI crawler controls In July 2025 Cloudflare began blocking known AI crawlers by default on newly added domains, and it offers a one-click switch to block them on existing ones. The current controls live under AI Crawl Control, where each crawler can be allowed or blocked by name, and Cloudflare can also manage robots.txt for you with its own content signals added. This matters because the crawlers are different jobs. GPTBot and ClaudeBot gather training data. OAI-SearchBot, Claude-SearchBot, and PerplexityBot build the indexes that assistants search when they answer questions live. Blocking the search crawlers keeps you out of those answers entirely. Decide crawler by crawler, then confirm the setting matches the decision. The [AI assistants guide](https://gerriscorp.com/guides/ai-assistants/) explains which crawler feeds which product. ## Bot protection and challenges - **Bot Fight Mode** on the free plan challenges traffic that looks automated. Cloudflare exempts its list of verified bots, which includes Googlebot and Bingbot, and the WAF can't override this mode, so a misfire is hard to work around. - **Super Bot Fight Mode** on paid plans has a separate setting for verified bots. Set it to allow. - **Under Attack Mode** puts a challenge page in front of every visitor, and crawlers can't pass it. Use it during an actual attack and turn it off when the attack ends. - **Custom WAF rules** that block by country, by user agent, or by request rate catch crawlers too. Googlebot crawls mostly from the United States, so a rule that challenges American traffic hits it directly. The proof is in Security, then Events. Filter by user agent for Googlebot or Bingbot and look for blocks or managed challenges. In Search Console, the Crawl stats report under Settings shows host status and response codes from Google's side, and a URL Inspection live test shows exactly what Googlebot received. ## Caching HTML By default Cloudflare caches static files such as images, CSS, and JavaScript, and passes HTML requests through to your server. For a site whose pages are the same for every visitor, a Cache Rule that marks HTML as eligible for cache can cut time to first byte to a few dozen milliseconds worldwide. Exclude anything personal: carts, checkouts, account pages, admin paths, and any request carrying a login cookie. Set an edge cache time you can live with, and purge the cache on deploy. ## HTTPS settings - **SSL mode Full (strict).** Cloudflare connects to your server over HTTPS and checks its certificate. Flexible mode connects over plain HTTP, and when the server also redirects to HTTPS, the result is an endless redirect loop. - **Always Use HTTPS.** Sends every HTTP request to HTTPS with a 301 at the edge, so the server needs no rule of its own. - **HSTS.** Tells browsers to refuse plain HTTP for a period you choose. Start with a short max age, and add preload only when every subdomain serves HTTPS, because preload is slow to undo. ## Features that change your HTML Several Cloudflare features rewrite pages on the way out, and each deserves a deliberate decision. - **Rocket Loader** defers JavaScript by rewriting script tags. It can speed up simple sites and break complex ones, including analytics and consent banners. Test with it off before blaming anything else. - **Email Address Obfuscation** replaces email addresses in the HTML with a script. Visitors see the address, and crawlers that read raw HTML see a placeholder. - **Auto Minify** was retired in 2024. If a build still depends on it, move minification into the build. ## Redirects at the edge Redirect Rules handle patterns, such as moving a whole folder or forcing the www or bare domain. Bulk Redirects handle long lists of one-to-one moves from a file. Both answer at the edge with a true 301, which makes Cloudflare a good home for a migration's redirect map. Keep all the redirects in one layer; rules split between Cloudflare and the origin server are where chains and loops come from. The [redirects guide](https://gerriscorp.com/guides/301-redirects/) covers mapping and testing. ## Crawler Hints Crawler Hints notifies search engines that support IndexNow, including Bing and Yandex, when your content changes, based on what Cloudflare sees passing through its cache. It's a free switch under Caching and worth turning on for any site that changes regularly. Google doesn't use IndexNow, so it does nothing for Google. ## Questions about Cloudflare and search ### Does Cloudflare's shared IP address hurt rankings? No. Millions of sites share Cloudflare's addresses, and Google judges sites by their content and links, not by who else is on the IP. ### Should a small site use Cloudflare at all? Yes, at least for DNS. Cloudflare's free DNS is fast and well documented, and proxying can be added record by record later. This site uses Cloudflare for DNS only, because GitHub Pages already provides HTTPS and a CDN. I configure and audit Cloudflare as part of [site speed and Cloudflare work](https://gerriscorp.com/services/site-speed/) and [crawler visibility audits](https://gerriscorp.com/services/crawler-visibility/). ## References - [Cloudflare Docs: Verified bots](https://developers.cloudflare.com/bots/concepts/bot/verified-bots/) - [Cloudflare Docs: Cache](https://developers.cloudflare.com/cache/) - [Google Search Central: Introduction to robots.txt](https://developers.google.com/search/docs/crawling-indexing/robots/intro) Written by [Chris Abraham](https://gerriscorp.com/about/), founder of Gerris Corp in Arlington, Virginia, from his own client engagements, with every technical claim checked against the documentation listed. Websites since 1994, digital marketing since 2002. [Editorial standards](https://gerriscorp.com/standards/) · [Upwork profile](https://www.upwork.com/freelancers/chrisjabraham) --- Source: https://gerriscorp.com/guides/ga4-consent-mode/ Updated: 2026-10-06 # Google Consent Mode v2 for GA4: a practical setup guide By [Chris Abraham](https://gerriscorp.com/about/) · Published October 6, 2026 Consent Mode is how Google's tags learn whether a visitor agreed to cookies, and how they behave when the answer is no. Set up well, it keeps analytics honest and the site compliant. Set up badly, it either drops most of your data or quietly ignores the visitor's choice. ## The four signals | Signal | Controls | | --- | --- | | `analytics_storage` | Cookies for analytics, such as GA4's visitor identifier | | `ad_storage` | Cookies for advertising, such as conversion and remarketing cookies | | `ad_user_data` | Whether visitor data may be sent to Google for advertising | | `ad_personalization` | Whether that data may be used for personalized ads and remarketing | Version 2 added the last two in late 2023. Since March 2024 Google has required them for advertisers who want to use audience and conversion features with traffic from the European Economic Area, under the EU's Digital Markets Act. ## Basic and advanced mode - **Basic mode.** Google's tags don't load at all until the visitor consents. Nothing is collected from people who decline or ignore the banner. - **Advanced mode.** The tags load right away with consent denied and send cookieless pings: no identifiers, no stored cookies. When the visitor accepts, the tags switch to full measurement. Advanced mode lets GA4 estimate the behavior of visitors who declined, through behavioral modeling, once a property has enough traffic. Google's documented minimum is roughly a thousand daily events from visitors with analytics denied, and a thousand daily users with analytics granted, sustained for a week or more. Smaller sites never reach it, and for them the choice between modes makes little difference to the reports. ## Setting the defaults The default state must be set before any Google tag loads. With the gtag snippet, that means a `consent default` command above the config line. Defaults can differ by region, using ISO country codes: ``` gtag('consent', 'default', { ad_storage: 'denied', ad_user_data: 'denied', ad_personalization: 'denied', analytics_storage: 'denied', region: ['AT','BE','BG','CH','CY','CZ','DE','DK','EE','ES','FI','FR','GB', 'GR','HR','HU','IE','IS','IT','LI','LT','LU','LV','MT','NL','NO', 'PL','PT','RO','SE','SI','SK'] }); gtag('consent', 'default', { ad_storage: 'denied', ad_user_data: 'denied', ad_personalization: 'denied', analytics_storage: 'granted' }); ``` That's the pattern this site uses: advertising signals denied everywhere, because the site runs no ads, and analytics denied by default in the EEA, the UK, and Switzerland, where the law requires prior consent, and granted elsewhere. The most specific matching region wins. When a visitor accepts or declines, the banner sends a `consent update` command with the new values. In Google Tag Manager, set defaults with a tag on the Consent Initialization trigger, which fires before every other trigger. Most consent platforms certified by Google ship a Tag Manager template that does this for you. ## Choosing a consent platform Publishers who show Google ads to visitors in the EEA, the UK, or Switzerland must use a consent platform from Google's certified list. For everyone else it's still the safer choice, because certified platforms send Consent Mode signals correctly by default. Check that the platform supports regional rules, so visitors in places that don't require a banner aren't shown one. ## Checking that it works - **Tag Assistant.** Connect it to the site and open the Consent tab for each event. It shows the default state, each update, and which tags fired under which state. - **The network panel.** Every GA4 request carries a `gcs` parameter. `G100` means advertising and analytics storage are both denied; `G111` means both granted; `G101` means advertising denied and analytics granted. - **The cookie list.** In a fresh private window from a region set to denied, load a page without touching the banner. No `_ga` cookie should exist until you accept. - **GA4 admin.** Under Data collection, the consent settings screen reports whether analytics and advertising consent signals are being received. ## Mistakes I find most often - **The default is set after the tag loads.** The first hit goes out with no consent state, often with cookies set. Order matters. - **Two sources of truth.** A banner plugin and a hand-coded snippet both set defaults, with different values. - **The banner blocks the page.** A consent script that loads synchronously in the head, or a banner that pushes the layout, hurts Core Web Vitals. Load it asynchronously and show it as an overlay. - **Hard-coded tags outside the consent setup.** An old Universal Analytics snippet, a Facebook pixel, or a heatmap script still firing regardless of the visitor's choice. ## What to expect in the reports After a consent banner goes live in Europe, GA4's European sessions usually fall, sometimes sharply, because declined visitors are no longer counted as users. That's the system working. Search Console doesn't use cookies, so its click counts are unaffected, and comparing the two separates a consent effect from a real traffic loss. Analytics setup and repair is part of [GA4 and analytics work](https://gerriscorp.com/services/analytics/). For a consent problem that hid half a site's traffic, see the [consent blocking case study](https://gerriscorp.com/case-studies/consent-blocking/). ## References - [Google Tag Platform: Set up consent mode](https://developers.google.com/tag-platform/security/guides/consent) Written by [Chris Abraham](https://gerriscorp.com/about/), founder of Gerris Corp in Arlington, Virginia, from his own client engagements, with every technical claim checked against the documentation listed. Websites since 1994, digital marketing since 2002. [Editorial standards](https://gerriscorp.com/standards/) · [Upwork profile](https://www.upwork.com/freelancers/chrisjabraham) --- Source: https://gerriscorp.com/guides/email-deliverability/ Updated: 2026-10-06 # Why business email lands in spam, and how to find the cause By [Chris Abraham](https://gerriscorp.com/about/) · Published October 6, 2026 Invoices disappear, proposals land in junk folders, and customers say they never got the reset link. Deliverability failures look random from the outside. They have specific causes, and the evidence for each one is sitting in the message headers and a few free tools. ## Start with one message's headers Send a message to a Gmail address you control, open it, and choose Show original. Gmail prints three verdicts at the top: SPF, DKIM, and DMARC, each with pass or fail, and the domain each one checked. In Outlook, the same information sits in the message properties under the `Authentication-Results` header. Read it before changing anything; it tells you which of the following sections applies. ## Authentication failures A failing result usually has one of four causes. - **A sender left out of SPF.** The CRM, the invoicing tool, or the website's contact form sends as your domain and isn't listed in the SPF record. - **SPF over its lookup limit.** SPF allows ten DNS lookups. Every `include` costs at least one, and a record that exceeds the limit fails for every message, including the ones from legitimate senders. - **DKIM never switched on.** Many services sign with their own domain until you publish their DKIM records and enable signing in their dashboard. - **No alignment.** DMARC needs SPF or DKIM to pass for the same domain shown in the From line. A service that passes SPF for its own bounce domain still fails DMARC for yours. The [SPF, DKIM, and DMARC guide](https://gerriscorp.com/guides/email-authentication/) covers the records themselves. DMARC aggregate reports, sent daily by the big mailbox providers to the address in your DMARC record, list every source sending as your domain and whether it passed. They're the fastest way to find a sender you forgot. ## Reputation When authentication passes and mail still lands in spam, the problem is reputation: how the mailbox providers judge mail from your domain and your sending servers, based on how recipients treat it. - **Google Postmaster Tools** shows Gmail's view of a domain that sends in volume: spam complaint rate, authentication rates, and delivery errors. Gmail expects bulk senders to keep reported spam below 0.3 percent, and recommends staying under 0.1. - **Microsoft's Smart Network Data Services** shows how Outlook.com sees the IP addresses you send from, if you control them. - **Blocklists.** Check the domain and the sending IPs against Spamhaus and the other major lists with a lookup tool such as MXToolbox. A listing usually comes with a reason and a removal process. Shared sending services put many customers on the same IP addresses, so a neighbor's bad behavior can affect you. That's one reason marketing email and everyday business email belong on separate services, and often on separate subdomains, such as `news.example.com` for newsletters. A newsletter complaint spike then can't drag down invoices. ## The sending practices that cause it - **Old or purchased lists.** Addresses that bounce, and spam traps hidden on old lists, damage reputation quickly. Mail only people who asked for it, and remove addresses that bounce. - **No easy unsubscribe.** Since 2024 Gmail and Yahoo require bulk senders to support one-click unsubscribe. People who can't leave a list mark it as spam instead. - **Sudden volume.** A domain that sends fifty messages a day and then ten thousand looks compromised. Increase volume over weeks. - **Mail nobody opens.** Providers watch engagement. Stop mailing people who haven't opened anything in months. ## Content and links Content matters less than authentication and reputation, and it still matters. Link shorteners, links to domains with poor reputations, a single large image with no text, and attachments that commonly carry malware all raise suspicion. Every link in a message is judged by its domain, so a tracking domain shared with spammers hurts every message that uses it. ## Bounces tell you exactly what happened A bounce message carries a status code and usually a sentence from the receiving server. A `550 5.7.26` from Gmail means the message failed authentication. Codes starting with 4 are temporary and the sending server retries. Codes starting with 5 are permanent. Search the exact code and text; the major providers document what each one means. ## Testing Services such as mail-tester.com score a single message against authentication, blocklists, and content rules. Seed tests, which send to test mailboxes at each major provider, show whether a campaign lands in the inbox, the promotions tab, or spam. Run one after every change to DNS or sending services. I fix deliverability as part of [email authentication and DNS work](https://gerriscorp.com/services/email-and-dns/), usually alongside the domain cleanup that caused the problem. ## References - [Google Workspace Admin Help: Email sender guidelines](https://support.google.com/a/answer/81126) - [Yahoo Sender Hub: Best practices](https://senders.yahooinc.com/best-practices/) Written by [Chris Abraham](https://gerriscorp.com/about/), founder of Gerris Corp in Arlington, Virginia, from his own client engagements, with every technical claim checked against the documentation listed. Websites since 1994, digital marketing since 2002. [Editorial standards](https://gerriscorp.com/standards/) · [Upwork profile](https://www.upwork.com/freelancers/chrisjabraham) --- Source: https://gerriscorp.com/guides/ai-coding-assistants/ Updated: 2026-10-06 # How to use AI coding assistants on a business website safely By [Chris Abraham](https://gerriscorp.com/about/) · Published October 6, 2026 AI coding assistants such as Claude Code, Cursor, and GitHub Copilot can now do real work on real websites: migrations, redirect maps, templates, structured data, content checks across hundreds of pages. They work fast and they work confidently, including when they're wrong. The method below is how I get the speed without the damage. ## Start with a written spec An assistant does exactly what it understands you to want, at full speed. Before any code, write down the goal, the constraints, and what done looks like. "Move the blog to the new platform" is a wish. A spec says: every old URL keeps working or redirects to its closest match, titles and dates carry over, images are copied and not hotlinked, the build fails if any internal link points to a missing page, and nothing ships until the redirect list has been checked. The assistant can help draft this, and a person decides it. ## Give the project a memory Claude Code reads a `CLAUDE.md` file at the start of every session, and other tools have their own equivalents. Put the things that must never be forgotten there: the build command, the deploy process, the voice rules for copy, the files that must never be committed, the decisions already made and why. This site's project file holds its style rules and a list of names that must never appear on the site. The assistant reads it every time; a new contractor would need the same briefing. ## Turn the rules into checks Instructions get forgotten. Automated checks don't. Every rule that can be tested by a script should be. The build for this site refuses to finish if a page title falls outside 50 to 60 characters, if a meta description is the wrong length, if two pages share a title, if any page links to one that doesn't exist, or if two pages share too much of their wording. When the assistant writes a new page, the build tells it what's wrong before I ever see the draft. The same approach works for any site: link checkers, HTML validators, accessibility tests, and unit tests for anything with logic in it. ## Small changes, reviewed - **Use version control.** Every change goes through Git, on a branch, so anything can be undone and every change can be read as a diff. - **Keep each change small enough to read.** A change that touches three files gets reviewed properly. One that touches three hundred gets skimmed. - **Read the diff, not the summary.** An assistant's description of what it changed is a claim. The diff is the evidence. - **Watch for scope creep.** Assistants like to tidy things nobody asked them to touch. Reject unrelated changes and ask again. ## Keep secrets and production out of reach Never paste passwords, API keys, or customer data into a conversation, and never commit them to a repository. Give the assistant access to a copy of the site, a staging environment, or a local build, and keep deploys to production a deliberate human step, or an automated pipeline that runs only after the checks pass. For anything destructive, such as deleting files, rewriting history, or changing DNS, require explicit confirmation every time. Inventory the DNS records before touching any of them; a careless change can stop a company's email. ## Verify against the real world Assistants are well read and out of date in places. They'll describe a platform setting that moved last year, or a search feature Google retired, with total confidence. For anything that depends on a third party's current behavior, check the vendor's documentation or test it directly. After deploying, check the live result: fetch the pages, test the redirects with `curl`, run PageSpeed Insights, and look at the page in a browser. "The code looks right" isn't the same as "the site works." ## Where assistants are strongest - **Bulk, rule-based work.** Building a redirect map from hundreds of old URLs, rewriting templates across a site, generating structured data from page content, converting content between platforms. - **Audits at scale.** Checking every page for missing titles, broken links, duplicate descriptions, or images without alt text, then fixing them. - **Small internal tools.** Scripts that pull reports, clean exports, or automate a weekly chore. - **Explaining unfamiliar code.** Reading an inherited theme or plugin and describing what it actually does. ## Where to slow down - **Judgment calls.** Which pages to merge, which claims a page should make, what a client would or wouldn't want public. The assistant can propose; a person decides. - **Security and payments.** Authentication, checkout, and anything handling personal data needs an expert review regardless of who wrote it. - **Long sessions.** As a conversation grows, early instructions carry less weight. Restate the important rules, or keep them in the project memory file where they're read fresh. ## Someone has to be accountable The assistant writes code; a person owns the outcome. For a business site that means someone who can read the diff, understands search and infrastructure, and will notice when a confident change is wrong. That's the role I play for clients: I write the spec, set up the checks, direct the assistant or the developers, and verify what ships. See how this site and other projects were built in the [Claude Code case study](https://gerriscorp.com/case-studies/built-with-claude-code/), and what I build for clients under [AI tools and automation](https://gerriscorp.com/services/ai-automation/) and [fractional technical lead](https://gerriscorp.com/services/technical-lead/). ## References - [Anthropic: Claude Code overview](https://docs.anthropic.com/en/docs/claude-code/overview) Written by [Chris Abraham](https://gerriscorp.com/about/), founder of Gerris Corp in Arlington, Virginia, from his own client engagements, with every technical claim checked against the documentation listed. Websites since 1994, digital marketing since 2002. [Editorial standards](https://gerriscorp.com/standards/) · [Upwork profile](https://www.upwork.com/freelancers/chrisjabraham) --- Source: https://gerriscorp.com/guides/lynx-qa/ Updated: 2026-10-06 # Lynx for website QA: text browser checks before every launch By [Chris Abraham](https://gerriscorp.com/about/) · Published October 6, 2026 Lynx has been around since the early nineties, and it's still one of the most useful tools in my launch kit. Because it ignores styling and never runs JavaScript, it strips a page down to what the server actually sends. Scripted from the command line, it can check every page of a site in minutes, which makes it a natural fit for redesigns, migrations, and release checklists. ## Getting Lynx I run Lynx on a Linux server over SSH, from an old ThinkPad, and that's the simplest setup. On Debian or Ubuntu: ``` sudo apt update && sudo apt install lynx ``` Other systems: `brew install lynx` on macOS with Homebrew, `sudo dnf install lynx` on Fedora, and on Windows, the same apt command inside the Windows Subsystem for Linux. Once it's installed, `lynx --version` confirms it works. ## Commands worth memorizing | Command | What it gives you | | --- | --- | | `lynx URL` | An interactive text browser. Arrows move, Enter follows a link, q quits, and \ toggles the HTML source. | | `lynx -dump URL` | The rendered text, followed by a numbered list of every link. | | `lynx -dump -nolist URL` | Text only, no link list. Best for comparing two versions of a page. | | `lynx -dump -listonly URL` | Only the links, numbered, with their full addresses. | | `lynx -source URL` | The raw HTML, handy for checking head tags. | ## Five checks I script before a launch ### 1. Every page in the sitemap has real text Pull the URLs from the sitemap and count the words Lynx sees on each. A product page that comes back with forty words when it should have four hundred is a template hiding its content behind scripts. ``` curl -s https://example.com/sitemap.xml | grep -o '[^<]*' | sed 's///' | while read u; do echo "$(lynx -dump -nolist "$u" | wc -w) $u"; done | sort -n | head ``` The thinnest pages float to the top of the list. ### 2. Staging and production say the same thing After a migration, compare the old page with the new one as text. Missing paragraphs, dropped FAQs, and lost disclaimers show up immediately, without any styling noise. ``` diff <(lynx -dump -nolist https://old.example.com/pricing/) \ <(lynx -dump -nolist https://www.example.com/pricing/) ``` ### 3. No stray noindex survived from staging The most expensive launch mistake I know is a robots noindex tag carried over from a staging site. One loop over the sitemap catches it: ``` ... | while read u; do lynx -source "$u" | grep -qi 'noindex' && echo "NOINDEX $u"; done ``` ### 4. Links are real, and they all resolve The link list shows only genuine anchor links, so navigation built from click handlers simply won't appear. Feed the list to curl to catch broken targets and redirect chains: ``` lynx -dump -listonly https://example.com/ | awk '/https?:/{print $2}' | sort -u | xargs -n1 curl -s -o /dev/null -w '%{http_code} %{url_effective}\n' | grep -v '^200' ``` ### 5. The first screen is about the page Read the top twenty lines of each key template's dump. If a consent banner, a mega menu, and a promotional strip come before the first heading, assistive technology and crawlers wade through all of it too. Reordering the markup, or adding a skip link, fixes the problem for both. ## Reading the results with a team Text dumps are easy to share, and they make strong evidence in a developer ticket: here's the page as a crawler receives it, and here's the paragraph that's missing. Nobody has to install anything to read a text file, and the comparison is hard to argue with. ## When a terminal isn't an option Plenty of teams can't or won't install command-line tools. These get most of the way there: - [Lynx Viewer](https://www.delorie.com/web/lynxview.html), a free web service that renders a public URL much as Lynx would. - [SEO Browser](https://www.seo-browser.com/), which places the browser's version of a page beside a crawler's and highlights what JavaScript added. - The [Rich Results Test](https://search.google.com/test/rich-results) and Search Console's URL Inspection, which both show the HTML Google rendered. - The [Web Developer extension](https://chrispederick.com/work/web-developer/) for Chrome and Firefox, which turns off CSS and JavaScript with a click. - Accessibility checkers and screen readers: [WAVE](https://wave.webaim.org/) offers a no-styles view, and [NVDA](https://www.nvaccess.org/) or Apple's VoiceOver read a page in the same top-to-bottom order Lynx displays. An accessibility auditor will usually run some version of this test anyway. **Here's the short version: if a page works in Lynx, you're way more than halfway there.** ## Add it to the checklist I add a Lynx pass to every launch: sitemap word counts, a noindex sweep, a link check, and a text diff of the most important templates. It takes about ten minutes and catches problems a styled browser hides. For the full launch sequence, see [the website migration SEO checklist](https://gerriscorp.com/guides/migration-checklist/), and for the deeper rendering questions, [how to tell if JavaScript is hiding your content](https://gerriscorp.com/guides/javascript-seo/). ## References - [Lynx project home](https://lynx.invisible-island.net/) - [Debian package: lynx](https://packages.debian.org/stable/lynx) - [Homebrew formula: lynx](https://formulae.brew.sh/formula/lynx) - [Microsoft Learn: Install WSL](https://learn.microsoft.com/en-us/windows/wsl/install) - [W3C: Easy checks, a first review of web accessibility](https://www.w3.org/WAI/test-evaluate/preliminary/) Written by [Chris Abraham](https://gerriscorp.com/about/), founder of Gerris Corp in Arlington, Virginia, from his own client engagements, with every technical claim checked against the documentation listed. Websites since 1994, digital marketing since 2002. [Editorial standards](https://gerriscorp.com/standards/) · [Upwork profile](https://www.upwork.com/freelancers/chrisjabraham) --- Source: https://gerriscorp.com/guides/ada-website-compliance/ Updated: 2026-10-06 # ADA website compliance for businesses: lower risk, better SEO By [Chris Abraham](https://gerriscorp.com/about/) · Published October 6, 2026 Making a website accessible is the right thing to do, and it's also cheap insurance. Most of the legal exposure comes from a short list of common, fixable failures. Fix those, document what you did, and you'll also get a faster, clearer, better-ranking site that AI assistants understand. No badges, no widgets, and no press release required. A note before the details: this is a practitioner's guide, not legal advice. If you've received a demand letter, call a lawyer first. ## What the law expects The Americans with Disabilities Act covers businesses open to the public, and the Department of Justice's position, set out in its guidance on ADA.gov, is that this includes their websites. For private businesses there's no technical standard written into the regulations, so courts, settlements, and auditors almost always measure sites against the Web Content Accessibility Guidelines, WCAG, at level AA. For state and local governments, the rules are firmer. A 2024 Justice Department rule requires WCAG 2.1 level AA. An interim rule in April 2026 extended the deadlines: April 26, 2027, for governments serving 50,000 people or more, and April 26, 2028, for smaller ones and special districts. If you build or run sites for public agencies, those dates belong on your calendar. ## Where the risk actually comes from Demand letters and lawsuits tend to cite problems anyone can detect with a free automated scan, because that's how many of them are found. WebAIM's 2026 survey of the top million home pages found detectable failures on 95.9% of them, and six kinds of errors accounted for 96% of everything detected: | Failure | Share of home pages | | --- | --- | | Low contrast text | 83.9% | | Missing image alt text | 53.1% | | Form fields without labels | 51% | | Empty links | 46.3% | | Empty buttons | 30.6% | | Missing page language | 13.5% | Fixing those six puts a site ahead of almost all of the web. That's the 80 to 90 percent that matters most, and it's usually days of work, not months. ## The fix list, in order 1. **Contrast.** Darken pale text and light brand colors until normal text reaches 4.5 to 1 against its background. This is usually a handful of color values in one stylesheet. 2. **Alt text.** Describe every meaningful image; give decorative ones an empty alt attribute. 3. **Form labels.** Every field gets a visible label tied to it. Placeholder text alone doesn't count. 4. **Links and buttons that say something.** Icon-only buttons need an accessible name; a link wrapped around nothing but an icon needs one too. 5. **Page language.** One attribute on the html element. 6. **Keyboard and focus.** Tab through every page template; everything should be reachable, in order, with a visible focus outline. Then cover the rest of WCAG AA over time, starting with headings, captions for video, and error messages on forms. ## What to skip - **Overlay widgets.** Scripts that promise one-line compliance don't fix the underlying markup, many users of assistive technology find them obstructive, and sites using them have still been sued. - **Badges and certificates.** A "fully compliant" seal invites scrutiny and proves nothing. The work speaks for itself. - **Grand announcements.** A short accessibility statement is useful; a marketing campaign about it isn't. ## Document it Keep a simple record: which pages were checked, with which tools, what was fixed, and when. Publish a brief accessibility statement with a way to report problems, and answer those reports promptly. A business that can show steady, good-faith effort is in a far better position than one that can't. ## The dividends you collect anyway - **Search.** Alt text feeds image search, real headings and descriptive links are exactly what Google uses to understand a page, and the page language helps search engines serve the right audience. - **AI answers and AI agents.** Assistants quote clean, well-structured text, and the browsing agents now arriving use a page's accessibility information to find and operate buttons and forms. Lighthouse even added an Agentic Browsing check. - **Trust.** A site that works for everyone reads as careful and current, which is what quality raters, and customers, look for. - **Conversions.** Readable text, labeled forms, and usable buttons help every visitor, including the ones on a phone in bright sunlight. ## Keep it from sliding back Accessibility erodes with every new page, plugin, and campaign. Add a quick automated scan and a keyboard pass to your launch routine, check new templates before they ship, and review the site once a quarter. My guide to [Lynx for website QA](https://gerriscorp.com/guides/lynx-qa/) covers a text-browser pass that catches a surprising number of these problems in minutes. For help auditing and fixing a site, see [technical SEO](https://gerriscorp.com/services/technical-seo/) or [get in touch](https://gerriscorp.com/contact/). ## References - [ADA.gov: Guidance on web accessibility and the ADA](https://www.ada.gov/resources/web-guidance/) - [ADA.gov: Fact sheet on the Title II web rule](https://www.ada.gov/resources/2024-03-08-web-rule/) - [W3C: Web Content Accessibility Guidelines (WCAG) 2.2](https://www.w3.org/TR/WCAG22/) - [WebAIM: The WebAIM Million, 2026 report](https://webaim.org/projects/million/) - [Overlay Fact Sheet](https://overlayfactsheet.com/) Written by [Chris Abraham](https://gerriscorp.com/about/), founder of Gerris Corp in Arlington, Virginia, from his own client engagements, with every technical claim checked against the documentation listed. Websites since 1994, digital marketing since 2002. [Editorial standards](https://gerriscorp.com/standards/) · [Upwork profile](https://www.upwork.com/freelancers/chrisjabraham) --- Source: https://gerriscorp.com/guides/glossary/ Updated: 2026-10-05 # Glossary of SEO, AI search, and technical website terms By [Chris Abraham](https://gerriscorp.com/about/) · Published October 5, 2026 Plain definitions of the terms that come up in my work, written so each one makes sense on its own. **301 redirect** A permanent redirect from one URL to another. Search engines transfer the old URL's ranking signals to the new one. The 308 status code is also permanent; 302 and 307 are temporary. **AEO (answer engine optimization)** Shaping content so it directly answers the questions people ask, in a form that search features and AI assistants can quote. **AI Mode** Google Search's conversational, AI-generated search experience, which answers questions with a written response and links, built on Google's search index. **AI Overviews** The AI-generated summaries that appear at the top of many Google search results, with links to the pages they draw on. **Alt text** A text description of an image in the HTML alt attribute, read aloud by screen readers and used by search engines to understand the image. **BIMI** Brand Indicators for Message Identification: a DNS record that lets supporting inboxes show a brand's logo beside authenticated email. It requires DMARC enforcement. **Bing Webmaster Tools** Microsoft's free service for monitoring a site in Bing, whose index also feeds Microsoft Copilot and other AI assistants. **Canonical tag** A link element that tells search engines which URL is the preferred version of a page when several URLs show the same or similar content. Google treats it as a strong hint. **CDN (content delivery network)** A network of servers around the world that stores copies of a site's files close to visitors, making pages faster and absorbing traffic spikes and attacks. Cloudflare is the best-known example. **Core Web Vitals** Google's three page experience metrics: Largest Contentful Paint, Interaction to Next Paint, and Cumulative Layout Shift, measured from real Chrome users. **Crawl budget** How many URLs a search engine is willing and able to crawl on a site in a given period. It matters mostly for large sites and sites with many low-value URLs. **Crawled, currently not indexed** A Google Search Console status meaning Google fetched a page and chose not to index it. See the [full guide](https://gerriscorp.com/guides/crawled-not-indexed/). **CLS (Cumulative Layout Shift)** A Core Web Vital measuring how much visible content moves unexpectedly while a page loads. Good is 0.1 or less. **Discovered, currently not indexed** A Search Console status meaning Google knows a URL exists and hasn't crawled it yet, usually a sign of crawl priority problems. **DKIM** DomainKeys Identified Mail: a cryptographic signature on outgoing email, verified against a public key published in DNS. **DMARC** A DNS policy telling receiving mail servers what to do with mail that fails SPF and DKIM alignment, and where to send reports. Policies are none, quarantine, and reject. **E-E-A-T** Experience, expertise, authoritativeness, and trustworthiness: the qualities Google's quality rater guidelines ask raters to assess, and a useful description of what makes content credible. **GEO (generative engine optimization)** Making a business and its content easy for AI systems to find, understand, and cite in generated answers. **Google Search Console** Google's free service for monitoring how a site appears in Google Search: indexing, queries, clicks, Core Web Vitals, and errors. **hreflang** An annotation that tells search engines which language or regional version of a page to show to which users. **IndexNow** An open protocol that lets a site notify Bing, Yandex, and other participating search engines immediately when pages are added, changed, or removed. **INP (Interaction to Next Paint)** A Core Web Vital measuring how quickly a page responds to taps, clicks, and key presses. Good is 200 milliseconds or less. It replaced First Input Delay in March 2024. **JSON-LD** A format for adding structured data to a page in a script block, recommended by Google for schema.org markup. **LCP (Largest Contentful Paint)** A Core Web Vital measuring how long the largest visible element, usually a hero image or headline, takes to appear. Good is 2.5 seconds or less. **llms.txt** A proposed convention, introduced in 2024, for a plain Markdown file at a site's root that summarizes the site and links to its key pages for language models. Adoption by AI companies is still emerging. This site publishes [one](https://gerriscorp.com/llms.txt). **Meta description** A short summary of a page in its HTML head, often shown under the title in search results. Usually 140 to 160 characters. **robots.txt** A file at a site's root that tells crawlers which paths they may fetch. It controls crawling, not indexing; a blocked page can still appear in results if other sites link to it. **Schema.org** The shared vocabulary search engines use for structured data, describing organizations, people, products, services, articles, events, and much more. **Server-side rendering** Generating a page's full HTML on the server before sending it, so browsers and crawlers receive the content without running JavaScript. Static generation does the same at build time. **Soft 404** A page that tells visitors it doesn't exist or has nothing to show, while returning a 200 success status. Google treats it as an error. **SPF** Sender Policy Framework: a DNS record listing the servers allowed to send email for a domain. It allows at most ten DNS lookups. **Structured data** Machine-readable information about a page, usually schema.org in JSON-LD, describing what the page is about and how it relates to people, organizations, and other pages. **Title tag** The HTML title of a page, shown in browser tabs and usually as the headline of a search result. Usually 50 to 60 characters. **TTFB (time to first byte)** How long a browser waits for the first byte of a server's response. Slow TTFB delays everything else, and caching and CDNs reduce it. **XML sitemap** A file listing the URLs a site wants search engines to crawl, with optional last-modified dates. Want these applied to your site? See [services](https://gerriscorp.com/services/). Written by [Chris Abraham](https://gerriscorp.com/about/), founder of Gerris Corp in Arlington, Virginia, from his own client engagements, with every technical claim checked against the documentation listed. Websites since 1994, digital marketing since 2002. [Editorial standards](https://gerriscorp.com/standards/) · [Upwork profile](https://www.upwork.com/freelancers/chrisjabraham) --- Source: https://gerriscorp.com/case-studies/ Updated: 2026-10-05 # Case studies Each case describes the problem, my role, what I did, who else did what, how the work was checked, and where it stands now. Clients are described by industry; I name clients only with their permission. ## Content the crawler never sees - [Magento store: product content Googlebot never saw](https://gerriscorp.com/case-studies/ecommerce-rendering/). Alpine.js sections that mounted only on scroll, and a backlink spike kept on its own track. - [WordPress media site: a consent banner hiding every article](https://gerriscorp.com/case-studies/consent-blocking/). Consent blocking kept the article tabs empty for Googlebot. - [React event platform: 2,000 pages Google couldn't reach](https://gerriscorp.com/case-studies/react-event-platform/). A 13-page developer spec, ranked P0 to P3. ## Migrations, rescues, and modern stacks - [Clinical practice: WordPress to Netlify, with search intact](https://gerriscorp.com/case-studies/netlify-migration/). Redirect decisions for every URL and an AI-assisted repository analysis. - [Local service business on Sanity and Vercel](https://gerriscorp.com/case-studies/sanity-vercel/). Metadata changes merged through GitHub, and the developer's prerendering verified. - [Specialty retailer: cleaning up after Squarespace to Shopify](https://gerriscorp.com/case-studies/shopify-migration/). 3,400 404s, duplicate URLs, and theme schema. - [Consumer brand: taking over a stalled React application](https://gerriscorp.com/case-studies/app-takeover/). An inventory, then fixes on the server over SSH. ## Indexing at scale and recovery - [Programmatic site: crawling and indexing at scale](https://gerriscorp.com/case-studies/programmatic-indexing/). Segmented sitemaps and parameter rules for 20,000+ pages. - [Health-testing store: recovering after an SEO plugin outage](https://gerriscorp.com/case-studies/indexing-recovery/). Recovery checks in Google and Bing, explained in plain English. ## Entities, locations, and planning - [Multi-location brand: untangling the parent from its first location](https://gerriscorp.com/case-studies/multi-location-entity/). Entity structure and developer-ready JSON-LD. - [Seasonal retailer: a staged plan around the peak](https://gerriscorp.com/case-studies/seasonal-retailer/). Multi-site audit and timing around the busiest weeks. - [Therapy practice: a suspended Google Business Profile reinstated](https://gerriscorp.com/case-studies/gbp-reinstatement/). A documented appeal. ## Content operations and AI search - [Two B2B companies on Umbraco](https://gerriscorp.com/case-studies/umbraco-operations/). 54 landing pages, steady publishing, and cache and template fixes. - [AI company: search visibility for recruiting engineers](https://gerriscorp.com/case-studies/ai-recruiting/). How AI answers represent an employer. ## Data - [Contact data: three cleanups and an AI audit](https://gerriscorp.com/case-studies/data-cleanup/). 88,900 contacts, two merged exports, and a tracker that invented its data. ## My own builds - [Built with Claude Code](https://gerriscorp.com/case-studies/built-with-claude-code/). Blackbox, my command-line assistant with 106 tests; Hill Mole's move off Movable Type; and this site. [Tell me about your problem](https://gerriscorp.com/contact/) Updated October 5, 2026 --- Source: https://gerriscorp.com/case-studies/ecommerce-rendering/ Updated: 2026-10-05 # Magento store: product content Googlebot never saw An equipment retailer on Magento 2 with the Hyvä theme had been losing organic traffic for months. Brand searches and the home page were down while non-brand category traffic was growing, a pattern that didn't fit any single explanation. ## My role Forensic diagnosis and technical direction, working alongside the client's contractor, who owns implementation. ## What I found ### Track one: rendering The product templates used Alpine.js to mount the specifications, FAQs, and reviews only when a visitor scrolled them into view, with `x-intersect` wrapped around `x-if`. Googlebot never scrolls the way a person does, so those sections never mounted. A Screaming Frog crawl extracted thousands of words from category pages but only 250 to 400 words from flagship product pages that weighed more than 1.2 MB. Search Console showed a selective cluster of product URLs in "Crawled, currently not indexed," while the rest of the site indexed normally. ### Track two: backlinks and redirects In the same period, a spike of spam, adult, and warez backlinks arrived, mostly from cloud-hosting address ranges, alongside a 301 redirect problem. I kept this on its own track, collected the evidence, and asked for upgraded Search Console access to examine it properly, without folding it into the rendering story. ## What I recommended - Render the product sections in the server's HTML and keep the scroll animation as progressive enhancement. - An A/B test that removes the scroll gates from a group of product pages first, so the effect can be measured before a full rollout. - A separate investigation and cleanup plan for the backlink spike and the redirect problem. ## How it was checked Raw HTML, rendered DOM, and crawler extraction compared on the same URLs, Search Console's live test used to see what Google rendered, and the indexing cluster matched to the affected template. ## Status Diagnosis delivered and the test scoped; implementation sits with the client's contractor. The method is written up in the [JavaScript SEO guide](https://gerriscorp.com/guides/javascript-seo/) and on [content the crawler never sees](https://gerriscorp.com/services/crawler-visibility/). Written by [Chris Abraham](https://gerriscorp.com/about/), founder of Gerris Corp in Arlington, Virginia, from his own client engagements, with every technical claim checked against the documentation listed. Websites since 1994, digital marketing since 2002. [Editorial standards](https://gerriscorp.com/standards/) · [Upwork profile](https://www.upwork.com/freelancers/chrisjabraham) Updated October 5, 2026 --- Source: https://gerriscorp.com/case-studies/consent-blocking/ Updated: 2026-10-05 # WordPress media site: a consent banner hiding every article A bilingual English and Italian site of film reviews was almost absent from Google, while Bing indexed it normally. There were no crawl errors anywhere, just page after page in "Crawled, currently not indexed." ## My role Paid diagnosis for the site's owner, with a call to walk through the findings. ## What I found Every review's content lived inside jQuery UI tabs. The site's consent-management platform used prior-consent blocking: scripts were held back until a visitor accepted cookies. One of the held-back scripts was the one that initialized the tabs. Googlebot never accepts cookies, so it crawls every page as a permanent non-consenting visitor, and it rendered each page with the structure intact and the content empty. That explains the gap between Google and Bing, which handled the pages differently. Two secondary problems made things worse: 97% of pages shared the same hardcoded H2 headings, and 95% of internal links had no anchor text, so even the visible structure told search engines almost nothing about each page. ## What I recommended - Exempt the scripts that build the page's content from consent blocking, or render the tab content in the HTML so it doesn't depend on scripts at all. Consent rules should govern tracking and advertising scripts, never the article itself. - Replace the hardcoded H2s with headings drawn from each review. - Give internal links descriptive anchor text. ## How it was checked Pages compared in a consenting browser session and a non-consenting one, the blocked scripts identified in the consent platform's configuration, and the empty tabs matched to the indexing pattern. Confirmation in Search Console's rendered HTML was the next step once access was granted. ## Why it matters Consent platforms are now on almost every site, and their default settings can hide content from every crawler that never clicks "accept." It's one of three examples of the same failure on [content the crawler never sees](https://gerriscorp.com/services/crawler-visibility/). Written by [Chris Abraham](https://gerriscorp.com/about/), founder of Gerris Corp in Arlington, Virginia, from his own client engagements, with every technical claim checked against the documentation listed. Websites since 1994, digital marketing since 2002. [Editorial standards](https://gerriscorp.com/standards/) · [Upwork profile](https://www.upwork.com/freelancers/chrisjabraham) Updated October 5, 2026 --- Source: https://gerriscorp.com/case-studies/react-event-platform/ Updated: 2026-10-05 # React event platform: 2,000 pages Google couldn't reach An event and nightlife discovery app built with Create React App needed about 2,000 event pages indexed. Three months of Search Console data showed impressions on the home page and almost nothing else. ## My role Strategist and QA. I diagnosed the problems, wrote the specification, and verify the results; the founder's developer implements. ## What I found - **An empty home page.** The home page served an empty root element; everything appeared only after JavaScript ran. - **No crawlable links.** Event cards navigated with click handlers instead of real `` links, so crawlers had no path to the event pages. - **Orphaned pages.** The event pages themselves already had server-side rendering, so their HTML was fine, but nothing linked to them. - **Wrong canonicals.** The canonical tags on the events and community sections pointed to the home page, telling Google those pages were duplicates of it. ## What I delivered Two documents. For the founder, a plain-language summary of what was wrong and what it would take. For the developer, a 13-page specification of 12 items ranked P0 to P3, each with the evidence, the consequence, exact build steps, and acceptance criteria. The P0 items were real anchor links on event cards, server-side rendering for the home page and feed, and manual indexing requests for priority pages. ## How it is checked Each item has a testable acceptance criterion, such as event links present in the server's HTML and self-referencing canonicals on each section. I verify the developer's changes against those criteria with a crawl and Search Console's live test, with remaining checks on how page heads are generated and whether the canonicals were corrected. ## Status Reports delivered and acknowledged; verification of the developer's fixes in progress. See [developer specs and implementation QA](https://gerriscorp.com/services/developers/). Written by [Chris Abraham](https://gerriscorp.com/about/), founder of Gerris Corp in Arlington, Virginia, from his own client engagements, with every technical claim checked against the documentation listed. Websites since 1994, digital marketing since 2002. [Editorial standards](https://gerriscorp.com/standards/) · [Upwork profile](https://www.upwork.com/freelancers/chrisjabraham) Updated October 5, 2026 --- Source: https://gerriscorp.com/case-studies/netlify-migration/ Updated: 2026-10-05 # Clinical practice: WordPress to Netlify, with search intact A clinical practice moved its website from WordPress on managed hosting to a new Next.js build on Netlify. The developer built the new site; my job was continuity: making sure search engines and visitors could follow the move, and investigating what went wrong afterward. ## My role Technical SEO, migration oversight, and investigation, in coordination with the practice and its developer. ## What I did ### Redirect decisions for every URL I examined the legacy URLs and reconciled the redirect map, deciding for each URL whether it should pass through unchanged, inherit an existing destination, receive a migration redirect, or be treated as intentionally removed. I separated problems the migration caused from older issues the site already had, so neither got blamed on the other. ### Repository analysis with Claude Code I combined crawls and exports with a read-only, AI-assisted analysis of the Next.js repository. It found thousands of references to images still hosted on the old WordPress site, and the handful of central files responsible, which became a developer-ready plan for moving the media. The analysis changed no code. ### A conservative disavow I reviewed the backlink profile and prepared a replacement disavow file that removed genuinely toxic domains while keeping legitimate ones, because disavowing good links does real harm. ### After launch I investigated blurry images from the image CDN, JavaScript and CSS problems, site instability, and analytics behavior with the client and developer, and worked on sequencing, DNS review, and launch verification. ## Reading the data honestly When engagement fell in a short GA4 window, the easy story was that the blurry images were driving people away. I treated tracking, engagement, and site defects as three separate questions, each needing its own evidence, and didn't let a few days of data stand in for proof. ## Status Migration oversight and post-launch investigation delivered; further work under discussion. See [website migrations](https://gerriscorp.com/services/migrations/). Written by [Chris Abraham](https://gerriscorp.com/about/), founder of Gerris Corp in Arlington, Virginia, from his own client engagements, with every technical claim checked against the documentation listed. Websites since 1994, digital marketing since 2002. [Editorial standards](https://gerriscorp.com/standards/) · [Upwork profile](https://www.upwork.com/freelancers/chrisjabraham) Updated October 5, 2026 --- Source: https://gerriscorp.com/case-studies/sanity-vercel/ Updated: 2026-10-05 # Local service business on Sanity and Vercel: SEO in the repository A junk removal company's website ran on a modern stack: Sanity for content, Vercel for hosting, and GitHub for code. It had the classic problems of a client-rendered site, and the fixes had to go through code. ## The problems - Client-side rendering, so crawlers received thin HTML. - Duplicate titles and meta descriptions across many pages. - Heading structure problems. - Soft 404s: missing pages returning a success status. - Missing or inconsistent canonical and structured data signals. ## Who did what The developer implemented the substantial infrastructure changes, including prerendered HTML and deployment improvements. I handled the SEO side: setting priorities, specifying what each page needed, reviewing the developer's changes, and verifying the live result independently. I also made code-level metadata changes myself through GitHub, in a pull request that was reviewed and merged. ## Why it matters Many businesses now run on headless CMSs and JavaScript frameworks where there's no SEO plugin to configure. The work happens in templates, routes, and build settings. I can read that code, propose and make changes through the team's normal review process, and check what crawlers actually receive after deployment. It also means changes are reviewable: every edit has a commit, a reviewer, and a way back. ## How it was checked Crawls before and after the prerendering change, raw HTML fetched from production, Search Console's live test, and a review of titles, descriptions, canonicals, and status codes across the site. ## Status Core fixes deployed and verified; a final audit is under way. See [developer specs and implementation QA](https://gerriscorp.com/services/developers/). Written by [Chris Abraham](https://gerriscorp.com/about/), founder of Gerris Corp in Arlington, Virginia, from his own client engagements, with every technical claim checked against the documentation listed. Websites since 1994, digital marketing since 2002. [Editorial standards](https://gerriscorp.com/standards/) · [Upwork profile](https://www.upwork.com/freelancers/chrisjabraham) Updated October 5, 2026 --- Source: https://gerriscorp.com/case-studies/shopify-migration/ Updated: 2026-10-05 # Specialty retailer: cleaning up after Squarespace to Shopify A family-owned specialty store moved from Squarespace to Shopify. The new store looked good, but search visibility was slipping and the indexed page count was shrinking. ## My role A four-part audit, then hands-on product optimization and structured data work in the store's theme. ## What the audit found - Duplicate product URLs: old Squarespace-style paths and Shopify's own paths competing in Google for the same products. - More than 3,400 404 errors left over from the migration. - A duplicate FAQ page. - Organic traffic dominated by misspellings of the brand name, a sign the store wasn't being found for what it sells. - Broken product meta descriptions and default metadata inherited from the theme. - A spammy backlink profile, poor mobile speed, and weak visibility in AI assistants. ## What I did A product optimization pass across titles, descriptions, metadata, and categories. Then structured data work in a duplicated copy of the live theme, so the store was never at risk: Organization schema added, and a new Product schema block that turned out to duplicate an existing, more complete block from the theme. I traced the duplication so only one valid block remains, and identified that the review rating data depended on confirming the right metafield namespace from the reviews app. ## How it was checked Structured data validated on product pages, crawls compared before and after, and every change made in the duplicate theme first and previewed before publishing. ## Status The audit and a product pass were delivered; remaining items, such as thin descriptions and missing categories, are being reconciled with the owner before further edits. See [e-commerce SEO](https://gerriscorp.com/services/ecommerce/). Written by [Chris Abraham](https://gerriscorp.com/about/), founder of Gerris Corp in Arlington, Virginia, from his own client engagements, with every technical claim checked against the documentation listed. Websites since 1994, digital marketing since 2002. [Editorial standards](https://gerriscorp.com/standards/) · [Upwork profile](https://www.upwork.com/freelancers/chrisjabraham) Updated October 5, 2026 --- Source: https://gerriscorp.com/case-studies/app-takeover/ Updated: 2026-10-05 # Consumer brand: taking over a stalled React application A consumer skincare brand's React application changed hands after an outage. Project files, credentials, hosting, DNS, and the repository were spread across several people, and the brand needed someone to work out what it actually had. ## My role Takeover assessment and hands-on operations. ## The assessment I assessed the handoff the way every rescue should start, with an inventory: - Which project files were supplied, and whether they matched what was running. - Where the application was hosted, and who controlled the server. - Who controlled the domain and DNS. - Where the repository lived and who had access. - Which credentials existed, and which were missing. ## Hands-on operations Then I worked on the DigitalOcean Linux server directly over SSH: reading logs, editing the environment and application configuration files, and managing the Node application with the PM2 process manager. The application was being kept down by a port conflict, which I diagnosed. ## Why it matters Stalled projects are common: a freelancer moves on, an agency relationship ends, a founder inherits a codebase nobody explained. The first valuable thing is a clear picture of what exists and who controls it. The second is someone who can get onto the server and fix the immediate problem. Writing the inventory down also protects the business the next time someone leaves, because the knowledge no longer lives in one person's head. ## Status The assessment and the operational fixes described here were completed; larger rebuild and integration proposals are separate decisions for the brand. See [project rescue and takeovers](https://gerriscorp.com/services/rescue/). Written by [Chris Abraham](https://gerriscorp.com/about/), founder of Gerris Corp in Arlington, Virginia, from his own client engagements, with every technical claim checked against the documentation listed. Websites since 1994, digital marketing since 2002. [Editorial standards](https://gerriscorp.com/standards/) · [Upwork profile](https://www.upwork.com/freelancers/chrisjabraham) Updated October 5, 2026 --- Source: https://gerriscorp.com/case-studies/programmatic-indexing/ Updated: 2026-10-05 # Programmatic site: managing crawling and indexing at scale A new site publishing prices for more than 20,000 trading cards, built programmatically on an expired domain, indexed well at first. Then large numbers of pages dropped out of Google's index. ## My role Technical SEO for crawl and index management, hired hourly, working with the owner over Teams and with access to the development repository on GitHub. ## How I approach it A site like this has to be managed as collections of pages, not a handful of landing pages. The questions are which page types deserve indexing, how tools and filters generate URL variations, and how search engines discover deep pages. - **Segmented sitemaps** for each content type, so Search Console reports indexing coverage per segment. - **A baseline** of indexing by segment, so every change is compared against data. - **Robots rules for parameterized tools** whose URL variations add nothing to the index and draw crawl attention away from the pages that matter. - **Reporting lag accounted for.** Search Console reports trail reality, so I check live behavior before concluding a change worked or failed. - **The domain's history** treated as one factor among several, kept separate from the site's own problems. ## Working with developers The site is development-led, so fixes go through the repository. Access to the code means I can see how URLs are generated and specify changes precisely. Every recommendation goes to the owner in writing, with the evidence behind it. ## Status Ongoing. No recovery figures are claimed here; indexing at this scale moves over weeks and months. See [SEO for large and programmatic sites](https://gerriscorp.com/services/large-sites/). Written by [Chris Abraham](https://gerriscorp.com/about/), founder of Gerris Corp in Arlington, Virginia, from his own client engagements, with every technical claim checked against the documentation listed. Websites since 1994, digital marketing since 2002. [Editorial standards](https://gerriscorp.com/standards/) · [Upwork profile](https://www.upwork.com/freelancers/chrisjabraham) Updated October 5, 2026 --- Source: https://gerriscorp.com/case-studies/indexing-recovery/ Updated: 2026-10-05 # Health-testing store: recovering after an SEO plugin outage On a WooCommerce store selling health tests, the SEO plugin was briefly switched off. Afterward, Search Console indexing, organic traffic, and referrals from AI assistants all fell. The owner isn't technical and needed someone to diagnose it, fix it, and prove the recovery. ## My role Diagnosis, fixes, and verification in three paid milestones, under a HIPAA and nondisclosure agreement because the site handles protected health information. ## What happens when an SEO plugin goes off On WordPress, the SEO plugin usually generates the titles, meta descriptions, canonical tags, robots directives, structured data, and XML sitemaps. Turn it off, even briefly, and crawlers can see pages without canonicals, with default titles, or with sitemaps that suddenly disappear. Turning it back on doesn't instantly undo what search engines recorded in the meantime. ## What I did - URL inspections of the priority product and information pages in Search Console. - Crawl statistics reviewed for changes in how often Googlebot visited and what it fetched. - Sitemaps checked and resubmitted in both Google Search Console and Bing Webmaster Tools. - A priority list of pages to watch through the recovery. - Structured data, Cloudflare configuration, and ghost traffic in GA4 reviewed as part of the same scope. ## How it was checked Several indicators compared over time instead of one dashboard, with care to separate a stale report from a fault that was still happening. The owner received before-and-after evidence in plain language. ## Status Recovery checks under way, with possible next steps including redirects, merchant structured data, and crawler policy. See [Search Console](https://gerriscorp.com/services/search-console/) and [analytics](https://gerriscorp.com/services/analytics/). Written by [Chris Abraham](https://gerriscorp.com/about/), founder of Gerris Corp in Arlington, Virginia, from his own client engagements, with every technical claim checked against the documentation listed. Websites since 1994, digital marketing since 2002. [Editorial standards](https://gerriscorp.com/standards/) · [Upwork profile](https://www.upwork.com/freelancers/chrisjabraham) Updated October 5, 2026 --- Source: https://gerriscorp.com/case-studies/multi-location-entity/ Updated: 2026-10-05 # Multi-location brand: untangling the parent from its first location A custom closet and wardrobe company with locations in several states ran everything through one website. Search engines kept confusing the parent brand with its original location, and the location pages, Google Business Profiles, and town pages overlapped. ## My role A fixed-price, milestone-based engagement delivering recommendations and developer-ready structured data. ## What I delivered ### Entity clarification A clear separation of the parent brand from the original location, so search engines and AI assistants understand which is the company and which is one of its showrooms. The structured data states the relationship explicitly, with the locations as branches of the parent organization. ### Home page and product schema JSON-LD for the organization and its products, ready for the developer to install. ### Location pages tied to Google Business Profiles Recommendations for location pages that match each Google Business Profile, so every profile links to a page about that specific location rather than the home page. ### Profiles versus town pages Guidance for where a Google Business Profile and a local town page cover the same area, so they support each other instead of competing. ### Service listings and breadcrumbs Recommendations for how services, regions, and locations should be organized and linked, with breadcrumb structured data reflecting it. ## Why it matters Multi-location businesses lose visibility when every page and listing says the same thing. Clear entities, distinct location pages, and accurate structured data let each location rank for its own area and let the brand rank for itself. ## Status Delivered. See [multi-location and connected businesses](https://gerriscorp.com/services/multi-location/). Written by [Chris Abraham](https://gerriscorp.com/about/), founder of Gerris Corp in Arlington, Virginia, from his own client engagements, with every technical claim checked against the documentation listed. Websites since 1994, digital marketing since 2002. [Editorial standards](https://gerriscorp.com/standards/) · [Upwork profile](https://www.upwork.com/freelancers/chrisjabraham) Updated October 5, 2026 --- Source: https://gerriscorp.com/case-studies/seasonal-retailer/ Updated: 2026-10-05 # Seasonal retailer: a staged plan around the peak A retailer with several related stores, websites, and Google Business Profiles does most of its business in a short season. Its search signals were tangled across sites, and a previous migration and a falling-out with its last SEO provider left loose ends. ## My role Hired as the accountable lead for an initial SEO and migration audit, working with the owner and his technical contact, with a seasonal engagement planned to follow. ## What the audit is finding - Legacy URLs and redirects from the earlier migration, including links from other sites that now point at pages that no longer exist. - Conflicting versions of the same domains. - Duplicate and conflicting structured data. - Business names and addresses that differ between sites, profiles, and directories. - Overlapping location pages competing with each other. - Product-page headings and outdated template content. - Sitemaps that need cleanup, and Google Business Profiles that need aligning with the sites. ## The plan The real judgment here is timing. Foundation work and anything that risks volatility, including Google Business Profile category changes that can trigger reverification, happens months before the season. Seasonal pages go live and get indexed early. A change freeze covers the peak, because nobody should deploy a site change in the busiest weeks of the year. A competitive local-search baseline makes progress measurable. ## Coordination I'm organizing access across several sites and Google properties, preserving the historical Search Console data, and turning a complicated account into a short sequence of actions with an owner for each. ## Status Audit in progress. See [multi-location and connected businesses](https://gerriscorp.com/services/multi-location/) and [fractional technical lead](https://gerriscorp.com/services/technical-lead/). Written by [Chris Abraham](https://gerriscorp.com/about/), founder of Gerris Corp in Arlington, Virginia, from his own client engagements, with every technical claim checked against the documentation listed. Websites since 1994, digital marketing since 2002. [Editorial standards](https://gerriscorp.com/standards/) · [Upwork profile](https://www.upwork.com/freelancers/chrisjabraham) Updated October 5, 2026 --- Source: https://gerriscorp.com/case-studies/gbp-reinstatement/ Updated: 2026-10-05 # Therapy practice: a suspended Google Business Profile reinstated A hypnotherapy practice in British Columbia had its Google Business Profile suspended. For a practice that depends on local clients finding it, that meant the business had effectively disappeared from Google Maps. ## My role Reviewing the profile and the business's information, building the appeal, and handling the process with Google. ## What I did ### Find the mismatch Suspensions usually come from a mismatch between what the profile says and what Google can verify about the business: the name, the address, the category, or how the location operates. I compared the profile against the business's real details and corrected what didn't match. ### Build the evidence I assembled the documents that prove the business is real and operates where it says: the lease, the business license, an invoice for the office, and the business card. I put the strongest verifiable document first, and claimed nothing the paperwork didn't support. ### Appeal The appeal went to Google with the corrected profile and the organized evidence. ## Outcome The profile was reinstated in February 2025. ## What I learned, and how I work now Every case is different, and Google decides each one on its own schedule. That's why I now take on these cases as paid advisory work that starts with a written diagnostic, then a separately scoped appeal when there's a viable path. I also handle the investigative side of harder cases: reconstructing what happened to a profile, identifying the correct business record, and preserving an established profile and its reviews instead of starting over. See [Google Business Profile hard cases](https://gerriscorp.com/services/google-business-profile/). Written by [Chris Abraham](https://gerriscorp.com/about/), founder of Gerris Corp in Arlington, Virginia, from his own client engagements, with every technical claim checked against the documentation listed. Websites since 1994, digital marketing since 2002. [Editorial standards](https://gerriscorp.com/standards/) · [Upwork profile](https://www.upwork.com/freelancers/chrisjabraham) Updated October 5, 2026 --- Source: https://gerriscorp.com/case-studies/umbraco-operations/ Updated: 2026-10-05 # Two B2B companies on Umbraco: publishing and technical operations Umbraco is a capable CMS that few SEO consultants know well. These two engagements show the day-to-day work of keeping B2B sites useful, published correctly, and technically sound inside a client's own workflow. ## Site furnishings manufacturer A maker of community mailboxes, signage, and related site furnishings, with work organized in Basecamp and sign-off from marketing and management. - **54 landing pages** built and published for geographic targeting, now being tracked for indexing. - **A strategy shift** from "near me" phrasing to explicit city-and-state pages for specific markets. - **A push on keywords stuck in mid-range positions,** where small improvements move a page onto the first page. - **Steady publishing:** seasonal buying guides, replacement budgeting, product comparisons, and articles from the client's own specialists, each with titles, descriptions, formatting, images, internal links, and structured data. ## Industrial sales intelligence company A B2B data company working with a backend developer. - **A home page overhaul** around the company's two core offerings, with copy approved by the owner. - **Custom JSON-LD and Open Graph metadata,** and internal links fixed. - **A cache problem found:** social metadata saved correctly in Umbraco but never appeared on the live page. The CMS said one thing; the live HTML said another, which pointed to cache purging. - **A template problem found:** fixed-height CSS clipping content blocks, handed to the developer with the evidence. - **A false alarm caught:** a sharp drop in third-party AI visibility metrics turned out to be the vendor's methodology change, not a real decline. ## The common thread Doing the work inside the client's CMS and process, checking the live page source rather than trusting the editor, and knowing which fixes belong to the developer. See [ongoing support](https://gerriscorp.com/services/ongoing-support/). ## Status Both ongoing. Written by [Chris Abraham](https://gerriscorp.com/about/), founder of Gerris Corp in Arlington, Virginia, from his own client engagements, with every technical claim checked against the documentation listed. Websites since 1994, digital marketing since 2002. [Editorial standards](https://gerriscorp.com/standards/) · [Upwork profile](https://www.upwork.com/freelancers/chrisjabraham) Updated October 5, 2026 --- Source: https://gerriscorp.com/case-studies/ai-recruiting/ Updated: 2026-10-05 # AI company: search visibility for recruiting engineers An AI research company wanted to recruit engineers in Palo Alto and the wider Bay Area. Candidates increasingly ask ChatGPT, Perplexity, and Google's AI features which companies are hiring and what they pay, so the company asked how it appeared in those answers. ## My role AI search visibility audit and recommendations, hired for a defined engagement. ## What I examined - How the company appeared, or didn't, in AI answers to the questions engineers ask about jobs, companies, and compensation. - The sources those answers drew on, and where the company's own information was missing or outweighed by others. - The company's entity footprint: how consistently its name, description, and relationship to its related domains were stated across the web. - The careers content on two company domains. ## What I delivered - Recruiting-focused recommendations for the careers pages and FAQs, written around the questions candidates ask. - Metadata and structured data recommendations for the careers and company pages. - Positioning built on the company's approved compensation information, so AI answers could quote accurate figures. - Suggestions for supporting third-party references that AI systems treat as evidence. ## Why it's interesting The goal wasn't selling a product. It was being represented accurately to a specific audience making a career decision. AI search visibility applies anywhere people ask an assistant before they act: hiring, investing, choosing a vendor, or checking someone's background. The same audit works for any organization that cares how AI describes it to the people it wants to reach, whether they're candidates, customers, or investors. ## Status Deliverables completed; the engagement is paused. See [AI search visibility](https://gerriscorp.com/services/ai-search/). Written by [Chris Abraham](https://gerriscorp.com/about/), founder of Gerris Corp in Arlington, Virginia, from his own client engagements, with every technical claim checked against the documentation listed. Websites since 1994, digital marketing since 2002. [Editorial standards](https://gerriscorp.com/standards/) · [Upwork profile](https://www.upwork.com/freelancers/chrisjabraham) Updated October 5, 2026 --- Source: https://gerriscorp.com/case-studies/data-cleanup/ Updated: 2026-10-05 # Contact data: three cleanups and an AI audit Messy contact data costs money: bounced campaigns, damaged sender reputation, embarrassing wrong-name emails, and decisions made from lists nobody trusts. These projects turned unusable lists into reliable ones. ## An 88,900-contact master list For a communications agency, a Python pipeline built one master list from a large accumulated set of contacts. It normalized names, removed bad email addresses, validated names against a global names database, flagged contradictions between a contact's name and email address, recovered missing names from email prefixes, and deduplicated across domains. The result was about 88,900 unique contacts. ## Two 28,800-record exports merged For a reconnection campaign, I consolidated former clients and colleagues into one clean record per person, with company, first name, last name, and best email address, preferring personal addresses. The sources were a working spreadsheet and two contact-manager exports of about 28,800 records each, with shifted columns and broken field mappings that had to be repaired first. Tighter deduplication rules followed. The output reached about 94% email coverage, and every record carries a tag showing how it was resolved. ## An AI-generated tracker audited An outreach tracker built with an AI tool claimed messages had been sent to contacts who had bounced or didn't exist, with uniform timestamps that couldn't be real, and duplicates throughout. I rebuilt it against the actual sending records: 452 rows became 392 real contacts, each with a status the evidence supported. ## Lessons - Scripts beat hand-cleaning: the work is repeatable, and every change can be traced. - Every record needs a resolution status, so nothing disappears silently. - AI-produced data needs checking against source records before anyone relies on it. - Sending volume matters as much as list quality: a mail-merge blast at high daily volume can get a sending account shut down, even with a clean list. See [data cleanup and AI-output audits](https://gerriscorp.com/services/data-cleanup/). Written by [Chris Abraham](https://gerriscorp.com/about/), founder of Gerris Corp in Arlington, Virginia, from his own client engagements, with every technical claim checked against the documentation listed. Websites since 1994, digital marketing since 2002. [Editorial standards](https://gerriscorp.com/standards/) · [Upwork profile](https://www.upwork.com/freelancers/chrisjabraham) Updated October 5, 2026 --- Source: https://gerriscorp.com/case-studies/built-with-claude-code/ Updated: 2026-10-05 # Built with Claude Code I run Claude Code the way a technical lead runs a development team: I write the requirements, make the design decisions, review every change, insist on tests, and decide what ships. These are three things built that way. ## Blackbox: a command-line chief of staff Blackbox, or `bb`, is my own assistant. It runs on a Debian server I administer and manages the operational side of my business from the terminal. ### What it does - Manages tasks in Todoist, which is the single authority for everything I need to do. - Reads and writes Google Calendar through my own Google Cloud OAuth project. - Triages work opportunities through Upwork's official MCP server, ranking dozens of searches and drafting pitches for my approval. - Assembles briefings and drafts writing using whichever model does the job best. ### How it was built Over four days, Claude Code took it from a 1,500-line script to about 9,600 lines: 17 Python modules, an installer, a backup tool, and 106 end-to-end tests across 25 commits on main. Claude Code wrote the implementation. I specified the behavior, wrote structured feedback documents with scoped priorities and open architecture questions, tested each stage, compared model backends from OpenAI, Anthropic, and open-weight providers against each other on real tasks, and accepted or rejected the work. ### Safety rules - Every external action needs one unambiguous target and my explicit confirmation. Nothing sends, submits, spends, or deletes on its own. - Untrusted content, such as email and web pages, is treated as data and never as instructions. - Deterministic routing handles every command it can without a model call; models are reserved for writing and judgment. Total model spend at launch was under three dollars. - Secrets live outside Git. - Nightly AES-256 encrypted backups go to a private repository, and restores have been tested. ### The deploy loop Work happens on a branch in a development worktree. Tests run, the database is backed up, the branch is fast-forwarded to main and pushed, and a live smoke test confirms the result. It's the same discipline I bring to [client automation pilots](https://gerriscorp.com/services/ai-automation/). ## Hill Mole: a legacy blog off dead software [Hill Mole](https://hillmole.com/) is my serialized novel, 309 entries written from 2005 to 2022 on Movable Type, which had stopped working. With Claude Code, I moved it to static pages on GitHub Pages, preserving the content, the feel of the original, and every original URL, including old archive and feed addresses. Every entry now has a hand-written title and description checked by a script on each build, schema.org data, llms.txt coverage, and IndexNow submission. The same approach rescues any client site stranded on old software. See [project rescue](https://gerriscorp.com/services/rescue/). ## This site Gerris is plain HTML generated by a short Python script, also built with Claude Code. Every page has structured data and a Markdown twin for AI tools, the site publishes llms.txt and a full-text llms-full.txt, and each build checks title and description lengths, word counts, broken internal links, and the copy rules. It's static, fast, readable without JavaScript, and an example of the advice in the [guides](https://gerriscorp.com/guides/). ## What this means for clients Building software with AI coding assistants is a real skill, and the skill is mostly the part that isn't typing: knowing what the job is, specifying behavior precisely, catching what the model got wrong, testing, and owning the decision to ship. That's what I bring to a client's tool, a client's repository, or a client's developers. [Tell me what you'd build](https://gerriscorp.com/contact/) Written by [Chris Abraham](https://gerriscorp.com/about/), founder of Gerris Corp in Arlington, Virginia, from his own client engagements, with every technical claim checked against the documentation listed. Websites since 1994, digital marketing since 2002. [Editorial standards](https://gerriscorp.com/standards/) · [Upwork profile](https://www.upwork.com/freelancers/chrisjabraham) Updated October 5, 2026 --- Source: https://gerriscorp.com/about/ Updated: 2026-10-05 # About Chris Abraham I'm Chris Abraham. Gerris Corp is my consultancy, and I'm the person who does the work. I've lived in the Washington, DC area since 1988 and work from South Arlington, in Arlington, Virginia. Clients like that I'm a US-based business, and I work with them across the country and the English-speaking world. ## At a glance | Business | Gerris Corp, founded in 2007 | | Principal | Chris Abraham (also Christopher Abraham) | | Location | South Arlington (Arlington Heights), Arlington, Virginia 22204, across the river from Washington, DC | | Clients | Across the United States and the English-speaking world: Canada, the United Kingdom, Ireland, Australia, and New Zealand | | Focus | Technical consulting and direction, developer specs, AI tools built with Claude Code, project rescue, technical SEO, site speed and Cloudflare, Search Console, migrations, AI search visibility | | Upwork | Top Rated, 100% Job Success, more than 125 jobs and 4,000 hours (2026) | | Working online since | Building websites since 1994; in digital marketing since 2002 | | Education | BA in American Literature, The George Washington University | | Contact | [chris@gerriscorp.com](mailto:chris@gerriscorp.com) · [+1 202-352-5051](tel:+12023525051) | ## What I do now I'm a hands-on technical consultant whose deepest specialty is search. Clients bring me in when the technical side of their web presence needs someone in charge: I diagnose, scope, write the spec, direct the developers, human and AI, ship the parts I can ship myself, and explain it all to leadership in plain English. My technical SEO core covers on-page SEO, site speed, Cloudflare and CDN setup, 301 redirects, indexing, Google Search Console, and migrations. Around it I work as a fractional technical lead, rescue stalled projects, build small AI tools with Claude Code, clean up data, advise founders and executives, and manage the online reputation of people whose public record matters. ## Systems and platforms I provision and harden my own Linux servers on DigitalOcean: key-only SSH, root and password login disabled, firewalls locked down, and unattended security updates. I run a self-hosted, encrypted file-sync system across my machines, a persistent terminal email setup over SSH, and my own command-line assistant, [Blackbox](https://gerriscorp.com/case-studies/built-with-claude-code/). I've worked with WordPress for twenty years, including Elementor, Avada, Rank Math, and WooCommerce, and with Shopify and Liquid, Magento 2 and Hyvä, Umbraco, Drupal, Joomla, Squarespace, Wix, Webflow, Framer, and React applications, with Cloudflare, GA4, and Search Console throughout. I've also worked under HIPAA and nondisclosure agreements on a healthcare site. ## Career - Employee number 13 at New Media Strategies, where online reputation management grew up as a practice. - Senior account supervisor on Edelman's digital public affairs team in Washington, where I vetted online influencers for a genuine, multi-year track record before clients engaged them. - Co-founder of Abraham Harrison, then of Gerris Corp, which I started with Dan Krueger in 2007. - Reputation and executive privacy work at Reputation.com. - Earlier, work with Howard Rheingold at Rheingold Associates, and internet infrastructure work in the Treasury Department's Office of the CIO. ## Technical background I was a programmer before I was a marketer: Perl, PHP, Python, and C. I've built websites since 1994 and have run [chrisabraham.com](https://chrisabraham.com/) on Plone, a Python CMS, since the early 2000s. Today I work in Git, on Linux servers over SSH, in the command line, and alongside AI coding assistants, building my own tools for research, publishing, and task management. ## Online community I published the Memetic Lexicon on memes.org in 1999, ran the MemeSpace community, which The New York Times profiled, and founded and moderate a Reddit community for slow joggers. I was a member of The WELL, eWorld, and ArtsWire. Two decades of watching ideas spread and mutate online shapes how I approach reputation work today. ## Writing I have a BA in American Literature from The George Washington University, with a year at the University of East Anglia in Norwich. I captained my high school speech and debate team, taught creative writing, and write every day. That training shows up in the work: appeals built like briefs, reports that explain the mechanism plainly, and pages that say what they mean. ## Verify - [My Upwork profile](https://www.upwork.com/freelancers/chrisjabraham), with client reviews and work history: Top Rated, 100% Job Success. - [chrisabraham.com](https://chrisabraham.com/), my personal site and archive since the early 2000s. - [hillmole.com](https://hillmole.com/), my serialized novel and a working example of a migration. - [The source code of this site](https://github.com/chrisabraham/gerriscorp). Gerris is distinct from chrisabraham.com: this site covers the consultancy and its services, and chrisabraham.com is my personal archive and writing. ## The name *Gerris lacustris* is the common water strider, the insect that skates across the surface of ponds. Why I chose it, and the story of the logo Oliver Uberti drew for it, are in the [colophon](https://gerriscorp.com/colophon/). Updated October 5, 2026 --- Source: https://gerriscorp.com/work-with-me/ Updated: 2026-10-05 # Work with me A sensible first step is a paid diagnostic with a clear question and a clear deliverable. Everything else builds from there. ## Ways to engage - **Diagnostic.** Evidence, priorities, and a recommended next step, for a defined site and a defined set of questions. Usually one to three weeks. - **Implementation sprint.** Agreed fixes or deliverables, verified on the live site against written acceptance criteria. - **Migration review.** Pre-launch or post-launch checks and developer coordination for a named site and launch. - **Ongoing support.** An agreed monthly capacity for SEO, content, and website work. - **Advisory.** A monthly advisory retainer, or individual briefings, workshops, and second opinions. - **AI pilot.** One useful workflow built and demonstrated, with defined inputs, permissions, outputs, and handover. ## How a project runs 1. **First conversation.** You describe the site and the problem by email or in a short call. I say whether I'm the right person and where I'd start. 2. **Scope in writing.** The questions, the deliverable, the access needed, the timeline, and the price, agreed before work begins. 3. **Payment.** The diagnostic is prepaid; larger projects start with a deposit. 4. **The work.** I investigate, report progress in writing, and raise anything urgent at once. 5. **Delivery.** Findings, fixes, tickets, or the agreed deliverable, walked through with you and your team. 6. **Verification.** A check of the live result once changes ship, and a recommendation for what comes next. ## Payment terms - Diagnostics, briefings, and second opinions are prepaid. - Projects start with a deposit. - Retainers are billed at the start of each month. - Invoices are due on receipt, and work continues once they're paid. ## Where the work happens Every project runs in Basecamp or by email, threaded and on the record, so you always know the status and nothing gets lost. Developer work goes into your ticket system. ## What helps - Access to Search Console, analytics, and the CMS, repository, or DNS I'll work in. - An introduction to your developer, host, or marketing team. - Prompt answers. A project that goes quiet closes, and restarts with a fresh scope when you're ready. ## Hosting I work on sites wherever they're hosted. Hosting itself stays with you or your provider, so you always own and control your site. ## Upwork If your company hires through Upwork, you can hire me there: [Chris Abraham on Upwork](https://www.upwork.com/freelancers/chrisjabraham). More answers on the [FAQ](https://gerriscorp.com/faq/). [Start with a diagnostic](https://gerriscorp.com/contact/) Updated October 5, 2026 --- Source: https://gerriscorp.com/faq/ Updated: 2026-10-05 # Frequently asked questions Practical answers about process, timing, payment, and how I work. ## Starting out ### How does a project start? With an email or a short call about your site and the problem. If I'm the right person, I send a written scope for a paid diagnostic: the questions, the deliverable, the access needed, the timeline, and the price. ### Do you offer a free audit? The first conversation is free and short, enough to tell whether I can help and where I'd start. The diagnosis itself is paid work, because that's where the real value is. ### Who does the work? I do, personally, on every engagement. Gerris Corp is my consultancy. ### What kinds of clients do you work with? Funded companies, established businesses, agencies that need a specialist, and individuals whose public record matters, in any industry and any country. ## Timing ### How long does a diagnostic take? Usually one to three weeks, depending on the size of the site and the number of separate problems. The timeline is agreed in writing before work starts. ### How soon can you start? Usually within one to two weeks of a signed scope and payment. Urgent problems, such as a sudden traffic collapse or a failed launch, get priority when I have capacity. ### How long until results show in Google? Fixes take effect as Google recrawls the affected pages: days for important pages, weeks or months for large sites. I track the change in Search Console and report it. ## Payment ### How do you charge? Diagnostics, briefings, and second opinions are prepaid at a fixed price. Larger projects start with a deposit. Ongoing support and advisory retainers are billed monthly in advance. ### Can I hire you through Upwork? Yes. Many clients hire me through Upwork, which handles contracts and payment. ## Working together ### What access do you need? Usually Search Console, analytics, and read access to the CMS or repository. DNS and CDN access when the work involves them. I document every account I use. ### Which platforms do you work on? WordPress, Umbraco, Wix, Squarespace, Shopify, Magento, Netlify, GitHub Pages, static sites, and JavaScript frameworks such as Next.js, React, Vue, and Alpine.js, with Cloudflare in front of many of them. ### How do you communicate during a project? In writing, in Basecamp or by email, so every decision and status update is on the record. Calls are scheduled when they're useful. ### Do you work with in-house developers? Yes, and it's one of the things I do best. I write precise tickets with acceptance criteria and check the result once it ships. ### Is the work confidential? Yes. I name clients only with their permission, and I'm happy to sign a nondisclosure agreement. Something else? [Ask me directly](https://gerriscorp.com/contact/). Updated October 5, 2026 --- Source: https://gerriscorp.com/standards/ Updated: 2026-10-06 # Editorial standards Gerris Corp is one consultant, so every guide, case study, and service page on this site is mine to stand behind. These are the rules I hold them to. ## Experience comes first A case study here exists because I did the work: I was hired, I ran the diagnosis or the build, and I can say exactly which parts were mine and which belonged to the client's developer or agency. Guides grow out of the same engagements. If I haven't done something with my own hands, I don't write a how-to about it. ## Claims point to their source When a guide says how Googlebot renders a page, how Bing treats a tag, what an RFC requires of a DNS record, or what a consent setting actually does, the page lists the documentation behind it under "References." The same list is published in the guide's structured data. Official documentation changes, so a reference is a starting point for your own check, not a replacement for it. ## AI in the workflow, with a human at the end I build with AI tools every day, including Claude Code, and this site's generator and many first drafts came out of that work. The rule is simple: nothing goes live until I've read it, corrected it, and verified every factual statement. Biographical details about me come from my own records and published sources I can point to, never from what a chatbot has decided about me. The build itself refuses pages that break the house rules for titles, length, duplication, and voice. ## Confidentiality is part of accuracy Clients are described by industry and problem. No names, addresses, revenue, case numbers, or private screenshots, and nothing that would let a reader work out who the client is. Ongoing and paused engagements are labeled that way. Outcomes are reported only when the evidence supports them, and "under way" is an honest status. ## No one pays to be mentioned This site carries no affiliate links, sponsored content, or paid reviews. When I name a tool, a host, or a platform, it's because I use it or a client runs on it. ## Dates mean something Every page shows its last update, and guides show both their publication and revision dates. When Google, Bing, or a standard changes in a way that affects a guide, the guide is revised and the date moves. ## Found a mistake? Email [chris@gerriscorp.com](mailto:chris@gerriscorp.com) with the page address and the problem. I'll check it against the source and correct the page if you're right, and note any substantive change on the page itself. ## More about me My background is on the [About page](https://gerriscorp.com/about/), how engagements run is on [Work With Me](https://gerriscorp.com/work-with-me/), and you can reach me through the [contact page](https://gerriscorp.com/contact/). Updated October 6, 2026 --- Source: https://gerriscorp.com/colophon/ Updated: 2026-10-06 # Colophon A colophon is the note at the back of a well-made book about how it was made. This is that note for gerriscorp.com. ## The logo The Gerris water strider was designed and drawn in 2012 by [Oliver Uberti](https://www.oliveruberti.com/), a dear friend and a remarkable artist. Oliver was a senior design editor at National Geographic and is the co-author and designer of Atlas of the Invisible, London: The Information Capital, Where the Animals Go, and Notes from a Public Typewriter. He gave the company its emblem: *Gerris lacustris*, the insect that skates across the surface of a pond without breaking it. The name came first, and it came from rowing. Carbon fiber racing shells, especially doubles, have always looked to me like the pond skaters you can find in the still water along the Potomac's banks, dancing on the surface tension. I named my Hudson racing shell *Gerris* before I ever named a company after it. Once the firm Dan Krueger and I ran was incorporated, I asked Oliver for a logo, and what he drew settled the matter: any thought of renaming the agency ended the day I saw it. I wrote the whole story up in 2017. ## Design The look borrows from the classic Plone theme I've used for my own sites for two decades: tabbed navigation, slate blue links, and nothing between the reader and the words. Body text is black Verdana at 18 pixels for legibility. The accent colors, a burnt orange for the name, a blue for page titles, and a teal for section heads, were each darkened until they pass the WCAG contrast standard against white. ## How it's built Every page starts as a plain HTML file. A small Python program reads them, wraps each in the shared header and footer, and writes the finished site: pages, a Markdown copy of each page for AI tools, XML and HTML sitemaps, an Atom feed, llms.txt, and redirect pages for more than 400 addresses from the old gerriscorp.com. Before anything is published, the same program checks every page: title and description lengths, one heading per page, minimum word counts, first person singular, no copied phrasing between pages, and no broken internal links. If a page fails, nothing ships. The site was written and built in a terminal, over SSH from a ThinkPad X220 to a Linux server at DigitalOcean, working alongside Claude Code, Anthropic's AI coding assistant. I set the requirements, made the editorial calls, and checked every fact; the assistant wrote code and drafts to my direction. [The editorial standards](https://gerriscorp.com/standards/) describe how that division of labor works. ## Hosting and delivery The finished files are served by GitHub Pages over HTTPS, with DNS at Cloudflare. There's no database, no content management system, and no server code to patch. The only script is Google Analytics, set up with consent mode, as described on the [privacy page](https://gerriscorp.com/privacy/). ## Tested with - Lynx, the text browser, to see each page the way screen readers and crawlers receive it. My notes on that are in [Lynx for website QA](https://gerriscorp.com/guides/lynx-qa/). - Google PageSpeed Insights and Lighthouse, for performance, accessibility, best practices, and SEO. - Google Search Console and Bing Webmaster Tools, with IndexNow announcing every change to Bing. ## Source The code and content live in a public repository: [github.com/chrisabraham/gerriscorp](https://github.com/chrisabraham/gerriscorp). The site went live on October 5, 2026. Updated October 6, 2026 --- Source: https://gerriscorp.com/contact/ Updated: 2026-10-05 # Contact Tell me what's going on with your site. Include the address, what you're seeing, what you'd like to happen, and a rough budget, and I'll reply with where I'd start. - Email: [chris@gerriscorp.com](mailto:chris@gerriscorp.com) - Call or text: [+1 202-352-5051](tel:+12023525051) [Email me about your site](mailto:chris@gerriscorp.com?subject=Website%20problem&body=Site%20address%3A%0A%0AWhat%20I%27m%20seeing%3A%0A%0AWhat%20I%27d%20like%20to%20happen%3A%0A%0ABudget%20range%3A%0A) [Book a 30 minute call](https://calendly.com/chrisabraham/30) [Hire me on Upwork](https://www.upwork.com/freelancers/chrisjabraham) ## What happens next 1. I read your note and reply, usually within one business day. 2. If I'm the right person, a short call or a few emails to understand the problem. 3. A written scope for a paid diagnostic: the questions, the deliverable, the timeline, and the price. 4. Work starts once the scope is agreed and the diagnostic is paid. ## Useful to include - The site's address, and the platform it runs on if you know it. - When the problem started, and anything that changed around then: a redesign, a migration, a plugin update, a hosting move. - Screenshots from Search Console or analytics, if you have them. - Who else is involved: a developer, an agency, a host. ## Good reasons to get in touch - Organic traffic fell and nobody can explain it. - Your website, developer, and vendors need someone in charge. - A migration or redesign is coming, or one just went wrong. - You inherited a project and don't know what you have. - You'd like a small AI tool built safely, or a second opinion on someone else's plan. - Email from your domain is landing in spam. Gerris Corp is based in South Arlington, Arlington, Virginia 22204, and works with clients across the United States, Canada, the United Kingdom, Ireland, Australia, New Zealand, and beyond. I work in US Eastern time and schedule calls across time zones. See [Work With Me](https://gerriscorp.com/work-with-me/) for how engagements run, or the [FAQ](https://gerriscorp.com/faq/). Updated October 5, 2026 --- Source: https://gerriscorp.com/privacy/ Updated: 2026-10-05 # Privacy This site collects very little: anonymous visit statistics, and whatever you choose to send me by email or phone. ## Visit statistics This site uses Google Analytics 4 to count visits, see which pages people read, and learn how visitors arrive, including from search engines and AI assistants. It records information such as the pages you view, your approximate location, your device and browser, and the site that referred you. It doesn't collect your name, email address, or other details that identify you directly. For visitors in the United Kingdom and the European Economic Area, analytics cookies are switched off. Google Analytics receives cookieless measurements instead, which count visits without storing anything on your device. Elsewhere, Google Analytics may set first-party cookies to recognize repeat visits. Advertising and personalization features are turned off for everyone. Google processes this data under its own [privacy policy](https://policies.google.com/privacy). You can block Google Analytics anywhere with your browser's privacy settings, a content blocker, or Google's [opt-out browser add-on](https://tools.google.com/dlpage/gaoptout). ## Email and phone When you email me or call, I receive what you send: your name, your address or number, and the details of your project. I use it only to reply and to do the work you hire me for. I don't sell it, share it with marketers, or add you to a mailing list. ## Hosting and security The site is static pages served by GitHub Pages, with DNS through Cloudflare. Those services keep standard server logs, such as IP addresses and request times, for security and reliability, under their own policies. There are no forms, accounts, or comments on this site. ## Client information Information I see while working for clients, such as analytics, Search Console data, site access, and documents, is kept confidential, used only for the engagement, and covered by a nondisclosure agreement where the client asks for one. ## Questions Email [chris@gerriscorp.com](mailto:chris@gerriscorp.com) with any question about your information, or to ask me to delete correspondence you've sent. Updated October 5, 2026 --- Source: https://gerriscorp.com/sitemap/ Updated: 2026-10-06 # Site map Every page on this site, grouped by section, with a one-line summary of each. Search engines read the same list in [sitemap.xml](https://gerriscorp.com/sitemap.xml), and AI tools in [llms.txt](https://gerriscorp.com/llms.txt). ## Main pages - [Experienced help for the digital work your business needs done](https://gerriscorp.com/): Chris Abraham sorts out the technical side of your web presence: diagnoses problems, directs developers, builds with Claude Code, and fixes technical SEO. - [Services](https://gerriscorp.com/services/): Every Gerris service: fractional technical lead, developer specs, AI automation, project rescue, technical SEO, site speed, migrations, AI search, and more. - [Guides](https://gerriscorp.com/guides/): Plain, current guides by Chris Abraham to technical SEO, Cloudflare, Core Web Vitals, AI search, migrations, analytics, and email, and the fix for each problem. - [Case studies](https://gerriscorp.com/case-studies/): Anonymized case studies from Chris Abraham: JavaScript rendering failures, migrations, developer specs, app takeovers, multi location schema, and data cleanup. - [About Chris Abraham](https://gerriscorp.com/about/): Chris Abraham has built websites since 1994, worked at New Media Strategies and Edelman, and runs Gerris Corp, founded in 2007, from Arlington, Virginia. - [Work with me](https://gerriscorp.com/work-with-me/): How engagements with Chris Abraham work: a paid diagnostic first, then implementation, migration reviews, advisory, or support, all tracked in writing. - [Frequently asked questions](https://gerriscorp.com/faq/): Practical answers about working with Chris Abraham at Gerris Corp: how projects start, timelines, payment, access, platforms, and confidentiality. - [Editorial standards](https://gerriscorp.com/standards/): How Chris Abraham writes the guides and case studies on gerriscorp.com: firsthand work, cited documentation, checked AI drafts, anonymous clients, corrections. - [Colophon](https://gerriscorp.com/colophon/): How gerriscorp.com is made: the water strider logo by Oliver Uberti, a Plone inspired design, a Python generator, GitHub Pages, and checks every page passes. - [Contact](https://gerriscorp.com/contact/): Email Chris Abraham at Gerris Corp with your site, the problem, and your budget, or call or text. Diagnostics are prepaid and scoped in writing. - [Privacy](https://gerriscorp.com/privacy/): How gerriscorp.com handles your information: Google Analytics for visit statistics, no advertising or tracking cookies in the UK and EU, and email you send me. ## Consulting and technical direction - [Fractional technical lead](https://gerriscorp.com/services/technical-lead/): Chris Abraham owns your web stack part time: diagnoses problems, writes specs, directs developers and vendors, ships fixes, and reports in plain English. - [Developer specs and implementation QA](https://gerriscorp.com/services/developers/): Chris Abraham turns a diagnosis into a prioritized developer spec with evidence and acceptance criteria, then verifies on the live site that the fix shipped. - [Agency partner and white-label support](https://gerriscorp.com/services/agency-partner/): Chris Abraham works inside agencies' client relationships as a technical SEO and AI search specialist, under NDA, in your Basecamp, with your branding. - [Project rescue, takeovers, and legacy migrations](https://gerriscorp.com/services/rescue/): Chris Abraham takes over stalled or inherited web projects: inventories code, servers, accounts, and DNS, stabilizes them, and moves sites off dead software. - [AI agents and automation, built safely](https://gerriscorp.com/services/ai-automation/): Chris Abraham builds small, safe AI tools with Claude Code: human confirmation on every action, tests, secrets kept out of Git, and encrypted backups. - [Data cleanup and AI-output audits](https://gerriscorp.com/services/data-cleanup/): Chris Abraham cleans and dedupes contact lists and CRMs with Python, and audits AI generated spreadsheets for fabricated or wrong data before you rely on them. - [Analytics and measurement you can trust](https://gerriscorp.com/services/analytics/): Chris Abraham audits GA4 and Search Console data, removes ghost traffic, fixes conversion tracking, and explains what your numbers can and can't actually prove. - [Strategic advisory and briefings](https://gerriscorp.com/services/advisory/): Chris Abraham advises founders and executives on AI, search, reputation, and technology, and writes second opinions on rebuilds, migrations, and vendor plans. ## Search and site performance - [Technical SEO forensics and fixes](https://gerriscorp.com/services/technical-seo/): Chris Abraham diagnoses traffic drops, indexing problems, slow pages, and redirect errors with evidence, then works with your developers until the fixes ship. - [Content the crawler never sees](https://gerriscorp.com/services/crawler-visibility/): Pages that look complete to visitors and empty to Google and AI crawlers: how Chris Abraham finds the cause on Magento, WordPress, and React sites. - [SEO for large and programmatic sites](https://gerriscorp.com/services/large-sites/): Chris Abraham manages crawling and indexing on large and programmatic sites: segmented sitemaps, parameter URLs, index bloat, internal linking, and quality. - [E-commerce SEO: templates, catalogs, and product data](https://gerriscorp.com/services/ecommerce/): Chris Abraham fixes ecommerce SEO at the template level: product data, duplicate URLs, faceted navigation, product schema, rendering, and migrations. - [On-page SEO](https://gerriscorp.com/services/on-page-seo/): Chris Abraham makes each page say plainly what it covers: titles, descriptions, headings, internal links, images, and structured data, written and published. - [Site speed, Core Web Vitals, and Cloudflare](https://gerriscorp.com/services/site-speed/): Chris Abraham makes sites fast on real phones: Core Web Vitals, image and script optimization, caching, and Cloudflare CDN setup, rules, and redirects. - [Google Search Console setup, cleanup, and indexing fixes](https://gerriscorp.com/services/search-console/): Chris Abraham sets up Google Search Console and Bing Webmaster Tools properly, reads the indexing reports, and fixes the problems they reveal, page by page. - [Website migrations](https://gerriscorp.com/services/migrations/): Chris Abraham helps you change platforms, domains, or URL structures and keep your search visibility, with URL inventories, 301 redirect maps, and checks. - [AI search visibility](https://gerriscorp.com/services/ai-search/): How ChatGPT, Claude, Gemini, Perplexity, and Google AI Overviews describe your business, where those answers come from, and the work that improves them. - [Ongoing SEO and website support](https://gerriscorp.com/services/ongoing-support/): A set amount of experienced help each month from Chris Abraham: SEO fixes, publishing, Search Console monitoring, troubleshooting, and developer coordination. ## Local, reputation, and email - [Multi-location and connected businesses](https://gerriscorp.com/services/multi-location/): Chris Abraham untangles multi location brands and sister businesses: entity structure, location pages tied to Google profiles, service areas, and schema. - [Reputation and perception management](https://gerriscorp.com/services/reputation/): Discreet perception management from Chris Abraham: search results, data broker removal, AI answers, and monthly reporting for founders and executives. - [Google Business Profile hard cases](https://gerriscorp.com/services/google-business-profile/): Suspended, unverifiable, or split Google Business Profiles: Chris Abraham starts with a prepaid written diagnostic, then scopes any appeal separately. - [Email authentication and DNS](https://gerriscorp.com/services/email-and-dns/): Chris Abraham sets up SPF, DKIM, and DMARC, fixes deliverability, consolidates domains, and moves DNS and hosting without breaking email or search. ## Guides - [How AI assistants decide what to say about your business](https://gerriscorp.com/guides/ai-assistants/): Where ChatGPT, Claude, Gemini, Perplexity, and Google AI Overviews get their answers about a business, which crawlers feed them, and what you can do about it. - [How to tell if JavaScript is hiding your content from Google and AI](https://gerriscorp.com/guides/javascript-seo/): A practical test for JavaScript SEO: compare raw and rendered HTML, check Search Console, find content that needs a scroll or click, and fix it on the server. - ["Crawled, currently not indexed": what it means and how to fix it](https://gerriscorp.com/guides/crawled-not-indexed/): What Google Search Console's Crawled, currently not indexed status means, how it differs from Discovered, and a step by step method to find the real cause. - [The website migration SEO checklist](https://gerriscorp.com/guides/migration-checklist/): A step by step website migration SEO checklist: URL inventory, 301 redirect map, template review, launch day checks, and the weeks of monitoring after. - [SPF, DKIM, and DMARC for every domain that sends email](https://gerriscorp.com/guides/email-authentication/): What SPF, DKIM, and DMARC records do, example records, the Gmail, Yahoo, and Microsoft sender requirements, and how to reach DMARC enforcement safely. - [How to remove your personal information from data brokers and search](https://gerriscorp.com/guides/personal-information-removal/): How data brokers and people search sites get your information, how to opt out, how Google Results about you works, and what California's DROP changes. - [How to diagnose a Google traffic drop in Search Console](https://gerriscorp.com/guides/traffic-drop/): A step by step method for finding why organic traffic fell: confirm the drop is real, isolate pages and queries, check updates and indexing, and name the cause. - [Canonical tags: how Google chooses which URL to index](https://gerriscorp.com/guides/canonical-tags/): How rel canonical works, why Google sometimes overrides it, the Search Console statuses that reveal canonical problems, and the mistakes that misdirect signals. - [How robots.txt works, and the mistakes that cost traffic](https://gerriscorp.com/guides/robots-txt/): How robots.txt rules are matched, why a Disallow rule still lets pages be indexed, how to handle AI crawlers, and how to test robots.txt changes before launch. - [Structured data in 2026: which schema markup is worth adding](https://gerriscorp.com/guides/structured-data/): Which schema.org markup still earns rich results in Google, which types were retired, how JSON LD helps search engines and AI understand entities, and testing. - [How to plan 301 redirects that keep your rankings and links](https://gerriscorp.com/guides/301-redirects/): Which redirect to use, how to map old URLs to new ones, where to implement redirects on common platforms, how to test them, and how long to keep them live. - [Faceted navigation SEO: filters, parameters, and crawl budget](https://gerriscorp.com/guides/faceted-navigation/): How product filters create millions of crawlable URLs, when crawl budget becomes a real problem, and how to decide which filter pages deserve to be indexed. - [hreflang for English-language sites serving the US, UK, Canada, and Australia](https://gerriscorp.com/guides/hreflang/): When an English language business needs hreflang for the US, UK, Canada, Australia, Ireland, and New Zealand, how to write the tags, and errors that void it. - [Core Web Vitals explained: LCP, INP, CLS, and the fixes that work](https://gerriscorp.com/guides/core-web-vitals/): What Google measures with Largest Contentful Paint, Interaction to Next Paint, and Cumulative Layout Shift, how to read field data, and the fixes for each one. - [Cloudflare settings that help or hurt SEO and AI crawlers](https://gerriscorp.com/guides/cloudflare-seo/): The Cloudflare settings that decide whether Googlebot, Bingbot, and AI crawlers can reach your site, plus the caching, HTTPS, and redirect choices that help. - [Google Consent Mode v2 for GA4: a practical setup guide](https://gerriscorp.com/guides/ga4-consent-mode/): What Consent Mode v2 controls in GA4 and Google Ads, how basic and advanced mode differ, how to set regional defaults, and how to check that it really works. - [Why business email lands in spam, and how to find the cause](https://gerriscorp.com/guides/email-deliverability/): How to find out why legitimate business email lands in spam or bounces: authentication results, reputation, blocklists, content, list hygiene, and tools. - [How to use AI coding assistants on a business website safely](https://gerriscorp.com/guides/ai-coding-assistants/): A working method for using Claude Code and other AI coding assistants on real websites: specs, project memory, automated checks, review, and secrets. - [Lynx for website QA: text browser checks before every launch](https://gerriscorp.com/guides/lynx-qa/): How to use the Lynx text browser to check content, links, and noindex tags across a whole site before launch, plus online options for teams without a terminal. - [ADA website compliance for businesses: lower risk, better SEO](https://gerriscorp.com/guides/ada-website-compliance/): What the ADA expects of business websites, the six fixes that cover most of the risk, what to skip, and why the same work improves search, AI answers, trust. - [Glossary of SEO, AI search, and technical website terms](https://gerriscorp.com/guides/glossary/): Plain definitions of technical SEO, AI search, site speed, and email terms: AEO, GEO, canonical tags, Core Web Vitals, DMARC, IndexNow, llms.txt, and many more. ## Case studies - [Magento store: product content Googlebot never saw](https://gerriscorp.com/case-studies/ecommerce-rendering/): How Chris Abraham traced a Magento and Hyvä store's falling traffic to Alpine.js sections that never rendered for Googlebot, and kept two problems apart. - [WordPress media site: a consent banner hiding every article](https://gerriscorp.com/case-studies/consent-blocking/): A bilingual WordPress review site indexed on Bing but barely in Google: Chris Abraham traced it to consent blocking that left article tabs empty. - [React event platform: 2,000 pages Google couldn't reach](https://gerriscorp.com/case-studies/react-event-platform/): A Create React App event platform with 2,000 pages Google never found: Chris Abraham wrote a 13 page developer spec ranked P0 to P3 and verified the fixes. - [Clinical practice: WordPress to Netlify, with search intact](https://gerriscorp.com/case-studies/netlify-migration/): Migration oversight for a clinical practice leaving WordPress: redirect decisions for every URL, an AI assisted repository analysis, and a careful disavow. - [Local service business on Sanity and Vercel: SEO in the repository](https://gerriscorp.com/case-studies/sanity-vercel/): A local service business on Sanity and Vercel: Chris Abraham set SEO priorities, merged metadata changes through GitHub, and verified the prerendering. - [Specialty retailer: cleaning up after Squarespace to Shopify](https://gerriscorp.com/case-studies/shopify-migration/): A premium fly fishing store moved from Squarespace to Shopify and left 3,400 404s and duplicate URLs behind: a four part audit and theme schema work. - [Consumer brand: taking over a stalled React application](https://gerriscorp.com/case-studies/app-takeover/): A consumer skincare brand's React application changed hands after an outage. Chris Abraham inventoried code, hosting, and DNS and fixed the server over SSH. - [Programmatic site: managing crawling and indexing at scale](https://gerriscorp.com/case-studies/programmatic-indexing/): A trading card price site of 20,000+ pages on an expired domain lost indexing after a strong start. How Chris Abraham manages crawling at scale. - [Health-testing store: recovering after an SEO plugin outage](https://gerriscorp.com/case-studies/indexing-recovery/): A WooCommerce health testing store lost indexing, traffic, and AI referrals after its SEO plugin was briefly disabled: how the recovery was checked. - [Multi-location brand: untangling the parent from its first location](https://gerriscorp.com/case-studies/multi-location-entity/): A custom closets brand with locations in several states and one website: Chris Abraham separated the parent brand from its first location in schema. - [Seasonal retailer: a staged plan around the peak](https://gerriscorp.com/case-studies/seasonal-retailer/): A multi store seasonal retailer with related sites and profiles: audit findings and a staged plan that keeps risky changes away from the peak season. - [Therapy practice: a suspended Google Business Profile reinstated](https://gerriscorp.com/case-studies/gbp-reinstatement/): A hypnotherapy practice's suspended Google Business Profile, reinstated in February 2025 after Chris Abraham reviewed the listing and built a documented appeal. - [Two B2B companies on Umbraco: publishing and technical operations](https://gerriscorp.com/case-studies/umbraco-operations/): Two B2B companies on Umbraco: 54 city landing pages and steady publishing for one, and a homepage overhaul with cache and template fixes for the other. - [AI company: search visibility for recruiting engineers](https://gerriscorp.com/case-studies/ai-recruiting/): An AI company recruiting engineers in the Bay Area wanted to appear in AI answers about jobs. Chris Abraham audited its footprint and planned the fix. - [Contact data: three cleanups and an AI audit](https://gerriscorp.com/case-studies/data-cleanup/): Python pipelines that cleaned an 88,900 contact list, merged two 28,800 record exports at 94% email coverage, and caught an AI tracker inventing its data. - [Built with Claude Code](https://gerriscorp.com/case-studies/built-with-claude-code/): How Chris Abraham directs Claude Code like a development team: a 9,600 line AI assistant with 106 tests, a legacy blog moved to GitHub Pages, and this website. ## Files for machines - [sitemap.xml](https://gerriscorp.com/sitemap.xml): the XML sitemap for search engines. - [llms.txt](https://gerriscorp.com/llms.txt): a plain summary of the site for language models, linking to Markdown versions of every page. - [llms-full.txt](https://gerriscorp.com/llms-full.txt): the full text of the site in one file. - [feed.xml](https://gerriscorp.com/feed.xml): an Atom feed of the guides. - [robots.txt](https://gerriscorp.com/robots.txt): crawler rules; every search engine and AI crawler is welcome. Updated October 6, 2026