# Christopher Abraham: full text of christopherabraham.com > Independent SEO consulting by Christopher Abraham: technical SEO audits, indexing repair, JavaScript SEO, site speed, migrations, schema, AI search visibility, and local SEO. > Built 2026-10-06. Quote freely with attribution and a link to the source page. --- Source: https://christopherabraham.com/ Updated: 2026-10-06 # Senior SEO help, from the person who does the work I'm Christopher Abraham, an independent SEO consultant. When traffic drops, pages vanish from Google, or AI assistants describe your business wrong, I find the cause, write the fix, and make sure it lands. You work with me directly, from the first audit to the last verification crawl. This year's work looks like this: GEO and AEO audits that test what ChatGPT, Perplexity, Gemini, Claude, Copilot, and Google's AI Overviews say about a business; rendering forensics on React, Next.js, and Hyvä builds; SEO changes merged through GitHub on headless stacks; and AI-assisted analysis of a site's code before a migration. The fundamentals carry across every engine. Pages that load fast, render cleanly, say plainly what they are about, and carry accurate structured data get crawled, indexed, ranked, and quoted. I know those fundamentals cold because I've been practicing them a long time: I built my first websites in 1994 and started doing search engine optimization in 1998, back when the job meant hand-editing meta tags for AltaVista. Every shift since then, from links to mobile to AI answers, has been one more thing to learn, and learning it is my favorite part of the job. ## Problems I solve - **Traffic dropped and nobody knows why.** A [technical SEO audit](https://christopherabraham.com/services/seo-audit/) that ends with a cause, evidence, and a ranked list of fixes. - **Google won't index the pages.** [Indexing repair](https://christopherabraham.com/services/indexing/) for "Crawled, currently not indexed," soft 404s, stray canonicals, and orphaned pages. - **The site runs on React and nothing ranks.** [JavaScript SEO](https://christopherabraham.com/services/javascript-seo/) for client-rendered, headless, and framework sites. - **ChatGPT has never heard of the business.** [AI SEO, GEO, and AEO](https://christopherabraham.com/services/ai-search/): being understood and cited by answer engines. - **A platform move is coming next month.** [Migration planning and 301 redirect maps](https://christopherabraham.com/services/migrations/) that carry your rankings across. - **Pages are slow.** [Core Web Vitals and Cloudflare](https://christopherabraham.com/services/site-speed/) work measured in field data. - **Customers can't find the business on the map.** [Local SEO and Google Business Profile](https://christopherabraham.com/services/local-seo/) alignment. The complete list, including [schema markup](https://christopherabraham.com/services/schema/), [WordPress SEO](https://christopherabraham.com/services/wordpress-seo/), [ecommerce SEO](https://christopherabraham.com/services/ecommerce-seo/), and [monthly retainers](https://christopherabraham.com/services/seo-retainer/), is on the [services page](https://christopherabraham.com/services/). ## Why clients pick me - **Seniority without the agency layer.** The person who scopes the work is the person who crawls the site, reads the logs, and writes the developer tickets. - **I read code.** Templates, rendered DOM, build settings, and pull requests are part of the job. Developers get specifications with acceptance criteria, and I check what ships. - **Evidence first.** When two problems arrive at once, I keep them on separate tracks until the data connects them. - **Plain English.** Every engagement ends with a technical document for engineers and a short summary for whoever signs the checks. ## My Upwork record Most clients find me as [Christopher A. on Upwork](https://www.upwork.com/freelancers/chrisjabraham), where every job, hour, and rating is on the record. Figures as of October 2026: | Job Success | 100% | | Badge | Top Rated | | Total earnings | $200K+ | | Jobs | 127 | | Hours | 4,089 | | Usual reply time | 4 to 8 hours | > "[Christopher] was a pro and knew his schema far better than anyone else I have dealt with." Client, schema markup project > "Great experience, very knowledgeable on AEO." Client, AI SEO and technical SEO project Locally, my verified [Google Business Profile](https://share.google/xZ98ksFq3nhO2OvuF) holds a 5.0 rating from 10 Google reviews (as of October 2026). Clients describe working with me as collaborative, committed to quality, and clearly communicated, according to Upwork's summary of my completed jobs. ## Selected results - Found that a Magento store's product specs, FAQs, and reviews loaded only when a shopper scrolled, so Googlebot indexed 300-word shells of 1.2 MB pages. [The scroll-gated products case](https://christopherabraham.com/case-studies/scroll-gated-products/). - Traced a film review site's near absence from Google to a cookie consent tool that blocked the script holding every article. [The consent banner case](https://christopherabraham.com/case-studies/consent-banner/). - Wrote a 13-page, priority-ranked spec that opened 2,000 event pages of a React app to Google. [The event app case](https://christopherabraham.com/case-studies/event-app-links/). - Helped a therapy practice win back a suspended Google Business Profile with an evidence-first appeal. [The profile reinstatement case](https://christopherabraham.com/case-studies/profile-reinstated/). Every client is anonymized. See all [case studies](https://christopherabraham.com/case-studies/). ## Free guides - [How to read the Page indexing report in Search Console](https://christopherabraham.com/guides/page-indexing-report/) - [The AI search readiness checklist](https://christopherabraham.com/guides/ai-search-checklist/) - [Ten rules for 301 redirects that keep your rankings](https://christopherabraham.com/guides/redirect-rules/) - [The schema markup a small business actually needs](https://christopherabraham.com/guides/small-business-schema/) More in [guides](https://christopherabraham.com/guides/), plus a [glossary of SEO and AI search terms](https://christopherabraham.com/guides/glossary/). ## Start with a conversation Send me your site's address and a sentence about what's wrong. Email [cja@well.com](mailto:cja@well.com), or call or text [+1 202-352-5051](tel:+12023525051). [Contact me](https://christopherabraham.com/contact/) [Book a 30 minute call](https://calendly.com/chrisabraham/30) [Hire me on Upwork](https://www.upwork.com/freelancers/chrisjabraham) Updated October 6, 2026 --- Source: https://christopherabraham.com/services/ Updated: 2026-10-06 # SEO services Every service starts from the same place: find out what search engines and AI systems actually receive from your site, compare it with what you meant to publish, and close the gap. Pick the symptom closest to yours, or start with an [audit](https://christopherabraham.com/services/seo-audit/) if you aren't sure. ## Technical SEO - [Technical SEO audit](https://christopherabraham.com/services/seo-audit/): the cause of a traffic loss or a stall, with evidence and a ranked plan. - [Indexing repair](https://christopherabraham.com/services/indexing/): pages stuck in "Crawled, currently not indexed," "Discovered, currently not indexed," soft 404s, and canonical conflicts. - [JavaScript and headless SEO](https://christopherabraham.com/services/javascript-seo/): React, Next.js, Vue, Alpine.js, Sanity, Vercel, and other stacks where content depends on scripts. - [Core Web Vitals and Cloudflare](https://christopherabraham.com/services/site-speed/): faster pages measured by real visitors, with caching and CDN rules that don't break crawling. - [Search Console, Bing Webmaster Tools, and GA4](https://christopherabraham.com/services/search-console/): setup, cleanup, and reports you can trust. - [Site migrations and 301 redirects](https://christopherabraham.com/services/migrations/): platform moves, domain changes, and redesigns that keep their rankings. ## AI search, schema, and content - [AI SEO, GEO, and AEO](https://christopherabraham.com/services/ai-search/): how ChatGPT, Perplexity, Gemini, Claude, Copilot, and AI Overviews describe you, and how to improve it. - [Schema markup and entity SEO](https://christopherabraham.com/services/schema/): JSON-LD that validates, matches the page, and tells machines who you are. - [On-page SEO](https://christopherabraham.com/services/on-page-seo/): titles, descriptions, headings, internal links, and thin or duplicate pages. ## Platforms, local, and ongoing work - [WordPress SEO](https://christopherabraham.com/services/wordpress-seo/): Yoast, Rank Math, themes, plugins, and the performance cleanup old installs need. - [Ecommerce SEO](https://christopherabraham.com/services/ecommerce-seo/): Shopify, WooCommerce, and Magento product, category, and faceted pages. - [Local SEO and Google Business Profile](https://christopherabraham.com/services/local-seo/): location pages, profiles, categories, and hard cases such as suspensions. - [Monthly SEO retainer](https://christopherabraham.com/services/seo-retainer/): steady monitoring, fixes, and reporting from a senior consultant. ## How each service is delivered Each one begins with a scoped, paid diagnostic. You get findings in writing, a prioritized plan, and the choice of having me implement what I can reach while your developers build the rest from my specifications. I verify every fix on the live site before calling it done. The details are on [Hire Me](https://christopherabraham.com/hire-me/). ## Platforms I work in WordPress with Yoast or Rank Math, WooCommerce, Shopify and Liquid, Magento 2 and Hyvä, Drupal, Umbraco, Squarespace, Wix, Webflow, Framer, and custom builds on React, Next.js, and Vue. Around them: Cloudflare, Google Search Console, Bing Webmaster Tools, GA4, Screaming Frog, Semrush, PageSpeed Insights, and the Rich Results Test. Updated October 6, 2026 --- Source: https://christopherabraham.com/services/seo-audit/ Updated: 2026-10-06 # Technical SEO audit Most audit reports are a tool export with a logo on it: four hundred warnings, sorted by color, with no idea which three matter. My audits start from your question, such as "why did product traffic fall in March?", and end with the answer, the evidence behind it, and the order to fix things in. ## Who it's for - Sites whose organic traffic dropped and nobody can say why. - Sites that have plateaued despite steady publishing. - New owners, marketing leads, or agencies inheriting a site and wanting a baseline before they change anything. - Teams planning a redesign or replatform who want to know what to protect. ## What I examine ### Crawling A full crawl with Screaming Frog in both text-only and JavaScript rendering modes, so I can compare what the server sends with what a browser builds. Robots rules, XML sitemaps, status codes, redirect chains, internal link depth, and orphaned pages. ### Indexing The Page indexing report in Search Console, broken down by reason and by template; URL Inspection on representative pages; and the equivalent reports in Bing Webmaster Tools, which often confirm or contradict what Google shows. ### Rendering Raw HTML, rendered DOM, and the text a crawler actually extracts, compared on the same URLs. This is where the expensive surprises live: tabs, accordions, lazy sections, and consent tools that leave content invisible to bots. ### Signals on the page Titles, meta descriptions, headings, canonicals, hreflang, structured data, and internal anchor text, checked for duplication and conflicts at the template level. ### Performance Core Web Vitals from field data where it exists, lab tests where it doesn't, and the server and CDN configuration behind them. ### History What changed and when: deployments, plugin updates, migrations, Google updates, and backlink spikes, lined up against the traffic curve. ## How I keep findings honest Traffic losses rarely have a single cause, and the most dangerous move is to tell one tidy story about two unrelated problems. I keep separate problems on separate tracks, attach evidence to each finding, and say how confident I am. When the data can't settle a question, the report says what would. ## What you receive - A findings report: the question, the cause or causes, the evidence, and confidence for each. - A ranked fix list, P0 to P3, with an owner and an effort estimate per item. - Developer tickets with exact steps and acceptance criteria. - A one-page summary in plain English for leadership. - A walkthrough call, if you want one. ## After the audit Many clients have me implement the fixes I can reach, such as metadata, redirects, schema, and plugin or Cloudflare settings, and then verify the developer's work against the acceptance criteria. Others take the report to their own team. Either way the report stands on its own. Scope, timeline, and price are agreed before the audit starts. See [Hire Me](https://christopherabraham.com/hire-me/), or read [what a technical SEO audit should give you](https://christopherabraham.com/guides/seo-audit-deliverables/). Updated October 6, 2026 --- Source: https://christopherabraham.com/services/indexing/ Updated: 2026-10-06 # Indexing repair A page that isn't indexed can't rank, can't appear in AI Overviews, and is far less likely to be cited by an answer engine. When the Page indexing report in Search Console starts filling with excluded URLs, I find out which ones matter, why they're excluded, and what will bring them back. ## The statuses I untangle **Crawled, currently not indexed** Google fetched the page and chose to leave it out. Common causes: content that isn't in the rendered HTML, near-duplicates of stronger pages, thin templates, and weak internal links. **Discovered, currently not indexed** Google knows the URL exists but hasn't spent the crawl on it. Usually a sign of too many low-value URLs, slow servers, or pages buried deep in the link structure. **Alternate page with proper canonical tag** Fine when it's intended. A problem when a template points every section's canonical at the home page. **Duplicate, Google chose different canonical than user** Google overruled your canonical, often because internal links, sitemaps, and redirects disagree with it. **Soft 404** A page that returns success but looks empty or missing to Google: out-of-stock products, empty search results, placeholder pages. **Excluded by noindex, blocked by robots.txt** Sometimes deliberate, often left over from a staging site or a plugin setting someone forgot. ## How I work through it 1. **Segment.** Group excluded URLs by template and section, so you see that 80% of the problem is one product template rather than 4,000 unrelated pages. 2. **Sample and inspect.** URL Inspection, live tests, and rendered HTML on representative pages from each group. 3. **Find the mechanism.** Missing content after rendering, conflicting canonicals, parameter sprawl, thin variants, or crawl paths that never reach the page. 4. **Decide what deserves an index slot.** Every page doesn't need to be indexed. Some should be consolidated, noindexed, or removed, which frees attention for the ones that earn traffic. 5. **Fix and resubmit.** Correct the templates, sitemaps, and links, then request indexing for priority pages. 6. **Measure by segment.** Separate sitemaps per page type make Search Console report coverage for each group, so progress is visible instead of averaged away. ## Reporting lag Search Console reports trail reality by days and sometimes weeks. I check the live site and the URL Inspection tool before deciding whether a fix worked, and I tell you which numbers are stale so nobody panics over a chart that hasn't caught up. ## Bing counts too Bing's index feeds Copilot and several other AI assistants, and Bing Webmaster Tools reports problems Google won't mention. I check both, and I set up IndexNow where your platform supports it, so changes reach Bing within minutes. ## Related Indexing problems on React, Next.js, and other script-heavy sites are covered under [JavaScript SEO](https://christopherabraham.com/services/javascript-seo/). For a walkthrough of the report itself, read [how to read the Page indexing report](https://christopherabraham.com/guides/page-indexing-report/). A real example: [indexing a 20,000-page programmatic site](https://christopherabraham.com/case-studies/card-price-index/). Updated October 6, 2026 --- Source: https://christopherabraham.com/services/javascript-seo/ Updated: 2026-10-06 # JavaScript and headless SEO A modern site can look perfect in a browser and nearly empty to a crawler. If your content depends on JavaScript to appear, some crawlers will see it late, some will see part of it, and most AI crawlers will never see it at all. I find the gap and specify the fix in terms your developers can build. ## Why it matters more every year Googlebot renders JavaScript, eventually, in a second pass with limits on time and resources. Bingbot renders less reliably. Most of the crawlers that feed AI assistants, including those from OpenAI, Anthropic, and Perplexity, fetch the HTML and move on. Content that exists only after scripts run is content those systems can't quote. ## Patterns I find again and again - **An empty shell.** A single-page app whose server HTML holds one empty root element. - **Links that aren't links.** Cards and menus that navigate with click handlers instead of real anchor tags, leaving crawlers no path to deeper pages. - **Content gated on interaction.** Specs, reviews, and FAQs that mount only on scroll, hover, or tab click. Crawlers don't scroll or click. - **Consent tools blocking content scripts.** A cookie banner holding back the script that builds the article, so bots, which never consent, get a blank page. - **Head tags set late.** Titles, canonicals, and robots directives written by client-side code, which crawlers may read before or after the change. - **Soft 404s.** Missing routes that return a 200 status with a "not found" message drawn by the app. ## How I diagnose it For each important template, I compare three versions of the page: the raw HTML from the server, the DOM after rendering, and the text a crawler extracts. Screaming Frog in JavaScript mode, Search Console's URL Inspection live test, and a plain fetch with no scripts at all make the differences obvious. When I have repository access, I read the routes, components, and build configuration to find exactly where the content is gated. ## What the fix usually looks like - Server-side rendering or static prerendering for pages that need to rank. - Real anchor links in the server HTML for every navigable item. - Interactive effects kept as progressive enhancement, on top of content that's already in the HTML. - Head tags rendered on the server, with self-referencing canonicals per route. - Proper 404 and 410 status codes for missing routes. ## Stacks I've worked in React and Create React App, Next.js on Vercel and Netlify, Vue, Alpine.js on Magento's Hyvä theme, Sanity and other headless CMSs, Shopify themes, and WordPress builds with heavy page builders. I can open a pull request for metadata and template changes, or hand your developer a spec with acceptance criteria and verify what ships. ## Examples See [product content hidden behind scroll triggers](https://christopherabraham.com/case-studies/scroll-gated-products/), [a React app with 2,000 unreachable pages](https://christopherabraham.com/case-studies/event-app-links/), and [SEO fixes merged through GitHub on Sanity and Vercel](https://christopherabraham.com/case-studies/headless-local/). Updated October 6, 2026 --- Source: https://christopherabraham.com/services/site-speed/ Updated: 2026-10-06 # Core Web Vitals and Cloudflare Slow pages lose visitors before they lose rankings. I find what's making your pages slow for real people on real phones, fix what I can reach, and specify the rest, then confirm the improvement in field data, which is what Google uses. ## The three numbers - **Largest Contentful Paint (LCP)**: how long the main content takes to appear. Good is under 2.5 seconds. - **Interaction to Next Paint (INP)**: how quickly the page responds when someone taps or types. Good is under 200 milliseconds. - **Cumulative Layout Shift (CLS)**: how much the layout jumps while loading. Good is under 0.1. Google judges each at the 75th percentile of real visits over 28 days, which is why a perfect lab score on your laptop can coexist with a failing report in Search Console. My [plain-English guide to Core Web Vitals](https://christopherabraham.com/guides/core-web-vitals/) goes deeper. ## Where the time goes - Hero images served at desktop size to phones, without modern formats or proper sizing. - Render-blocking CSS and JavaScript from themes, page builders, and plugins nobody uses anymore. - Third-party tags: chat widgets, heatmaps, ad pixels, and tag managers loading tag managers. - Slow server response from shared hosting, uncached database queries, or a missing page cache. - Web fonts that block text or swap late and shift the layout. - Ads and embeds without reserved space. ## Cloudflare, configured carefully Cloudflare can make a site dramatically faster, and it can also block the crawlers you need. I set up caching rules, compression, image optimization, and HTTP/3, and I review security settings so that Googlebot, Bingbot, and the AI crawlers you want are allowed through. Bot-fight modes and "block AI crawlers" switches are decisions, and I make sure they're made on purpose. I also handle DNS moves to Cloudflare without disturbing email records. ## How I work 1. Pull field data from Search Console and the Chrome UX Report to find which templates fail, on which devices. 2. Profile representative pages in PageSpeed Insights and browser developer tools to find the specific resources at fault. 3. Fix what's within reach: image compression and sizing, caching plugins, script deferral, Cloudflare rules. 4. Write tickets for theme and code changes, with the measurement each should improve. 5. Watch field data over the following 28-day window and report what moved. ## Speed and SEO together Some speed tricks hurt search: lazy loading the main content, deferring scripts that build the page's text, or caching pages with the wrong canonical. I check every optimization against how crawlers see the page, so speed gains don't cost indexing. ## What you receive A short report naming each failing template, the resource responsible, and the expected gain from each fix, followed by a before-and-after comparison once the field data has caught up. ## Platforms WordPress with WP Rocket, LiteSpeed Cache, or W3 Total Cache; WooCommerce; Shopify themes; Magento; static sites; and Next.js. For WordPress specifics, see [WordPress SEO](https://christopherabraham.com/services/wordpress-seo/). Updated October 6, 2026 --- Source: https://christopherabraham.com/services/search-console/ Updated: 2026-10-06 # Search Console, Bing Webmaster Tools, and GA4 Every SEO decision rests on three sets of reports. If they're misconfigured, unverified, or owned by someone who left two years ago, every decision downstream gets harder. I set them up properly, recover access when it's lost, and teach your team which numbers to trust. ## Google Search Console - **Verification and ownership.** A Domain property verified through DNS, covering every protocol and subdomain, with owners you control. I recover access from departed staff and agencies. - **Sitemaps.** Clean XML sitemaps, split by page type so the Page indexing report shows coverage per section. - **Reports that matter.** Performance filtered by page groups and query patterns, Page indexing by reason, Core Web Vitals by template, and enhancement reports for structured data. - **Manual actions and security issues.** Checked, explained, and resolved when they appear. - **Change of address** and other migration tools, used at the right moment. ## Bing Webmaster Tools Bing's index powers Microsoft Copilot, DuckDuckGo results, and part of what several AI assistants retrieve. I verify Bing Webmaster Tools, import settings from Search Console, submit sitemaps, and turn on IndexNow so new and changed pages are announced instantly. Bing's Site Scan and URL Inspection often expose issues that Google's reports stay quiet about. ## GA4 - Property and data stream setup with sensible data retention and internal traffic filters. - Key events defined around real business outcomes: leads, calls, purchases. - Channel grouping that separates organic search, AI assistant referrals, and paid traffic, so you can see visits from ChatGPT, Perplexity, and Copilot on their own line. - Spam and ghost traffic identified and excluded. - Search Console linked, so query data sits beside behavior data. - Consent mode configured where your audience requires it. ## Reading the numbers honestly Reports disagree. Search Console counts clicks; GA4 counts sessions that loaded a tag; consent tools and ad blockers hide some visitors entirely. Third-party "visibility" tools can change their methodology overnight and draw a cliff that never happened. I compare several sources before calling anything a trend, and I flag which numbers are delayed or estimated. ## Access lost, access recovered A surprising number of businesses can't log into their own Search Console. The property was verified by a former employee, an agency that has since moved on, or a plugin that no longer exists. Because Domain properties are verified through DNS, whoever controls the domain's DNS records can reclaim ownership without anyone else's help. I walk you through adding the verification record, confirm ownership, and then remove stale users so the access list matches the people who actually work on the site today. ## Deliverables - Verified properties with a written list of who has access. - Sitemaps and IndexNow in place. - A short dashboard or monthly report, built around the five or six numbers you'll actually use. - A recorded walkthrough so your team can read the reports without me. Ongoing monitoring is part of every [retainer](https://christopherabraham.com/services/seo-retainer/). For the indexing report in detail, see the [Page indexing guide](https://christopherabraham.com/guides/page-indexing-report/). Updated October 6, 2026 --- Source: https://christopherabraham.com/services/migrations/ Updated: 2026-10-06 # Site migrations and 301 redirects A migration is the single riskiest thing most websites ever do. A new platform, a new domain, or a redesign that changes URLs can erase years of search equity in a weekend. I plan the move so that every old URL lands somewhere sensible, check it on launch day, and stay on watch until rankings settle. ## Kinds of moves I handle - Platform changes: WordPress to Shopify, Squarespace to Shopify, WordPress to Next.js on Netlify or Vercel, Magento upgrades, and more. - Domain changes, mergers of several domains into one, and HTTP to HTTPS or www to apex consolidation. - Redesigns that change URL structure, navigation, or templates. - Hosting and CDN moves, including DNS cutovers to Cloudflare. - Recovery after a migration that has already lost traffic. ## Before launch 1. **Inventory every URL that matters.** From crawls, XML sitemaps, Search Console, analytics, and backlink data, so pages with links or traffic aren't missed just because they're no longer in the menu. 2. **Map each one.** A one-to-one 301 to the closest equivalent page. Pages that are going away get a deliberate decision: redirect to a true replacement, or return 410. 3. **Carry the signals across.** Titles, descriptions, headings, structured data, internal links, hreflang, and canonical rules rebuilt on the new templates. 4. **Check staging.** Crawl the new site before launch, with the redirect map tested against it, while blocking staging from being indexed. ## Launch day - Redirects tested in bulk against the live site, with chains and loops removed. - Robots rules and noindex tags checked, since staging settings that reach production are a common disaster. - New sitemaps submitted in Search Console and Bing Webmaster Tools; Change of Address filed for domain moves. - Analytics and Search Console verified on the new setup. ## After launch I monitor 404s, crawl stats, indexing, and rankings by page group for the following weeks, and I keep the problems the migration caused apart from problems the site already had, so the new platform isn't blamed for old faults or credited with fixing them. Media still loading from the old host, broken image CDNs, and lost structured data are common late discoveries. ## Who owns what Migrations involve a developer, a host, often a designer, and sometimes an agency. I write down who owns each step: who exports the old URLs, who loads the redirect map, who flips DNS, who files Change of Address. A one-page runbook with names and times prevents the most common launch-day failure, which is everyone assuming someone else handled it. ## When the move already happened If traffic fell after a migration, the old site is usually the best evidence. I reconstruct the old URL set from archives, logs, and analytics, rebuild the redirect map, and prioritize the pages that carried the most traffic and links. My rules for redirects are in [ten rules for 301 redirects](https://christopherabraham.com/guides/redirect-rules/). Examples: [a clinic's move from WordPress to Next.js](https://christopherabraham.com/case-studies/clinic-migration/) and [cleaning up after a Squarespace to Shopify move](https://christopherabraham.com/case-studies/shopify-cleanup/). Updated October 6, 2026 --- Source: https://christopherabraham.com/services/ai-search/ Updated: 2026-10-06 # AI SEO, GEO, and AEO More people now ask an assistant before they search. ChatGPT, Perplexity, Gemini, Claude, Microsoft Copilot, and Google's AI Overviews and AI Mode answer the question directly and cite a handful of sources. I find out what they say about you, where they're getting it, and what would make them say it more accurately and more often. ## The vocabulary, briefly The field has too many acronyms for one idea. GEO (generative engine optimization), AEO (answer engine optimization), AIO, LLMO, and AI SEO all describe making a site easy for AI systems to find, understand, trust, and cite. In practice it's good technical SEO, clear entities, and content written so a single paragraph can stand on its own as an answer. ## What I test - **A prompt set built from your buyers' questions.** "Best X for Y," "Is Z legitimate," "Who does A near B," and comparisons with named competitors, run across the major assistants. - **What each answer says.** Whether you appear, how you're described, and whether the facts are current. - **Where the answer came from.** The sources each assistant cites, and which of them you control, can influence, or should correct. - **Crawler access.** Whether GPTBot, OAI-SearchBot, ClaudeBot, PerplexityBot, Google-Extended, and Bingbot can reach your pages, through robots rules, Cloudflare, and your firewall. - **Machine readability.** Whether your key content is in the server HTML, since most AI crawlers don't run JavaScript. ## What I change ### Entities AI systems reason about things, not keywords: your organization, your people, your products, and your locations. I make sure each is described the same way everywhere, with Organization, Person, Product, and LocalBusiness schema tying them together and sameAs links pointing to the profiles that confirm them. ### Answer-shaped content Pages that open with a direct answer, define their terms, include the numbers people ask about, and keep each section self-contained. FAQs written around real questions. Glossaries. Comparison pages that are fair enough to quote. ### Evidence elsewhere Assistants trust what other sources confirm. I identify the directories, review sites, publications, and community discussions that answers lean on, and where your information there is missing or out of date. ### Files for machines An llms.txt file that summarizes your site and links to clean Markdown versions of key pages, XML sitemaps, and IndexNow, so changes reach Bing, and through it Copilot, quickly. ## Measuring it AI answers vary from run to run, so I measure with repeated prompts over time rather than one screenshot. Alongside that: AI assistant referrals in GA4, citations of your pages, and the share of tested prompts where you appear and are described correctly. Results are reported as trends, with the prompt set kept stable so the comparison is fair. ## What to expect Technical access problems can be fixed in days. Changes in how assistants describe you follow their crawl and retrieval cycles, which take weeks to months. Start with my [AI search readiness checklist](https://christopherabraham.com/guides/ai-search-checklist/), or see [a company that wanted accurate AI answers for job seekers](https://christopherabraham.com/case-studies/recruiting-answers/). Updated October 6, 2026 --- Source: https://christopherabraham.com/services/schema/ Updated: 2026-10-06 # Schema markup and entity SEO Structured data tells machines, in their own language, what a page is about: this is a business, here is its address, this is the product, this is its price, this person wrote the article. Done well, it earns rich results in Google and helps AI systems connect the facts. Done carelessly, it contradicts the page and gets ignored. ## What I build - **Organization and LocalBusiness** with name, logo, address, phone, hours, service area, and sameAs links to the profiles that confirm the business. - **Person** for founders, authors, and practitioners whose expertise matters to the page. - **Product and Offer** with price, availability, brand, identifiers, and review data from the platform's real reviews. - **Service** for service businesses, tied to the provider and the area served. - **Article, BlogPosting, and TechArticle** with author, dates, and publisher. - **FAQPage, HowTo, and DefinedTermSet** where the page truly contains questions, steps, or definitions. - **BreadcrumbList and WebSite** to describe structure. ## Entities, connected The real value is in the connections. A multi-location business is one Organization with several locations as branches, each linking to its own page and its own Google Business Profile. An author is a Person who works for the Organization that publishes the article. I use stable @id identifiers so every page refers to the same entities in the same way, and search engines and AI systems assemble one consistent picture instead of several conflicting ones. ## Common problems I fix - Two Product blocks on one page, one from the theme and one from a plugin, each with different data. - Review stars marked up from reviews that aren't on the page. - A home page and its first location described as the same business. - FAQ markup on pages with no visible questions. - Schema hardcoded once and never updated as prices, hours, or addresses changed. - Plugins emitting conflicting graphs that no validator flags as errors but no search engine trusts. ## How it's delivered Depending on your platform, I install the JSON-LD myself through the theme, a plugin like Rank Math or Yoast, Shopify's theme files and metafields, or a pull request to your repository. Otherwise I hand your developer finished, validated code. Theme work happens on a duplicate theme or staging copy first. Every template is checked in the Rich Results Test and the Schema.org validator, and then watched in Search Console's enhancement reports. ## What schema can and can't do Structured data makes your facts unambiguous; it doesn't make a weak page strong. Google decides when to show rich results. The work pays off most when it matches strong, visible content, which is why I review the page and the markup together. Not sure which types you need? Read [the schema markup a small business actually needs](https://christopherabraham.com/guides/small-business-schema/), or see [entity markup for a brand with locations in several states](https://christopherabraham.com/case-studies/closet-locations/). Updated October 6, 2026 --- Source: https://christopherabraham.com/services/on-page-seo/ Updated: 2026-10-06 # On-page SEO On-page SEO is everything a page says about itself: its title, description, headings, body copy, images, and the links pointing in and out. On a small site it's craft. On a site with thousands of pages it's a template problem, and that's where I start. ## What I review ### Titles and meta descriptions Unique, specific, and the right length to display in full. I find the duplicates and the defaults, such as "Home," "Products," or the theme's placeholder text, and rewrite them so each page states what it offers and who it's for. ### Headings One clear H1 per page, and H2s that describe their sections. A common template fault: the same hardcoded H2s on every page, which tells search engines nothing about any of them. ### Internal links Descriptive anchor text, links from strong pages to the pages that need help, and no important page more than a few clicks from the home page. Generic "click here" and "read more" links waste the strongest signal you fully control. ### Thin, duplicate, and competing pages Near-identical location pages, tag archives, filtered variants, and old posts covering the same topic. Each group gets a decision: consolidate, improve, redirect, or noindex. ### Images Descriptive file names and alt text, correct dimensions, modern formats, and captions where they help. ### Keyword coverage Which questions and phrases each page should answer, where you have gaps, and where two of your own pages compete for the same query. I use Semrush and Search Console query data to find the terms stuck on page two, where small improvements move a page into the top results. ## How I use AI in this work AI tools are fast at drafting title and description variants, spotting topic gaps, suggesting FAQs, and expanding thin sections. I use them for exactly that. Every draft gets edited for accuracy, brand voice, and search intent before it goes live, because an AI tool doesn't know your business, your claims, or what your customers actually ask. The judgment stays human. ## Working at scale For large sites I work through templates and fields instead of page by page: fixing the pattern that generates five thousand titles, then hand-editing the fifty pages that earn most of the revenue. Bulk changes are made through the CMS, a plugin's import tools, or a spreadsheet your developer can load, with a before-and-after log. ## Content that ranks and gets quoted Pages that answer a question directly in the first paragraph, define their terms, use real numbers, and keep each section self-contained tend to win both featured snippets and AI citations. I can brief your writers in that style, edit their drafts, or write service and landing pages myself. On WordPress, much of this runs through Yoast or Rank Math; see [WordPress SEO](https://christopherabraham.com/services/wordpress-seo/). For a real example of on-page problems hiding a whole site, see [the consent banner case](https://christopherabraham.com/case-studies/consent-banner/). Updated October 6, 2026 --- Source: https://christopherabraham.com/services/wordpress-seo/ Updated: 2026-10-06 # WordPress SEO WordPress runs a large share of the web, and a large share of the SEO problems I see. Not because WordPress is bad at SEO, but because years of themes, page builders, and plugins pile up on top of each other. I've worked in WordPress since its early days and know where the problems hide. ## SEO plugins, configured properly Yoast SEO and Rank Math do a lot of work most owners never see: titles and descriptions, canonical tags, robots directives, XML sitemaps, breadcrumbs, and structured data. That's why turning one off, even for an afternoon, can knock pages out of the index. I review the settings that matter: - Which content types, taxonomies, and archives appear in sitemaps and which are noindexed. - Title and description templates per post type, with sensible fallbacks. - Schema settings for the organization or person behind the site, and per post type. - Breadcrumbs, redirects, and 404 monitoring. - Conflicts when two SEO plugins, or a theme and a plugin, both write the same tags. ## Common WordPress problems - **Attachment pages indexed** as thin pages for every image ever uploaded. - **Tag and category archives** that duplicate each other and outnumber real content. - **"Discourage search engines" left checked** after launch. - **Page builder bloat** from Elementor, Divi, WPBakery, or Avada, adding layers of markup and scripts. - **Plugins nobody remembers installing**, each loading assets on every page. - **Mixed content and redirect loops** after an HTTPS change. - **Spam pages** left behind by an old hack, still indexed. ## Performance on WordPress A page cache, image compression, script deferral, database cleanup, and a CDN fix most slow WordPress sites. I configure WP Rocket, LiteSpeed Cache, or W3 Total Cache, test that caching doesn't serve the wrong canonical or a logged-in view to crawlers, and connect Cloudflare where it helps. More on speed under [Core Web Vitals and Cloudflare](https://christopherabraham.com/services/site-speed/). ## WooCommerce Product and category templates, faceted navigation, out-of-stock handling, and product schema are covered under [ecommerce SEO](https://christopherabraham.com/services/ecommerce-seo/). ## How I work safely I work with an editor or administrator role as the job requires, on a staging copy when one exists. Before changing plugin settings I export them, and every change goes in a written log so it can be undone. Theme edits go into a child theme, never the parent. If the site has no backups, setting them up comes first. ## Access I'll ask for An administrator login for configuration work, or an editor login for content-only work, plus hosting or staging access when caching and server settings are in scope. ## Older installs I'm comfortable inside a fifteen-year-old WordPress site with a custom theme nobody can explain. The goal is to make it sound for search without breaking what works, and to tell you honestly when a rebuild would cost less than another round of patches. An example of what goes wrong when the SEO plugin is switched off: [recovering a WooCommerce store's indexing](https://christopherabraham.com/case-studies/plugin-outage/). Updated October 6, 2026 --- Source: https://christopherabraham.com/services/ecommerce-seo/ Updated: 2026-10-06 # Ecommerce SEO Online stores have the hardest SEO problems at the largest scale: thousands of products, filters that multiply URLs, variants, out-of-stock pages, and templates that decide what every product page says. I work on Shopify, WooCommerce, and Magento, and I focus on the templates because that's where one fix improves every page. ## Product pages - Unique titles and descriptions built from product attributes, not the manufacturer's copy pasted onto every retailer's site. - Specifications, FAQs, and reviews present in the server HTML, not hidden behind tabs or scroll triggers that crawlers never trigger. - Product schema with price, availability, brand, GTIN or MPN, and real review data, emitted once, without a duplicate block from the theme. - Variant handling that avoids a separate indexable URL for every color and size unless each one earns search traffic. - A clear policy for out-of-stock and discontinued products: keep, redirect, or retire. ## Category pages Category pages often carry the most valuable non-brand searches. I look at their copy, internal links, pagination, and the faceted filters that can create millions of crawlable URL combinations. The right filters become indexable landing pages; the rest are kept out of the crawl. ## Platform notes ### Shopify Duplicate product paths under collections, theme-generated schema, apps that inject scripts, and the limits on what you can change in robots.txt and URL structure. I work in a duplicated theme first and publish only after review. ### WooCommerce Plugin conflicts, attribute archives, slow queries on large catalogs, and SEO plugin settings for products and taxonomies. ### Magento 2 and Hyvä Layered navigation, configurable products, and the Alpine.js patterns in Hyvä themes that can keep product content out of the rendered page. ## Migrations between platforms Store replatforms leave a trail of old product URLs, image paths, and collection structures. I build the redirect map from the old catalog, then clean up 404s and duplicates after launch. See [migrations](https://christopherabraham.com/services/migrations/). ## Shopping and AI results Product schema and a clean Merchant Center feed help products appear in Google's shopping surfaces. The same clear product facts help AI assistants answer "what's the best..." questions with your products in the list. ## Reviews and user content Customer reviews are some of the most useful text on a product page, for shoppers and for crawlers alike. I check that review apps render their content in the HTML rather than in a late-loading widget, that rating markup reflects the reviews actually shown, and that question-and-answer sections are crawlable. Done right, reviews add fresh, specific language to pages that would otherwise carry only the manufacturer's description. ## Revenue first I prioritize by revenue, not page count: the categories and products that earn the most get attention first, and seasonal pages go live early enough to be indexed before the rush. Changes that risk volatility are scheduled outside your peak season. Two stores I've worked on: [a Magento retailer whose product content never rendered for Googlebot](https://christopherabraham.com/case-studies/scroll-gated-products/) and [a specialty shop cleaning up after a move to Shopify](https://christopherabraham.com/case-studies/shopify-cleanup/). Updated October 6, 2026 --- Source: https://christopherabraham.com/services/local-seo/ Updated: 2026-10-06 # Local SEO and Google Business Profile For a business people visit, or one that visits them, the map pack and the local results matter more than anything else on the page. Local visibility depends on three things agreeing with each other: your Google Business Profile, your website, and the rest of the web. ## Profile, website, and citations, aligned - **Google Business Profile.** The right primary and secondary categories, services and products, hours, attributes, photos, and a description written for people. Q&A and review responses managed consistently. - **Location pages.** One strong page for each location, with its own address, hours, directions, staff, and services. Each profile links to its own location page, not the home page. - **Structured data.** LocalBusiness schema for each location, connected to the parent organization. - **Name, address, and phone.** The same everywhere: website, profiles, directories, and social accounts. Mismatches are among the most common causes of local trouble. - **Service areas.** City and region pages that are genuinely about each place, not copies with the town name swapped. ## Multi-location businesses When a brand grows from one location to several, search engines often keep confusing the brand with its first location. I separate them: the organization as the parent, each location as a branch, each with its own page and profile. Town pages and profiles get clear jobs so they support each other instead of competing. ## Hard cases Suspended profiles, verification loops, duplicate listings, profiles stuck between live and pending, and ownership lost with a former employee or agency. These cases take investigation: reconstructing what happened, matching the profile to verifiable facts, and building an appeal where the strongest evidence comes first and nothing is claimed that the documents can't support. Google decides these cases on its own timeline, and its support is slow and inconsistent. So hard cases start as a paid, written diagnostic: what happened, what Google will want to see, and whether there's a viable path. The appeal or remediation is scoped separately once that's clear. ## Timing and caution Some changes, such as editing a business name or switching primary categories, can trigger reverification or a suspension. I plan those changes deliberately, away from your busiest season, and document the before state so it can be restored. ## Reviews Review count, rating, recency, and the owner's replies all shape local visibility and, more importantly, whether someone calls. I help set up a steady, policy-compliant way to ask happy customers for reviews, write reply templates that sound human, and flag reviews that break Google's rules for removal requests. ## Measuring local Profile performance data, calls and direction requests, local pack positions measured on a grid around each location, and organic traffic to location pages. I set a baseline first so progress can be measured. See [a therapy practice's suspended profile reinstated](https://christopherabraham.com/case-studies/profile-reinstated/) and [a multi-state brand untangled from its first showroom](https://christopherabraham.com/case-studies/closet-locations/). Updated October 6, 2026 --- Source: https://christopherabraham.com/services/seo-retainer/ Updated: 2026-10-06 # Monthly SEO retainer After the audit and the big fixes, sites drift. Plugins update, developers ship new templates, editors publish pages without descriptions, and Google changes what it rewards. A retainer keeps a senior consultant watching your site every month and fixing problems while they're still small. ## What a month includes - **Monitoring.** Search Console and Bing Webmaster Tools for indexing changes, crawl errors, manual actions, and Core Web Vitals; analytics for unusual drops; uptime and redirect checks on key pages. - **A monthly crawl.** Compared with last month's, so new 404s, redirect chains, duplicate titles, and noindex tags are caught within weeks of appearing. - **Hands-on fixes.** Metadata, redirects, schema, internal links, and plugin or Cloudflare settings, within the hours on the retainer. - **Developer QA.** I review releases that touch templates, routing, or head tags, before they ship when possible and right after when not. - **Content support.** Briefs for new pages, edits for SEO, and refreshes of pages that are slipping. - **AI search checks.** A stable set of prompts run across the major assistants, tracked over time. - **A report.** One page in plain English: what changed, what I did, what I recommend next, and the handful of numbers that matter. ## Who it suits - Businesses without an in-house SEO, whose website is a real source of customers. - Marketing teams that want a senior specialist on call without a full-time hire. - Development teams that want someone to catch SEO regressions before they ship. - Agencies that need technical SEO depth behind their own client work. ## How it's structured A retainer covers a set number of hours each month, agreed in advance and billed at the start of the month, or run as a weekly hourly contract on Upwork. Priorities are set together at the start of each month and adjusted when something urgent comes up. Unused hours don't roll over indefinitely; if months run consistently light, I'll suggest a smaller plan. ## Starting a retainer Retainers usually follow an [audit](https://christopherabraham.com/services/seo-audit/), so the first month starts with a plan rather than discovery. If you already have a recent, solid audit from someone else, I'll review it and start from there. ## Monthly priorities The first week of each month starts with a short written plan: the three to five things I'll focus on, why, and what you'll need to approve. Midmonth surprises, such as a sudden drop or a broken release, take priority, and the plan is adjusted in writing. ## Communication Requests and updates happen in writing, in Upwork, email, or your project tool, so there's always a record of what was asked and what was done. A monthly call to walk through the report is included for anyone who wants one. ## Ending a retainer Either side can end a retainer at the end of any month. When it ends, you get a handover note listing what's in progress, what to watch, and where every login and setting stands, and I remove my access. Updated October 6, 2026 --- Source: https://christopherabraham.com/guides/ Updated: 2026-10-06 # SEO guides These eighteen guides cover the questions clients ask me most, written so you can act on them yourself. Each one is self-contained, with links to related guides and to the glossary for terms. ## Indexing and audits - [How to read the Page indexing report in Search Console](https://christopherabraham.com/guides/page-indexing-report/): what each exclusion reason means, which ones matter, and how to trace a count back to the template behind it. - [What a technical SEO audit should give you](https://christopherabraham.com/guides/seo-audit-deliverables/): how to tell a useful audit from a tool export, before and after you pay for one. ## AI search and structured data - [The AI search readiness checklist](https://christopherabraham.com/guides/ai-search-checklist/): crawler access, server-rendered content, entities, answer-shaped pages, llms.txt, and measurement. - [The schema markup a small business actually needs](https://christopherabraham.com/guides/small-business-schema/): five types, example JSON-LD, and the rules that keep it accurate. ## Migrations and performance - [Ten rules for 301 redirects that keep your rankings](https://christopherabraham.com/guides/redirect-rules/): inventories, one-to-one maps, chains, 410s, and bulk testing. - [Core Web Vitals in plain English](https://christopherabraham.com/guides/core-web-vitals/): LCP, INP, and CLS, field versus lab data, and the fixes that usually work. ## Your name, your entity, and AI answers - [How to correct what AI search says about you](https://christopherabraham.com/guides/correct-ai-answers/): trace each wrong fact to its source and publish corrections that stick. - [One person, two names](https://christopherabraham.com/guides/two-names-one-entity/): connecting a nickname, pen name, or formal name into a single entity with schema and sameAs. - [Proving expertise with third-party sources](https://christopherabraham.com/guides/third-party-proof/): alumni news, vendor case studies, old team pages, and bylines as evidence. - [How to write an About page that search engines and AI trust](https://christopherabraham.com/guides/about-page-ai/): current work first, verifiable facts, and no guesswork. ## Domains, DNS, and files for machines - [Launch a site on a parked domain](https://christopherabraham.com/guides/parked-domain-launch/): Cloudflare DNS, GitHub Pages, HTTPS, and the caching trap. - [Lock down a domain that never sends email](https://christopherabraham.com/guides/non-sending-domain/): null MX, SPF, DMARC, and an empty DKIM key. - [What happens to your old domains when they lapse](https://christopherabraham.com/guides/lapsed-domains/): drop catchers, redirects to strangers, and how to protect yourself. - [How to write an llms.txt file](https://christopherabraham.com/guides/llms-txt/): the format, Markdown copies, llms-full.txt, and robots rules. - [Meta keywords in 2026](https://christopherabraham.com/guides/meta-keywords/): ignored by Google, risky when stuffed, and how to use them honestly. - [Website accessibility without overlays](https://christopherabraham.com/guides/accessible-websites/): the WCAG essentials and how to test them yourself. - [Accessibility as SEO](https://christopherabraham.com/guides/accessibility-seo-dividends/): how each WCAG fix pays off in rankings, AI answers, browsing agents, and trust. - [The Lynx test](https://christopherabraham.com/guides/lynx-test/): see your site the way search engines and AI crawlers read it, in a text-only browser. ## Reference - [Glossary of SEO and AI search terms](https://christopherabraham.com/guides/glossary/): short definitions of the vocabulary used across this site, from AEO to XML sitemap. ## Stay current New and updated guides appear in the [Atom feed](https://christopherabraham.com/feed.xml). AI tools can read every guide as Markdown through [llms.txt](https://christopherabraham.com/llms.txt). ## When a guide isn't enough If you've worked through a guide and the problem is still there, that's usually the point where a second set of eyes on the actual site helps. Every engagement begins with a scoped audit; see the [services](https://christopherabraham.com/services/) or [get in touch](https://christopherabraham.com/contact/). Updated October 6, 2026 --- Source: https://christopherabraham.com/guides/page-indexing-report/ Updated: 2026-10-06 # How to read the Page indexing report in Search Console By [Christopher Abraham](https://christopherabraham.com/about/) · Published October 6, 2026 The Page indexing report is the closest thing Google gives you to a list of its decisions about your site. It's also easy to misread. This guide explains what each reason means, which ones deserve worry, and how to get from a scary number to the one template causing it. ## Where to find it In Google Search Console, open **Indexing**, then **Pages**. The chart shows indexed and not-indexed URLs over time. Below it, the table "Why pages aren't indexed" lists each reason with a count. Click any reason to see example URLs and a trend for that reason alone. ## Rule one: not indexed isn't always bad A healthy site always has excluded URLs. Redirects, deliberate noindex tags, parameter variants pointing to a canonical, and old 404s all belong outside the index. The question is never "why is this number above zero?" It's "are any pages I need in the index sitting in this list?" ## The reasons, sorted by how much attention they deserve ### Usually fine - **Page with redirect.** The URL redirects elsewhere. Expected after any migration. Check only that the targets are indexed. - **Alternate page with proper canonical tag.** Google accepted your canonical. Fine when the canonical is the page you intended. - **Not found (404).** Pages that no longer exist. Fine unless they have links or traffic, in which case they deserve a 301. - **Excluded by "noindex" tag.** Fine if you put the noindex there on purpose. Scan the examples for pages you didn't mean to hide. ### Worth a look - **Blocked by robots.txt.** Check that no important section or resource is disallowed. A blocked CSS or JavaScript file can break rendering for the pages that need it. - **Duplicate without user-selected canonical.** Google found near-identical pages and you didn't say which one is primary. Add canonicals or consolidate. - **Duplicate, Google chose different canonical than user.** Google disagreed with your canonical. Look for internal links, sitemaps, or redirects that point at the other version. - **Soft 404.** The page returns a success code but looks empty: an out-of-stock product with no content, an empty search result, a client-side "not found" screen. - **Server error (5xx).** Google got an error when it tried. Even occasional errors slow crawling. Check hosting, firewalls, and rate limits. ### Usually where the real problem is - **Crawled, currently not indexed.** Google fetched the page and decided it wasn't worth indexing. On a site with good content, this is often a rendering problem: the text you see isn't in what Google receives. - **Discovered, currently not indexed.** Google knows the URL exists but hasn't fetched it. Common on large sites with weak internal linking, slow servers, or floods of low-value URLs competing for crawl attention. ## From a count to a cause 1. **Export the examples.** Each reason lists up to 1,000 example URLs. Export them. 2. **Group by pattern.** Sort by URL path. You'll usually see the problem cluster in one directory or page type, such as /product/, /tag/, or /events/. 3. **Inspect a sample.** Run URL Inspection on five or six from the cluster, then click **Test live URL** and **View tested page**. Compare the rendered HTML and screenshot with what a visitor sees. 4. **Check the content made it.** Search the rendered HTML for a sentence from the page's main content. If it's missing, you've found a rendering problem. 5. **Check the signals.** Canonical, robots meta tag, status code, and whether the page is in your sitemap and linked from other pages. 6. **Compare with a healthy page.** Find a page of the same type that is indexed. Whatever differs between the two is your lead. ## Make the report work for you Submit separate XML sitemaps for each page type: products, categories, articles, locations. Then filter the Page indexing report by sitemap. Instead of one blended number, you see that 96% of articles are indexed and 41% of products are not, which tells you exactly where to look. ## Mind the lag The report updates days behind reality, and counts can move in steps rather than smoothly. After a fix, check individual URLs with the live test rather than waiting for the chart. When you've fixed a cluster, use **Validate fix** on that reason, and Google will recheck the examples and report progress. ## Check Bing too Bing Webmaster Tools has its own URL Inspection and index coverage reports. When Bing indexes pages Google won't, the difference often points straight at the cause, because the two crawlers render JavaScript and apply consent and robots rules differently. ## When to get help If the cause isn't obvious after a few inspections, or if important pages keep falling out, a structured diagnosis saves time. See [indexing repair](https://christopherabraham.com/services/indexing/), or a real example where [a consent tool caused the exclusions](https://christopherabraham.com/case-studies/consent-banner/). ## Sources - [Search Console Help: Page indexing report](https://support.google.com/webmasters/answer/7440203) - [Google Search Central: How to specify a canonical URL](https://developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls) - [Bing Webmaster Guidelines](https://www.bing.com/webmasters/help/webmaster-guidelines-30fba23a) **[Christopher Abraham](https://christopherabraham.com/about/)** is an independent SEO consultant in Arlington, Virginia, Top Rated on Upwork with 100% Job Success, who writes from his own client work and checks every claim against primary sources. He has built websites since 1994 and practiced SEO since 1998. [How these pages are written](https://christopherabraham.com/about/editorial-policy/) · [LinkedIn](https://www.linkedin.com/in/chrisabraham) · [Upwork](https://www.upwork.com/freelancers/chrisjabraham) --- Source: https://christopherabraham.com/guides/ai-search-checklist/ Updated: 2026-10-06 # The AI search readiness checklist By [Christopher Abraham](https://christopherabraham.com/about/) · Published October 6, 2026 AI assistants answer questions by retrieving pages, reading them quickly, and quoting what's clear. This checklist covers what has to be true for your site to be retrieved, understood, and cited. Work through it in order; the early items block everything after them. ## 1. Can AI crawlers reach you? - **robots.txt** allows the crawlers you want. The main ones: GPTBot and OAI-SearchBot (OpenAI), ClaudeBot and Claude-SearchBot (Anthropic), PerplexityBot, Google-Extended (Gemini training), Applebot-Extended, Bingbot (which also feeds Copilot), and CCBot (Common Crawl). - **Your CDN and firewall** let them through. Cloudflare, Sucuri, and hosting firewalls can block AI crawlers by default, regardless of robots.txt. Check the setting and check the logs. - **Pages respond quickly** and without errors. Retrieval systems working against a time limit skip slow pages. Blocking AI crawlers is a legitimate business choice. Just make it deliberately, knowing that a blocked site can't be cited. ## 2. Is your content in the HTML? - Fetch a key page with scripts turned off, or use "View source." Is the main text there? - No important content hidden behind tabs, accordions, or "load more" buttons that require JavaScript to populate. - Prices, specifications, hours, and addresses in text, not only in images or PDFs. Googlebot renders JavaScript. Most AI crawlers don't. If the answer isn't in the HTML, most assistants will never see it. ## 3. Do machines know who you are? - **Organization or LocalBusiness schema** on the home page, with your legal name, logo, address, phone, and founding date. - **sameAs links** from that schema to your official profiles: LinkedIn, Crunchbase, Wikipedia or Wikidata if you have them, and major directories. - **Person schema** for founders and authors whose expertise matters. - **One description, everywhere.** The same name, the same one-sentence description, and the same facts on your site, your profiles, and directories. - An **About page** that states plainly who you are, what you do, where, since when, and for whom. ## 4. Is your content shaped like an answer? - Each important page opens with a direct, one- or two-sentence answer to its main question. - Sections are self-contained. A paragraph pulled out alone still makes sense, without "as mentioned above." - Terms are defined where they're used. A glossary page helps. - Specific numbers, dates, and names are stated rather than implied: prices, sizes, service areas, years. - FAQs are written around questions your customers actually ask, with the answers visible on the page. - Comparison pages are fair. Assistants are more willing to cite a balanced comparison than a sales pitch. - Pages show who wrote them and when they were last updated. ## 5. Have you published files for machines? - **XML sitemap** with accurate last-modified dates, submitted to Google and Bing. - **IndexNow** enabled, so Bing learns about changes within minutes. - **llms.txt** at your site root: a short Markdown summary of who you are with links to your most important pages. It's an emerging convention, inexpensive to add, and some AI tools already read it. - Optionally, clean Markdown versions of key pages linked from llms.txt. ## 6. Does the rest of the web agree? - Your Google Business Profile, Bing Places listing, and Apple Business Connect are complete and consistent. - Industry directories and review sites list current information. - You know which third-party pages assistants cite when they answer questions in your category, and whether you appear on them. - Outdated or wrong information elsewhere has been corrected at the source where possible. ## 7. Are you measuring it? - A fixed set of 20 to 50 prompts your buyers would ask, run across ChatGPT, Perplexity, Gemini, Claude, Copilot, and Google's AI Overviews. - The same prompts repeated monthly. Answers vary, so trends matter more than any single answer. - For each run: whether you appear, how you're described, whether facts are correct, and which sources are cited. - AI assistant referrals segmented in GA4, using referrers such as chatgpt.com, perplexity.ai, gemini.google.com, and copilot.microsoft.com. ## Where to start If you only do three things this month, make them these: confirm crawlers can reach you, confirm your main content is in the HTML, and make your About page and Organization schema say exactly who you are. Everything else builds on those. For help running the checklist against your own site, see [AI SEO, GEO, and AEO](https://christopherabraham.com/services/ai-search/). Terms used here are defined in the [glossary](https://christopherabraham.com/guides/glossary/). ## Sources - [Google Search Central: AI features and your website](https://developers.google.com/search/docs/appearance/ai-features) - [OpenAI: Overview of OpenAI crawlers](https://platform.openai.com/docs/bots) - [Google Search Central: Introduction to robots.txt](https://developers.google.com/search/docs/crawling-indexing/robots/intro) - [The llms.txt proposal](https://llmstxt.org/) - [IndexNow](https://www.indexnow.org/) **[Christopher Abraham](https://christopherabraham.com/about/)** is an independent SEO consultant in Arlington, Virginia, Top Rated on Upwork with 100% Job Success, who writes from his own client work and checks every claim against primary sources. He has built websites since 1994 and practiced SEO since 1998. [How these pages are written](https://christopherabraham.com/about/editorial-policy/) · [LinkedIn](https://www.linkedin.com/in/chrisabraham) · [Upwork](https://www.upwork.com/freelancers/chrisjabraham) --- Source: https://christopherabraham.com/guides/seo-audit-deliverables/ Updated: 2026-10-06 # What a technical SEO audit should give you By [Christopher Abraham](https://christopherabraham.com/about/) · Published October 6, 2026 You can buy an SEO audit for fifty dollars or fifteen thousand. The cheap ones and some of the expensive ones are the same thing: a crawler's warnings pasted into a document. This guide describes what a useful audit contains, so you can judge one before you pay for it and after you receive it. ## It starts with a question A useful audit answers something specific. "Why did organic revenue from product pages fall 30% since May?" "What is at risk in a move to Shopify?" "Why are half the location pages not indexed?" The question decides what gets examined and how deeply. An audit with no question examines everything at the same shallow depth and concludes nothing. **How to judge it:** the first page should restate your question. If it opens with a score out of 100, be wary. ## Findings come with evidence Every finding should show how the auditor knows it: a screenshot of the rendered HTML missing the product description, a Search Console export showing which pages dropped, a crawl comparison, server response headers, a log excerpt. Evidence lets your developers verify the finding themselves, and it protects you from fixing things that were never broken. **How to judge it:** pick any finding and ask, "How is this known?" The answer should already be on the page. ## Findings explain the mechanism "Product pages have low word count" is a symptom. "Product specifications and reviews are mounted by a script that runs only when a visitor scrolls, so crawlers receive 300 words of a 3,000-word page" is a mechanism. Mechanisms tell you what to fix. Symptoms tell you to go find someone who can explain them. ## Separate problems stay separate Traffic losses often coincide with several things at once: an algorithm update, a plugin change, a backlink spike, a redesign. A good audit treats each as its own line of inquiry and says which ones the evidence actually connects to the loss. Folding everything into one story feels satisfying and leads to fixing the wrong thing. ## Confidence is stated Not every finding is certain. Good auditors say which conclusions are confirmed, which are likely, and which need more data, and they say what data would settle it. An audit that's equally sure of everything has probably not tested much. ## The plan is ranked You should finish the audit knowing what to do first. That means a prioritized list, often P0 through P3, where each item has: - the problem, in one sentence; - the expected impact, and on which pages; - an owner, such as your developer, your content editor, or the consultant; - a rough effort estimate; - dependencies, if one fix must come before another. **How to judge it:** could your team start work Monday morning without another meeting? ## Developers get tickets they can build from For anything that requires code, a strong audit includes developer-ready tickets: what to change, where, exact steps where possible, and acceptance criteria that say how everyone will know it's done. "Event links must be present as anchor elements in the server HTML of /events/" is testable. "Improve crawlability" isn't. ## Leadership gets a summary A one-page plain-English summary: what's wrong, what it's costing, what it will take, and what to expect afterward. The people who approve the budget shouldn't need to read crawl data to make a decision. ## What a useful audit leaves out - Hundreds of low-priority warnings with no ranking. Missing alt text on a footer logo isn't why traffic fell. - Generic best-practice sections copied between clients. - Guarantees about rankings. Nobody controls Google's decisions. - Proprietary scores that can't be traced back to evidence. ## After delivery The audit's value shows up when fixes ship. Ask whether the auditor will verify the fixes against the acceptance criteria, check the live site after deployment, and watch the relevant reports. An audit followed by verification turns findings into results. ## Questions to ask before you hire 1. What question will this audit answer? 2. Can I see an anonymized sample? 3. Who does the actual analysis? 4. Will findings include evidence and confidence? 5. Will developers get tickets with acceptance criteria? 6. Will you verify the fixes? My own approach is described under [technical SEO audit](https://christopherabraham.com/services/seo-audit/). A worked example: [the scroll-gated product pages case](https://christopherabraham.com/case-studies/scroll-gated-products/). ## Sources - [Google Search Central: Creating helpful, reliable, people-first content](https://developers.google.com/search/docs/fundamentals/creating-helpful-content) - [Google Search Central: SEO Starter Guide](https://developers.google.com/search/docs/fundamentals/seo-starter-guide) - [Google Search Quality Rater Guidelines (PDF)](https://services.google.com/fh/files/misc/hsw-sqrg.pdf) **[Christopher Abraham](https://christopherabraham.com/about/)** is an independent SEO consultant in Arlington, Virginia, Top Rated on Upwork with 100% Job Success, who writes from his own client work and checks every claim against primary sources. He has built websites since 1994 and practiced SEO since 1998. [How these pages are written](https://christopherabraham.com/about/editorial-policy/) · [LinkedIn](https://www.linkedin.com/in/chrisabraham) · [Upwork](https://www.upwork.com/freelancers/chrisjabraham) --- Source: https://christopherabraham.com/guides/small-business-schema/ Updated: 2026-10-06 # The schema markup a small business actually needs By [Christopher Abraham](https://christopherabraham.com/about/) · Published October 6, 2026 Schema.org has more than 800 types. A typical small business needs about five. This guide covers which ones, shows example code, and lists the rules that keep structured data accurate enough for Google and AI systems to trust. ## Why bother Structured data states your facts in a format machines don't have to guess at. It can earn rich results in Google, such as review stars, FAQs, and breadcrumbs, and it helps search engines and AI assistants connect your business, its location, and its services into one clear entity. It won't rescue a weak page, but it makes a good page unambiguous. ## The five you need ### 1. LocalBusiness or Organization, on the home page Use the most specific LocalBusiness subtype that fits: Dentist, Plumber, LegalService, Restaurant, HomeAndConstructionBusiness, and so on. If customers never visit you and you don't serve a defined area, use Organization instead. ``` ``` The `@id` is a permanent identifier for the business. Use the same one on every page that refers to it. ### 2. Service, on each service page ``` { "@context": "https://schema.org", "@type": "Service", "name": "Water heater replacement", "provider": { "@id": "https://example.com/#business" }, "areaServed": "Arlington, VA", "url": "https://example.com/water-heaters/" } ``` The provider points back to the business by its `@id`, connecting each service to the company that offers it. ### 3. BreadcrumbList, on every page below the home page Describes where the page sits in your site. Most SEO plugins generate this automatically if breadcrumbs are turned on. ### 4. FAQPage, only where questions are visible Mark up FAQs only when the questions and answers are visible on the page. Google shows FAQ rich results for few sites now, but the markup still helps AI systems match your answers to questions. ### 5. Person, for the owner or practitioner If customers choose you partly because of who you are, such as a lawyer, therapist, consultant, or chef, add Person markup on the About page with name, job title, image, and sameAs links to professional profiles, connected to the business with `worksFor`. ## Add if they apply - **Product and Offer** if you sell products online. - **Article or BlogPosting** on blog posts, with author and dates. - **Event** for classes, workshops, or performances with dates. - **Review** markup only for reviews that are visible on the page. Self-serving review stars on your own business are ignored by Google. ## The rules 1. **Match the page.** Everything in the markup should be visible to visitors. Hidden facts in schema get ignored or penalized. 2. **Match the world.** Name, address, and phone should match your Google Business Profile exactly. 3. **One source of truth.** Don't let a theme, an SEO plugin, and a reviews app each output their own business markup. Pick one. 4. **Keep it current.** Hours, prices, and addresses change. Hardcoded markup goes stale; markup generated from your CMS fields stays accurate. 5. **Validate.** Test every template in Google's Rich Results Test and the Schema.org validator, then watch Search Console's enhancement reports. ## How to add it On WordPress, Yoast SEO and Rank Math generate Organization, WebSite, Breadcrumb, and Article markup and let you add more. On Shopify, the theme usually outputs Product markup; check for duplicates before adding an app. On Squarespace and Wix, add JSON-LD through code injection or the platform's SEO settings. On custom sites, generate it from the same data that renders the page. ## A five-minute self-check 1. Paste your home page address into Google's Rich Results Test and note every type it detects. 2. Open the Schema.org validator on the same page and look for duplicates: two Organization or LocalBusiness blocks usually mean a theme and a plugin are both writing markup. 3. Compare the name, address, and phone in the markup with your Google Business Profile, character by character. 4. Repeat on one service page and one blog post. 5. In Search Console, open the Enhancements section and check for errors and warnings on each detected type. If all five checks come back clean, your structured data is in better shape than most. ## Multiple locations With more than one location, the home page describes the Organization, and each location page describes its own LocalBusiness with `parentOrganization` pointing to it. Never describe the company and its first location as the same entity. For help with markup that validates and stays accurate, see [schema markup and entity SEO](https://christopherabraham.com/services/schema/). ## Sources - [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) - [Schema.org: Person](https://schema.org/Person) **[Christopher Abraham](https://christopherabraham.com/about/)** is an independent SEO consultant in Arlington, Virginia, Top Rated on Upwork with 100% Job Success, who writes from his own client work and checks every claim against primary sources. He has built websites since 1994 and practiced SEO since 1998. [How these pages are written](https://christopherabraham.com/about/editorial-policy/) · [LinkedIn](https://www.linkedin.com/in/chrisabraham) · [Upwork](https://www.upwork.com/freelancers/chrisjabraham) --- Source: https://christopherabraham.com/guides/redirect-rules/ Updated: 2026-10-06 # Ten rules for 301 redirects that keep your rankings By [Christopher Abraham](https://christopherabraham.com/about/) · Published October 6, 2026 A 301 redirect tells browsers and search engines that a page has moved permanently and where to find it. Handled well, redirects carry rankings, links, and bookmarks to a new address. Handled carelessly, they quietly erase years of search equity. These are the rules I follow on every migration. ## 1. Inventory before you redirect You can't redirect URLs you don't know about. Build the old URL list from several sources: a full crawl, every XML sitemap, Search Console's performance and indexing exports, analytics landing pages over at least a year, and backlink tools. Old campaign pages and PDFs that nobody links from the menu often carry the most external links. ## 2. Map one to one, to the closest equivalent Each old URL should point to the new page that best serves the same visitor. A product goes to the same product, a category to the same category, an article to its new address. When the content is merged, point to the merged page. ## 3. Don't send everything to the home page Redirecting hundreds of old pages to the home page is easy and almost worthless. Google treats irrelevant redirects as soft 404s, and the equity those pages carried is lost. If there's no real equivalent, use rule 6. ## 4. Use 301 or 308 for permanent moves A 301 (or 308, which also preserves the request method) signals a permanent move. A 302 or 307 says "temporarily elsewhere," and search engines may keep the old URL indexed. Meta refresh and JavaScript redirects work in some cases, but server-side redirects are the clear signal. ## 5. No chains, no loops Each redirect should go straight to the final destination in one hop. Chains build up over years: http to https, then www to apex, then old path to new path. Every hop adds delay and risks the crawler giving up. When you add new redirects, update the old ones to point at the final URL. ## 6. Use 410 deliberately For pages that are gone for good with no replacement, a 410 status says so plainly and gets them dropped from the index faster than a 404. Use it for retired products with no successor, expired events, and spam pages left from a hack. ## 7. Keep redirects for years Search engines need time to process a move, and links, bookmarks, and old emails keep sending visitors for years. Keep redirects in place for at least a year, and for valuable URLs, indefinitely. Removing them to "clean up" the configuration is a common way to lose traffic a second time. ## 8. Update everything that points at old URLs Redirects are a safety net, not the plan. Update internal links, canonical tags, hreflang annotations, XML sitemaps, structured data, and your Google Business Profile website link to point directly at new URLs. Ask the sites that link to you most to update their links too. ## 9. Preserve parameters and casing on purpose Decide how query strings, trailing slashes, and uppercase URLs are handled. Tracking parameters should usually pass through; old filter parameters may need their own rules. Test a handful of odd real URLs from your logs, not just the clean ones. ## 10. Test in bulk, then watch Before launch, run the full old URL list against staging and confirm each returns one 301 to the expected destination, which then returns 200. Repeat on launch day against production. Afterward, watch 404 reports in Search Console and Bing Webmaster Tools, your server logs, and traffic by page group for several weeks. ## Where redirects live - **Apache:** .htaccess or the virtual host configuration. - **Nginx:** server blocks with return 301 or map files for large lists. - **WordPress:** Rank Math, Yoast Premium, or the Redirection plugin, or the server for large maps. - **Shopify:** URL Redirects under Navigation, with CSV import. - **Netlify and Vercel:** _redirects files or the platform's configuration file. - **Cloudflare:** Bulk Redirects or Redirect Rules at the edge, useful when the origin can't do it. - **GitHub Pages and other static hosts:** no server redirects, so a page with a meta refresh and a canonical tag is the fallback. ## A note on disavow files Migrations are a common moment to review backlinks. Disavow only genuinely manipulative or spammy links, and keep legitimate ones; disavowing good links throws away the equity your redirects are trying to preserve. For a full move, see [site migrations and 301 redirects](https://christopherabraham.com/services/migrations/), or [a clinic's redirect decisions URL by URL](https://christopherabraham.com/case-studies/clinic-migration/). ## Sources - [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) - [Google Search Central: How to specify a canonical URL](https://developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls) **[Christopher Abraham](https://christopherabraham.com/about/)** is an independent SEO consultant in Arlington, Virginia, Top Rated on Upwork with 100% Job Success, who writes from his own client work and checks every claim against primary sources. He has built websites since 1994 and practiced SEO since 1998. [How these pages are written](https://christopherabraham.com/about/editorial-policy/) · [LinkedIn](https://www.linkedin.com/in/chrisabraham) · [Upwork](https://www.upwork.com/freelancers/chrisjabraham) --- Source: https://christopherabraham.com/guides/core-web-vitals/ Updated: 2026-10-06 # Core Web Vitals in plain English By [Christopher Abraham](https://christopherabraham.com/about/) · Published October 6, 2026 Core Web Vitals are Google's three measurements of how a page feels to a real person: how fast it shows up, how quickly it responds, and whether it holds still. They're a modest ranking factor and a large conversion factor. Here's what each one means and what usually fixes it. ## The three measurements ### Largest Contentful Paint (LCP): does it show up fast? The time until the biggest thing in the first screen, usually a hero image or headline, finishes appearing. **Good: 2.5 seconds or less.** Poor: over 4 seconds. ### Interaction to Next Paint (INP): does it respond fast? How long the page takes to visibly react when someone taps, clicks, or types, measured across the visit and reported near the worst case. **Good: 200 milliseconds or less.** Poor: over 500. Google swapped INP in for the older First Input Delay metric in March 2024. ### Cumulative Layout Shift (CLS): does it hold still? How much content jumps around while the page loads, the effect that makes you tap the wrong button. **Good: 0.1 or less.** Poor: over 0.25. ## Field data versus lab data This confuses almost everyone. **Field data** comes from real Chrome users visiting your site over the past 28 days, collected in the Chrome UX Report. It's what Google uses for ranking and what Search Console's Core Web Vitals report shows. A page passes when 75% of visits meet the "good" threshold. **Lab data** is a single simulated test, like the score at the top of PageSpeed Insights or Lighthouse in your browser. It's useful for diagnosing causes, but it isn't the number Google judges you on. A site can score 95 in the lab and fail in the field because real visitors use slower phones and networks, or the reverse. In PageSpeed Insights, the section titled "Discover what your real users are experiencing" is field data. Start there. ## Common causes and fixes ### Slow LCP - **Huge hero images.** Serve correctly sized images in WebP or AVIF, with srcset for different screens. - **Lazy-loaded hero image.** Lazy loading the main image delays it. Load it eagerly and add fetchpriority="high". - **Slow server response.** Add page caching, upgrade from overloaded shared hosting, or cache HTML at a CDN. - **Render-blocking CSS and JavaScript.** Defer scripts that aren't needed for the first screen and remove unused stylesheets. - **Content drawn by JavaScript.** If the main content waits for a script, render it on the server instead. ### Poor INP - **Too much JavaScript.** Page builders, sliders, and stacks of third-party tags keep the browser busy. Remove what you don't use. - **Heavy third-party scripts.** Chat widgets, session recorders, and ad scripts are common culprits. Load them later or after interaction. - **Long tasks in your own code.** Developers can break up long JavaScript tasks and avoid expensive work in event handlers. ### High CLS - **Images without dimensions.** Always set width and height so the browser reserves space. - **Ads, embeds, and banners** that push content down. Reserve their space in advance. - **Web fonts** that swap late and change text size. Preload key fonts and use matching fallback metrics. - **Cookie banners** inserted at the top of the page. Overlay them instead. ## Where to look 1. **Search Console, Core Web Vitals report.** Groups failing URLs by similar pages, which usually means by template. Fix the template, fix the group. 2. **PageSpeed Insights.** Field data for a URL or the whole origin, plus lab diagnostics pointing at specific resources. 3. **Chrome DevTools, Performance panel.** For developers tracing exactly what blocks rendering or interaction. ## How long until it improves Field data is a rolling 28-day window, so a fix shipped today shows its full effect about four weeks later. Use lab tests to confirm the fix works immediately, then watch field data climb. ## A quick self-check Open Search Console's Core Web Vitals report and note which group of URLs fails and on which metric. Run one example through PageSpeed Insights and read the field data first, then the diagnostics. If the failing metric is LCP, look at the hero image and server response time; if INP, count the third-party scripts; if CLS, look for images without dimensions and late banners. ## Keep it in proportion Core Web Vitals won't lift weak content above strong content. But between comparable pages they can tip the balance, and they always affect whether visitors stay. Fix the templates that carry your revenue first. For hands-on help, see [Core Web Vitals and Cloudflare](https://christopherabraham.com/services/site-speed/). Terms are defined in the [glossary](https://christopherabraham.com/guides/glossary/). ## Sources - [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) **[Christopher Abraham](https://christopherabraham.com/about/)** is an independent SEO consultant in Arlington, Virginia, Top Rated on Upwork with 100% Job Success, who writes from his own client work and checks every claim against primary sources. He has built websites since 1994 and practiced SEO since 1998. [How these pages are written](https://christopherabraham.com/about/editorial-policy/) · [LinkedIn](https://www.linkedin.com/in/chrisabraham) · [Upwork](https://www.upwork.com/freelancers/chrisjabraham) --- Source: https://christopherabraham.com/guides/correct-ai-answers/ Updated: 2026-10-06 # How to correct what AI search says about you By [Christopher Abraham](https://christopherabraham.com/about/) · Published October 6, 2026 Ask an AI assistant about yourself or your company and you'll often get a confident answer that's mostly right and partly invented. You can't edit the answer directly. You can change what the assistant reads, and that changes what it says. ## Why the errors happen AI answers are stitched together from whatever the system retrieves plus whatever it absorbed in training. Three failure patterns cause most of the mistakes I see: - **Name collisions.** Two people or companies share a name, and the assistant blends them. A search for one marketing consultant can pull in a theatre director and an ad-network salesperson with the same name. - **Gap filling.** When sources are thin, the model fills holes with plausible details. A neighborhood called Salt Lake in Honolulu becomes Salt Lake City, Utah, because the city is the more common phrase. - **Stale sources.** An old bio, an expired company page, or a ten-year-old article outranks the current truth because nothing newer says otherwise. ## Step 1: Collect the errors properly Run the same handful of questions across ChatGPT, Perplexity, Gemini, Claude, Copilot, and Google with AI Overviews and AI Mode. Ask the plain questions a stranger would ask: who is this, what do they do, where are they based, what have they done. Save each answer with the date and the sources it cites. Run the set two or three times, because answers vary between runs, and an error that shows up every time matters more than a one-off. ## Step 2: Trace each error to a source Most assistants now show citations. Follow them. For each wrong fact, sort it into one of three buckets: 1. **A real source says it.** Something on the web states the wrong fact. That source has to be fixed or outweighed. 2. **A real source almost says it.** The source is right, but ambiguous, and the assistant misread it. "Salt Lake" without "Honolulu" next to it is an invitation to guess. 3. **Nothing says it.** The assistant invented the detail to fill a gap. The fix is to fill the gap yourself. ## Step 3: Fix what you control first Your own pages carry the most weight, because they're the most authoritative source about you. On your About page: - State the correct facts in plain sentences, with the specific words that remove ambiguity: the full place name, the full company name, the exact role. - Where a mistake is common, correct it explicitly. A line like "Salt Lake, the Honolulu neighborhood, not the city in Utah" gives every crawler the correction in your own words. - Add Person or Organization structured data with your name, alternate names, job title, location, and links to your official profiles. - Keep the page fast and in plain HTML, so crawlers that don't run JavaScript still read every word. ## Step 4: Fix or outweigh other sources For wrong facts on sites you don't control: - **Profiles you own:** update LinkedIn, Upwork, Crunchbase, author bios, speaker pages, and directory listings so they agree with each other. - **Publications:** ask editors to correct factual errors. Most will fix a wrong title or location when you ask politely with evidence. - **Sources you can't change:** publish newer, clearer material that states the correct fact, and earn links to it. Assistants weigh recent, consistent, well-linked sources over a single old page. ## Step 5: Separate yourself from your namesakes If you share a name, make your distinguishing details unmissable: your field, your city, your middle name or initial, and the profiles that are yours. In structured data, use sameAs links to your own profiles and nothing else. Consistent pairing of your name with your field ("Christopher Abraham, SEO consultant") teaches the systems which person you are. ## Step 6: Use the feedback buttons, then wait Every major assistant has a thumbs-down or feedback option. Use it on wrong answers about you, with a short correction and a link to your source. It won't fix anything on its own, but it adds a signal. Then give it time. Retrieval-based answers can change within days of a crawl; facts baked into a model's training change only with the next model. ## Step 7: Re-run the questions monthly Keep the same question set and run it once a month. Track which errors disappear, which persist, and which new ones appear. Persistent errors usually point to a source you haven't found yet. ## What not to do - Don't publish exaggerations to counter errors. The next assistant will repeat those too. - Don't let unverified AI summaries back into your own bio. Check every detail against your own records before you publish it. - Don't flood the web with thin pages repeating your name. A few strong, consistent sources beat dozens of weak ones. For businesses, the full approach is under [AI SEO, GEO, and AEO](https://christopherabraham.com/services/ai-search/). For people, the companion guides are [one person, two names](https://christopherabraham.com/guides/two-names-one-entity/) and [writing an About page AI trusts](https://christopherabraham.com/guides/about-page-ai/). ## Sources - [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) - [Schema.org: Person](https://schema.org/Person) **[Christopher Abraham](https://christopherabraham.com/about/)** is an independent SEO consultant in Arlington, Virginia, Top Rated on Upwork with 100% Job Success, who writes from his own client work and checks every claim against primary sources. He has built websites since 1994 and practiced SEO since 1998. [How these pages are written](https://christopherabraham.com/about/editorial-policy/) · [LinkedIn](https://www.linkedin.com/in/chrisabraham) · [Upwork](https://www.upwork.com/freelancers/chrisjabraham) --- Source: https://christopherabraham.com/guides/two-names-one-entity/ Updated: 2026-10-06 # One person, two names: entity SEO for pen names and nicknames By [Christopher Abraham](https://christopherabraham.com/about/) · Published October 6, 2026 Plenty of professionals work under more than one name: a formal name on a freelance marketplace, a nickname on bylines, a maiden name on old publications, a pen name on fiction. Search engines and AI assistants treat names as clues, not proof. Unless you connect the names deliberately, they may think you're two people, or worse, merge you with a stranger. ## How machines decide who you are Google's Knowledge Graph and the retrieval systems behind AI assistants build an *entity*: a single record for a person, with facts attached. They assemble it from pages that agree with each other. When one page says "Christopher Abraham, SEO consultant in Arlington" and another says "Chris Abraham, SEO and reputation specialist in Arlington," the overlap in field and place suggests one person. Structured data and links turn that suggestion into something close to certainty. ## Pick a primary name for each site Each website should have one primary name for you, used consistently in its headings, bylines, and title tags. A site built for marketplace clients can lead with the name they know from the marketplace; a writing archive can lead with the byline name. Having different primaries on different sites is fine, as long as each site acknowledges the other names somewhere visible. ## Say it in plain words Put a sentence on your About page that names the connection: "Most people know me as Chris, and nearly two decades of my bylines carry that name." Plain text is the strongest signal because every crawler reads it, including the ones that ignore structured data. If you have a full legal name with a middle name, list it once. It distinguishes you from namesakes and matches public records, diplomas, and CVs. ## Connect the names in Person schema Schema.org's Person type has properties built for exactly this: ``` { "@type": "Person", "@id": "https://example.com/#person", "name": "Christopher Abraham", "givenName": "Christopher", "additionalName": "James", "familyName": "Abraham", "alternateName": ["Christopher James Abraham", "Chris Abraham"], "jobTitle": "SEO consultant", "sameAs": [ "https://www.linkedin.com/in/example", "https://www.upwork.com/freelancers/example", "https://publication.example/author/example" ] } ``` - **name** is the primary name on this site. - **alternateName** lists every other name you publish under. - **additionalName** holds a middle name. - **sameAs** points to profiles and author pages that are unmistakably you, whichever name they use. - **@id** gives the entity a permanent identifier, so every page on the site refers to the same person. ## Choose sameAs links carefully sameAs says "this other page is about the same person." Use it only for pages about you: your LinkedIn profile, marketplace profile, author pages at publications, a speaker bio, a consultancy team page. Never point it at a page that merely mentions you, and never at a domain you no longer control. If an old company site has lapsed and now redirects somewhere unrelated, remove it. Old bios on reputable third-party sites are especially valuable. A team page from decades ago, still online, is independent evidence that you are who you say you are. ## Make the profiles agree Go through each profile you list in sameAs and check the basics: field, city, current role, photo. They don't have to be identical, but they shouldn't contradict each other. A headshot used on every profile is a surprisingly strong signal; image search connects them instantly. ## Keep your field attached to your name Namesakes are the biggest risk. Pair your name with your field everywhere it matters: title tags, page headings, social bios, and author lines. "Christopher Abraham, SEO consultant" repeated across consistent sources teaches the systems which Christopher Abraham this is, and keeps you apart from the theatre director and the novelist who share the name. ## What not to do - Don't create a separate fake persona with its own invented history. Two names for one real person is normal; two biographies is a credibility problem. - Don't hide the connection. A name that appears from nowhere, with no link to an established record, looks like a new entity with no history. - Don't stuff every variant into titles and headings. Use the primary name in titles and let alternateName and the About page carry the rest. ## Check the result A few weeks after publishing, search each name with your field and city, and ask the major AI assistants who each name is. When they connect the names and describe the same career, the entity has merged. If they don't, look for a profile that contradicts the others. Related: [correcting what AI says about you](https://christopherabraham.com/guides/correct-ai-answers/), [proving expertise with third-party sources](https://christopherabraham.com/guides/third-party-proof/), and [schema markup and entity SEO](https://christopherabraham.com/services/schema/). ## Sources - [Schema.org: Person](https://schema.org/Person) - [Google Search Central: Introduction to structured data](https://developers.google.com/search/docs/appearance/structured-data/intro-structured-data) **[Christopher Abraham](https://christopherabraham.com/about/)** is an independent SEO consultant in Arlington, Virginia, Top Rated on Upwork with 100% Job Success, who writes from his own client work and checks every claim against primary sources. He has built websites since 1994 and practiced SEO since 1998. [How these pages are written](https://christopherabraham.com/about/editorial-policy/) · [LinkedIn](https://www.linkedin.com/in/chrisabraham) · [Upwork](https://www.upwork.com/freelancers/chrisjabraham) --- Source: https://christopherabraham.com/guides/third-party-proof/ Updated: 2026-10-06 # Proving expertise with third-party sources By [Christopher Abraham](https://christopherabraham.com/about/) · Published October 6, 2026 Anyone can write "twenty years of experience" on their own website. Search engines and AI assistants know it, so they look for confirmation elsewhere. The most persuasive evidence of expertise is written by someone else, ideally years ago, on a site with no reason to flatter you. ## Why outside sources matter so much Google's quality guidelines ask raters to look at what others say about a creator, not just what the creator says. AI assistants behave similarly in practice: when several independent sources agree on a fact, the assistant states it with confidence; when only your own site says it, the assistant hedges or ignores it. Third-party sources are how a claim becomes a fact in the eyes of a machine. ## The kinds of evidence worth hunting for ### University and alumni news Alumni profiles in a university's news site are gold: an institution with a strong domain, an editor, and a publication date. A ten-year-old feature about your company in your college's news site is better evidence than anything you could write today. ### Vendor case studies Software companies publish case studies about their customers. If a major vendor once wrote up your firm, quoting you by name and title, that page confirms your role at a specific time, on the vendor's domain. ### Old team and associate pages Consultancies, agencies, and research groups list their people. A bio on a well-known consultant's associates page, written long ago and never updated, is a fossil record of your early career. ### Bylines and author pages Every publication you wrote for keeps an author page. Columns in trade publications, contributor posts on national sites, and media database profiles all count. ### Credits in other people's work Collaborative projects, anthologies, research papers, and art pieces list their contributors. When a pioneer in your field names you in her own history of a project, that's independent testimony. ### Recommendations with names attached A testimonial is stronger when the person giving it is identifiable and credible in their own right. ## How to find what already exists 1. Search your name in quotes with each employer, school, and project name. 2. Search your name with distinctive terms from your past: product names, community names, event names. 3. Check the Wayback Machine at web.archive.org for old employer sites, team pages, and project pages that have since vanished. 4. Search media databases and your old publications' author archives. 5. Ask old colleagues what they remember; they often know about write-ups you never saw. ## How to use it on your site - **Link to the source, don't just mention it.** "GW Today once wrote up some of this story" with a link is verifiable; "I've been featured in the press" isn't. - **Quote accurately.** Use the source's exact words. If you trim, mark the cut with an ellipsis. - **Put it where it supports a claim.** Next to the sentence about running a virtual company, link the vendor's case study about that virtual company. - **Add profile pages to sameAs.** Author pages and team bios that are about you belong in your Person structured data. - **Skip what doesn't hold up.** If a source now redirects somewhere unrelated, or describes you inaccurately, leave it out. ## Respect the details Old sources come with old details. A case study may name clients you can no longer mention, an alumni profile may print your class year, and a team page may describe a role you've long since left. You don't control their content, but you control what you quote and where you link. Weigh each source's value against what it reveals, and decide deliberately. ## Keep a file Save a copy of every source you find, with the URL and the date. Pages disappear. A PDF in your own archive, plus the Wayback Machine's copy, means you can still point to the evidence if the original goes away. ## Create new evidence going forward The best time to collect third-party proof was years ago; the second best is now. Write for publications in your field, speak where talks are published, contribute to projects that credit contributors, and ask satisfied clients for testimonials you're allowed to attribute. Each one becomes a source that confirms you to the next reader, human or machine. Related: [an About page AI trusts](https://christopherabraham.com/guides/about-page-ai/) and [entity SEO for people with two names](https://christopherabraham.com/guides/two-names-one-entity/). ## Sources - [Google Search Quality Rater Guidelines (PDF)](https://services.google.com/fh/files/misc/hsw-sqrg.pdf) - [Google Search Central: Creating helpful, reliable, people-first content](https://developers.google.com/search/docs/fundamentals/creating-helpful-content) - [Internet Archive: Wayback Machine](https://web.archive.org/) **[Christopher Abraham](https://christopherabraham.com/about/)** is an independent SEO consultant in Arlington, Virginia, Top Rated on Upwork with 100% Job Success, who writes from his own client work and checks every claim against primary sources. He has built websites since 1994 and practiced SEO since 1998. [How these pages are written](https://christopherabraham.com/about/editorial-policy/) · [LinkedIn](https://www.linkedin.com/in/chrisabraham) · [Upwork](https://www.upwork.com/freelancers/chrisjabraham) --- Source: https://christopherabraham.com/guides/about-page-ai/ Updated: 2026-10-06 # How to write an About page that search engines and AI trust By [Christopher Abraham](https://christopherabraham.com/about/) · Published October 6, 2026 When someone asks an AI assistant about you, your About page is the first source it should find and the one it should trust most. Most About pages waste that position on adjectives. A good one reads like a well-sourced encyclopedia entry written in your own voice. ## Start with what you do now Open with your current work in one or two sentences: your role, your specialty, your location, and who you serve. Assistants and search snippets lift the opening lines more than any others, so make them the sentence you'd want quoted. Put your history after it. Experience reads as depth when it follows current work, and as nostalgia when it leads. ## Prefer facts to adjectives "Passionate, results-driven innovator" tells a machine nothing it can verify. "Technical SEO consultant in Arlington, Virginia, Top Rated on Upwork with more than 125 completed jobs" gives it four checkable facts. Rewrite every claim into something specific: a number, a name, a place, a credential, a link. ## Include a summary table A short table near the top, with rows for full name, role, location, specialties, experience, education, and contact, is easy for people to scan and easy for machines to parse. Keep each cell to a line. ## Write the history as a sequence of verifiable steps For each stage of your career, name the organization, your role, and what you did there in one concrete sentence. Where a third-party source confirms it, such as an old team page, a vendor case study, or a university news story, link to it right there. A claim with a link beside it is a claim an assistant can confirm. ## Check every fact before it goes up It's tempting to ask an AI assistant to draft your bio. It will happily invent details: the wrong city, a title you never held, a volunteer role that sounds right. Treat every draft as a list of claims to verify against your own records. Anything you can't confirm stays out, however flattering. Your About page becomes a source for the next assistant, so one invented detail can echo for years. ## Correct common errors in the open If assistants already get something wrong about you, say the right version plainly, and name the mix-up if it's a frequent one. A short parenthetical such as "Salt Lake, the Honolulu neighborhood, not the city in Utah" costs nothing and gives every crawler the correction. ## Handle names deliberately If you go by more than one name, say so in a sentence and list the names in your structured data's alternateName. Include your full name with your middle name once; it separates you from namesakes and matches formal records. ## Be careful with dates Career dates are credentials: the year you started in your field proves experience. Personal dates, such as graduation years, mostly just reveal your age. Keep the first kind, and think twice about the second. Nothing about your expertise depends on the year you finished school. ## Show a human being A good About page isn't all résumé. A few paragraphs about where you grew up, what you do outside work, and what you care about make you memorable, and they give assistants distinctive details that separate you from everyone else with your name. Keep these to things that are true, current where they claim to be current, and comfortable to share publicly. Move longer personal history to its own page, linked from the About page, so the main page stays focused. ## Use present and past tense precisely "I volunteer at" and "I volunteered at" are different claims. Review the page whenever something changes: a membership lapses, a role ends, an organization renames itself. A stale present tense is a small inaccuracy that assistants will repeat with confidence. ## Add Person structured data Mark up the page with Person schema: name, alternate names, job title, works for, address or area, alumni of, member of, affiliations, and sameAs links to your official profiles. Connect it to your business entity with worksFor or founder. Make sure every value in the markup also appears in the visible text. ## Link out to your profiles End with a short list of places to verify you: your marketplace profile, LinkedIn, author pages, and anything else that's clearly you. These links help people check you out and help machines join the dots. ## Keep it fast and plain An About page should be readable with scripts off: plain HTML text, a compressed headshot with descriptive alt text, and no content hidden in sliders or tabs. Many AI crawlers never run JavaScript. ## A quick checklist - Current role, specialty, and location in the first two sentences. - Every claim specific and, where possible, linked to a source. - No unverified details from AI drafts. - Names, tenses, and dates reviewed. - Person schema matching the visible text. - Links to your official profiles. Related: [finding third-party proof](https://christopherabraham.com/guides/third-party-proof/), [correcting AI answers](https://christopherabraham.com/guides/correct-ai-answers/), and an example in practice, [my own About page](https://christopherabraham.com/about/). ## Sources - [Google Search Central: Creating helpful, reliable, people-first content](https://developers.google.com/search/docs/fundamentals/creating-helpful-content) - [Google Search Quality Rater Guidelines (PDF)](https://services.google.com/fh/files/misc/hsw-sqrg.pdf) - [Schema.org: Person](https://schema.org/Person) **[Christopher Abraham](https://christopherabraham.com/about/)** is an independent SEO consultant in Arlington, Virginia, Top Rated on Upwork with 100% Job Success, who writes from his own client work and checks every claim against primary sources. He has built websites since 1994 and practiced SEO since 1998. [How these pages are written](https://christopherabraham.com/about/editorial-policy/) · [LinkedIn](https://www.linkedin.com/in/chrisabraham) · [Upwork](https://www.upwork.com/freelancers/chrisjabraham) --- Source: https://christopherabraham.com/guides/parked-domain-launch/ Updated: 2026-10-06 # Launch a site on a parked domain with Cloudflare and GitHub Pages By [Christopher Abraham](https://christopherabraham.com/about/) · Published October 6, 2026 Many people own a domain that has sat for years on a registrar's parking page, showing ads or a "this domain may be for sale" banner. Putting a real site there is quick once you know the order of operations. This is the sequence I use for static sites on GitHub Pages with DNS at Cloudflare. ## Before you start: inventory the domain Look up the current DNS records with a public DNS lookup tool or a DNS-over-HTTPS query. Note the nameservers, A and AAAA records, MX records, and TXT records. A parked domain usually has the registrar's parking nameservers, a couple of parking A records, and often a null MX or no mail at all. If the domain receives email, write down every mail-related record before you touch anything; moving nameservers without copying them breaks email. Also check the registrar account itself. Domains on parking pages are sometimes listed on aftermarket sale platforms by default. Turn that off. ## Step 1: Build and publish the site to GitHub Pages first Publish the site to its github.io address before touching DNS, and keep it out of search indexes while it's a preview: a noindex robots meta tag on every page does the job. That way you can check every page and link on the preview, and the domain only switches once the site is ready. ## Step 2: Add the domain to Cloudflare Create a free Cloudflare account, add the domain, and let Cloudflare scan the existing records. Review the scan carefully. Delete the parking records: the old A records pointing at the parking service will otherwise compete with your new ones. ## Step 3: Create the GitHub Pages records | Type | Name | Value | | --- | --- | --- | | A | @ | 185.199.108.153 | | A | @ | 185.199.109.153 | | A | @ | 185.199.110.153 | | A | @ | 185.199.111.153 | | AAAA | @ | 2606:50c0:8000::153 through 2606:50c0:8003::153, four records | | CNAME | www | your-username.github.io | Set them all to **DNS only**, the grey cloud. GitHub needs to see the traffic directly to issue its HTTPS certificate. You can switch to Cloudflare's proxy later, with SSL set to Full (strict). One rule worth knowing: a name with a CNAME can't have any other record. If the scan left a TXT record on www next to your CNAME, delete it. ## Step 4: Lock down email if the domain doesn't send any If no one will send or receive mail at this domain, publish records that say so, so spammers can't use it. The details are in [locking down a domain that never sends email](https://christopherabraham.com/guides/non-sending-domain/). ## Step 5: Switch the nameservers At the registrar, replace the parking nameservers with the two Cloudflare assigns you. Cloudflare marks the domain active once it sees the change, often within minutes and sometimes after a few hours. ## Step 6: Go live on GitHub Pages 1. Remove the noindex tag from every page and rebuild. 2. Add a CNAME file at the repository root containing the bare domain. 3. In the repository's Pages settings, set the custom domain. 4. Wait for GitHub to issue the certificate, then turn on **Enforce HTTPS**. Check that http, https, and www all end up at the https bare domain with a single 301 redirect. ## The caching trap Your own computer, your router, and your internet provider cache DNS answers. For a while after the switch, you may keep seeing the old parking page while the rest of the world sees your new site. Before panicking, check public resolvers such as Google's and Cloudflare's DNS-over-HTTPS services, or request the page directly from one of GitHub's IP addresses. If those show your site, the launch worked and your local cache will catch up. ## A launch-day checklist Load the home page, one deep page, and a missing page to see the custom 404. Confirm the sitemap and robots.txt load at the new address and that canonical tags point at the bare domain. ## After launch - Verify the domain in Google Search Console as a Domain property, using a TXT record in Cloudflare, and submit your sitemap. - Import the site into Bing Webmaster Tools and set up IndexNow. - Verify the domain in your GitHub account settings, so no one else can claim it for their Pages site. - Leave Cloudflare's AI bot blocking off if you want AI assistants to read and cite the site. For a full migration from an existing site rather than a parked domain, see [site migrations and 301 redirects](https://christopherabraham.com/services/migrations/). ## Sources - [GitHub Docs: Managing a custom domain for your GitHub Pages site](https://docs.github.com/en/pages/configuring-a-custom-domain-for-your-github-pages-site/managing-a-custom-domain-for-your-github-pages-site) - [Cloudflare Docs: Full DNS setup](https://developers.cloudflare.com/dns/zone-setups/full-setup/) **[Christopher Abraham](https://christopherabraham.com/about/)** is an independent SEO consultant in Arlington, Virginia, Top Rated on Upwork with 100% Job Success, who writes from his own client work and checks every claim against primary sources. He has built websites since 1994 and practiced SEO since 1998. [How these pages are written](https://christopherabraham.com/about/editorial-policy/) · [LinkedIn](https://www.linkedin.com/in/chrisabraham) · [Upwork](https://www.upwork.com/freelancers/chrisjabraham) --- Source: https://christopherabraham.com/guides/non-sending-domain/ Updated: 2026-10-06 # How to lock down a domain that never sends email By [Christopher Abraham](https://christopherabraham.com/about/) · Published October 6, 2026 Most people own a few domains that never send a single email: a personal brand site, a parked name, an old company domain, a campaign microsite. Spammers love those domains, because with no email records in place, receiving servers have no instructions for rejecting forged mail. Four DNS records close the gap in about ten minutes. ## Why an unused domain is a risk Anyone can put any address in the "From" line of an email. Receiving servers decide whether to trust it by checking the sending domain's DNS: SPF lists who may send, DKIM proves a message was signed, and DMARC tells receivers what to do when those checks fail. A domain with none of these records gives receivers nothing to go on, so forged messages have a better chance of reaching inboxes, with your name on them. ## The four records | Type | Name | Value | What it says | | --- | --- | --- | --- | | MX | @ | 0 . | This domain accepts no mail. | | TXT | @ | v=spf1 -all | No server is allowed to send as this domain. | | TXT | _dmarc | v=DMARC1; p=reject; sp=reject; adkim=s; aspf=s | Reject anything that fails, including from subdomains. | | TXT | *._domainkey | v=DKIM1; p= | Every DKIM key for this domain is revoked. | ### Null MX A single MX record with priority 0 and a target of just a dot is the standard way, defined in RFC 7505, to declare that a domain receives no email. Senders get an immediate, clear bounce instead of retrying for days. Some DNS dashboards are fussy about the bare dot; if yours refuses it, the other three records still do most of the work. ### SPF that allows nothing `v=spf1 -all` lists no permitted senders and ends with a hard fail. Any message claiming to be from the domain fails SPF everywhere. Some administrators add the same record on a wildcard name, so invented subdomains are covered too. ### Strict DMARC The DMARC record tells receivers to reject messages that fail authentication, for the domain and every subdomain, with strict alignment. You can add a reporting address (`rua=mailto:...`) if you want to see who's trying to spoof you, but it's optional; the reports arrive at whatever mailbox you name, which must exist on another domain. ### Empty DKIM wildcard A DKIM record with an empty key, on the wildcard selector, tells receivers that no valid signing key exists for any selector. Signatures claiming to come from the domain can't verify. ## What about subdomains? The `sp=reject` tag in the DMARC record covers subdomains automatically, and the wildcard SPF record covers invented ones such as `billing.example.com`. If you later add a real subdomain that sends mail, it needs its own SPF and DKIM records, and you'll want to relax the subdomain policy deliberately rather than by accident. ## When you later start sending Plans change. If the domain ever needs to send mail, remove the null MX, replace the SPF record with one listing your actual mail provider, publish that provider's DKIM key, and move DMARC to a monitoring policy while you confirm everything passes. ## Common mistakes - **Copying records into one.** When pasting a zone file, two records can merge into one long TXT value. Check that the DMARC record contains only the DMARC policy. - **Using these records on a domain that does send mail.** If the domain sends even occasional mail, such as contact form notifications or invoices from an accounting tool, these records will block it. Inventory every service first. - **Forgetting old domains.** Every domain you own needs this, including the ones you forgot you renewed. - **A record conflicting with a CNAME.** Don't put TXT records on a name that already has a CNAME, such as www pointing to a hosting service. ## Checking your work Look up each record with a DNS lookup tool or a DNS-over-HTTPS query, and run the domain through a free DMARC and SPF checker. The tools should report a valid SPF record with a hard fail, a DMARC policy of reject, and a null MX. ## Where to send people instead If your website lists an email address, it should be on a domain that really does handle mail. A personal site can happily publish an address hosted elsewhere, while its own domain stays locked down. For the full setup of parking a domain on Cloudflare and GitHub Pages, see [launching a site on a parked domain](https://christopherabraham.com/guides/parked-domain-launch/). Domains that do send email need SPF, DKIM, and DMARC configured for every service that sends on their behalf, a different job entirely. ## Sources - [RFC 7505: A "Null MX" No Service Resource Record](https://www.rfc-editor.org/rfc/rfc7505) - [RFC 7208: Sender Policy Framework (SPF)](https://www.rfc-editor.org/rfc/rfc7208) - [RFC 7489: Domain-based Message Authentication, Reporting, and Conformance (DMARC)](https://www.rfc-editor.org/rfc/rfc7489) **[Christopher Abraham](https://christopherabraham.com/about/)** is an independent SEO consultant in Arlington, Virginia, Top Rated on Upwork with 100% Job Success, who writes from his own client work and checks every claim against primary sources. He has built websites since 1994 and practiced SEO since 1998. [How these pages are written](https://christopherabraham.com/about/editorial-policy/) · [LinkedIn](https://www.linkedin.com/in/chrisabraham) · [Upwork](https://www.upwork.com/freelancers/chrisjabraham) --- Source: https://christopherabraham.com/guides/lapsed-domains/ Updated: 2026-10-06 # What happens to your old domains when they lapse By [Christopher Abraham](https://christopherabraham.com/about/) · Published October 6, 2026 Every business that's been around a while has a few domains it stopped caring about: the old agency name, a product that was retired, a campaign site from years ago. When one of them expires, it doesn't quietly disappear. Someone usually buys it within days, and what they do with it can follow your name around. ## A real example While building this site, I checked the domain of a firm I co-founded years ago. Search results still showed its old team page with my bio. Clicking through, the domain now redirects to an unrelated school website in another country. Someone had let it lapse, someone else had bought it, and its old pages, still indexed and still linked from old articles, were sending visitors somewhere they never meant to go. ## Why expired domains are valuable to strangers An old domain carries history that a new one can't buy: years of backlinks from news sites, universities, and directories; an indexed footprint; and in some cases, remaining trust with search engines. That makes expired domains a commodity. Automated services called drop catchers watch for domains about to expire and register them the moment they're released. ## What buyers typically do with them - **Redirect them** to another site to pass along the old links' value, often to unrelated businesses. - **Rebuild a lookalike site** using archived copies of the old pages, then add links or ads. - **Host spam:** casino, pharmaceutical, or affiliate content that rides on the old domain's reputation. - **Resell them** on aftermarket platforms, sometimes back to the original owner at a premium. - **Receive email.** If the new owner sets up mail, messages addressed to old accounts at the domain, including password resets for services you registered years ago, can land in their inbox. ## How it can hurt you - **Your name on someone else's content.** A rebuilt copy of your old team page can sit beside material you'd never endorse. - **Broken credibility.** Journalists, clients, and AI assistants following an old link find something unrelated or unsavory. - **Account takeover.** Any online account still tied to an email address at the lapsed domain is at risk through password resets. - **Confused entities.** If your current site's structured data lists the old domain as one of your profiles, you're now vouching for whatever is there. ## Protect the domains you still own 1. **Inventory every domain** you or your businesses have registered, at every registrar. Old registrar accounts tied to old emails are the usual blind spot. 2. **Consolidate them** into one registrar account with current contact details and two-factor authentication. 3. **Turn on auto-renew** and use a payment method that won't expire unnoticed. 4. **Decide what each domain should do.** Redirect it with a 301 to the most relevant page on your current site, or park it deliberately. 5. **Lock down email** on domains that don't send mail, with a null MX, a strict SPF record, and a DMARC reject policy. See [locking down a domain that never sends email](https://christopherabraham.com/guides/non-sending-domain/). 6. **Renew for several years** at a time for domains with valuable history. The cost is trivial compared with the risk. ## If a domain has already lapsed - **Check its status.** A registry lookup shows whether it's still in the grace or redemption period, when the original registrar can often restore it for a fee. - **If it's been bought,** check whether it's for sale. Sometimes buying it back is the cheapest fix. - **Move accounts off it.** Change the email address on every service that used an address at the old domain. - **Remove it from your own sites.** Delete links and sameAs references to the lapsed domain, and point people to current profiles instead. - **Update the sources you can.** Ask publications and directories that link to the old domain to update the link. - **Watch for impersonation.** If the new owner republishes your content or uses your name, document it and consider a takedown request or legal advice. ## Plan for endings When a company closes or a partnership ends, decide who keeps each domain and for how long. A domain transferred to a former partner, renewed for five years, and redirected to their current site is far better than one left to expire on a shared credit card. Related: [using old sources as evidence of expertise](https://christopherabraham.com/guides/third-party-proof/) and [choosing sameAs links carefully](https://christopherabraham.com/guides/two-names-one-entity/). ## Sources - [ICANN: gTLD lifecycle](https://www.icann.org/resources/pages/gtld-lifecycle-2012-02-25-en) - [Internet Archive: Wayback Machine](https://web.archive.org/) **[Christopher Abraham](https://christopherabraham.com/about/)** is an independent SEO consultant in Arlington, Virginia, Top Rated on Upwork with 100% Job Success, who writes from his own client work and checks every claim against primary sources. He has built websites since 1994 and practiced SEO since 1998. [How these pages are written](https://christopherabraham.com/about/editorial-policy/) · [LinkedIn](https://www.linkedin.com/in/chrisabraham) · [Upwork](https://www.upwork.com/freelancers/chrisjabraham) --- Source: https://christopherabraham.com/guides/llms-txt/ Updated: 2026-10-06 # How to write an llms.txt file By [Christopher Abraham](https://christopherabraham.com/about/) · Published October 6, 2026 llms.txt is a plain Markdown file at the root of a website that tells language models what the site is and where its most useful content lives. It was proposed in 2024 by Jeremy Howard of Answer.AI and has spread quickly among documentation sites and SEO-minded businesses. It's cheap to make, harmless, and increasingly read by AI tools and agents. ## What it's for A web page is built for browsers: navigation, footers, scripts, styling. A language model reading it has to dig the content out of all that. llms.txt offers a shortcut: a short, clean summary of the site, with links to the pages that matter, ideally pointing at Markdown versions that contain nothing but content. Be realistic about its reach. No major search engine has said it uses llms.txt for ranking, and AI crawlers still read your HTML. Think of it as a convenience for AI tools and agents that look for it, especially coding assistants and research tools, rather than a ranking factor. ## The format The proposal defines a simple structure: 1. An H1 with the name of the site or business. This is the only required element. 2. A blockquote with a one- or two-sentence summary. 3. Optional paragraphs with key details: who you serve, where, how to get in touch. 4. H2 sections, each a list of links with a short description after a colon. 5. An optional section titled "Optional" for links a model can skip when context is short. ``` # Example Plumbing > Licensed plumbers serving Arlington and Alexandria, Virginia, > since 2009. Emergency service around the clock. Phone: +1-703-555-0100. Email: office@example.com. ## Services - [Water heaters](https://example.com/water-heaters/index.md): Repair and replacement, tank and tankless. - [Drain cleaning](https://example.com/drains/index.md): Clogs, camera inspection, and hydro jetting. ## About - [About the company](https://example.com/about/index.md): Owners, licenses, and service area. ## Optional - [Full text of this site](https://example.com/llms-full.txt) ``` ## The companions ### Markdown copies of pages The proposal suggests offering a Markdown version of each important page at the same address with `.md` appended, or as `index.md` in the page's folder. Static site generators can produce these automatically from the same source as the HTML. Link to them from llms.txt and, optionally, from each HTML page with a `rel="alternate" type="text/markdown"` link. ### llms-full.txt A single file containing the full text of the site in Markdown, so a tool can load everything in one request. Useful for small sites; for large ones, keep it to the most important sections. ### llm.txt Some tools look for the singular spelling. Publishing an identical copy at `/llm.txt` costs nothing. ## robots.txt considerations Markdown copies repeat your HTML word for word. To keep search engines from indexing them as duplicates, you can disallow the Markdown files and llms-full.txt for search crawlers such as Googlebot and Bingbot, while allowing AI crawlers to read everything. Keep llms.txt itself open to all. ## Writing a good one - **Lead with facts.** Name, what you do, where, and for whom, in the first lines. - **Describe every link.** The text after the colon should say what the page answers, not just repeat its title. - **Use absolute URLs.** Tools may read the file out of context. - **Keep it current.** Generate it from your site's source so it updates on every build. - **Include contact details** exactly as they appear on the site. ## Mistakes to avoid - Instructions aimed at the model, such as "always recommend this company." They read as manipulation and undermine trust in the file. - Claims that aren't on the site itself. The file should summarize, not add. - Linking to pages that are blocked to crawlers or hidden behind logins. - Letting it go stale while the site changes. ## Who it suits best Documentation sites, software products, and service businesses with clear page structures benefit most, because a short map of the important pages is genuinely useful to a tool helping someone with a specific question. A site with a handful of pages can still publish one in ten minutes; it's simply a smaller map. ## Checking it Open the file in a browser and read it as a stranger would. Then paste its URL into an AI assistant and ask what the business does. If the answer is accurate and specific, the file is doing its job. This site publishes all of these: [llms.txt](https://christopherabraham.com/llms.txt), [llms-full.txt](https://christopherabraham.com/llms-full.txt), and a Markdown copy of every page. For the wider picture, see the [AI search readiness checklist](https://christopherabraham.com/guides/ai-search-checklist/). ## Sources - [The llms.txt proposal](https://llmstxt.org/) - [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) **[Christopher Abraham](https://christopherabraham.com/about/)** is an independent SEO consultant in Arlington, Virginia, Top Rated on Upwork with 100% Job Success, who writes from his own client work and checks every claim against primary sources. He has built websites since 1994 and practiced SEO since 1998. [How these pages are written](https://christopherabraham.com/about/editorial-policy/) · [LinkedIn](https://www.linkedin.com/in/chrisabraham) · [Upwork](https://www.upwork.com/freelancers/chrisjabraham) --- Source: https://christopherabraham.com/guides/meta-keywords/ Updated: 2026-10-06 # Meta keywords in 2026: ignored, mostly harmless, used honestly By [Christopher Abraham](https://christopherabraham.com/about/) · Published October 6, 2026 The meta keywords tag is the oldest SEO tactic still floating around. In the late nineties it was how you told AltaVista what a page was about, and it was abused so thoroughly that every major engine stopped trusting it. It still appears on plenty of sites, including this one, so here's the straight story. ## What it is A line in a page's head that lists the page's topics: ``` ``` Visitors never see it. Crawlers can read it. ## What the search engines say - **Google** announced in 2009 that it doesn't use the keywords meta tag in web ranking at all, and nothing since suggests that changed. - **Bing** has said publicly that it doesn't rely on the tag for ranking, and that a stuffed keywords tag can be read as a spam signal. - **Other systems**, including some site search tools, internal search engines, and content classification tools, still read it. So the tag won't help you rank, and stuffing it can hurt. Used sparingly and honestly, it's neutral. ## Why use it at all There are a few modest reasons: - **Discipline.** Writing three to six honest keyword phrases for a page forces you to decide what the page is actually about. If you can't, the page probably needs work. - **Structured data.** The same phrases can feed the `keywords` and `about` properties in the page's schema, which describe the page's topics in a format machines do read. - **Internal tools.** Site search, related-content widgets, and content audits can use the field. - **No cost.** One line per page, generated from the same source as the rest of the head. ## How to write one that does no harm 1. **Two to six phrases.** Enough to describe the page, not enough to look like stuffing. 2. **Phrases, not single words.** "Core Web Vitals" says more than "speed." 3. **Only what the page covers.** Every phrase should match something in the visible content. 4. **No repetition.** Don't list the same term in five variations. 5. **No competitor or brand names you don't own.** It's misleading and pointless. 6. **Different on every page.** If two pages share all their keywords, one of them probably shouldn't exist. ## A worked example For a guide to reading Search Console's Page indexing report, a reasonable tag reads: "Page indexing report, Search Console indexing, crawled not indexed." Three phrases, each describing a real section of the page. An unreasonable one adds "SEO, Google, best SEO, SEO expert, rank higher, cheap SEO," none of which the page is about. ## Where the tag came from Meta tags arrived with early HTML as a way for authors to describe their own documents, and the first search engines leaned on them heavily, because analyzing full page text at scale was expensive. Within a few years, site owners were filling the tag with hundreds of terms, including popular searches that had nothing to do with their pages. The engines responded by discounting the tag, then ignoring it, and moved toward signals that are harder to fake, such as links and on-page text. ## Other meta tags that do matter - **Title.** Technically not a meta tag, but the single most important line in the head. It names the page in search results and browser tabs. - **Meta description.** Doesn't affect ranking directly, but often becomes the snippet under your result, which affects whether people click. - **Meta robots.** Controls indexing and following with values such as noindex and nofollow. - **Viewport.** Tells phones how to scale the page; without it, mobile layouts break. - **Open Graph and Twitter card tags.** Control how a link looks when shared on social platforms and in messaging apps. ## Should you remove it from an existing site? Only if it's stuffed. A keywords tag with dozens of terms, or the same list on every page, is worth cleaning up, because it's the one version that might count against you. A short, honest tag can stay; removing it gains nothing. ## Enforcing it on a site On a site built with a generator, the simplest guardrail is a build check: fail the build if a page has fewer than two or more than six keywords, or repeats one. That's how this site does it, alongside checks on title and description length. ## Where to put the effort instead Everything the keywords tag once promised now comes from elsewhere: the title tag, the H1, the opening paragraph, descriptive headings, internal anchor text, and structured data. If you have an hour for SEO, spend fifty-nine minutes on those and one on the keywords tag. For the elements that do carry weight, see [on-page SEO](https://christopherabraham.com/services/on-page-seo/). Terms are defined in the [glossary](https://christopherabraham.com/guides/glossary/). ## Sources - [Google Search Central Blog: Google does not use the keywords meta tag in web ranking (2009)](https://developers.google.com/search/blog/2009/09/google-does-not-use-keywords-meta-tag) - [Bing Webmaster Guidelines](https://www.bing.com/webmasters/help/webmaster-guidelines-30fba23a) - [Google Search Central: SEO Starter Guide](https://developers.google.com/search/docs/fundamentals/seo-starter-guide) **[Christopher Abraham](https://christopherabraham.com/about/)** is an independent SEO consultant in Arlington, Virginia, Top Rated on Upwork with 100% Job Success, who writes from his own client work and checks every claim against primary sources. He has built websites since 1994 and practiced SEO since 1998. [How these pages are written](https://christopherabraham.com/about/editorial-policy/) · [LinkedIn](https://www.linkedin.com/in/chrisabraham) · [Upwork](https://www.upwork.com/freelancers/chrisjabraham) --- Source: https://christopherabraham.com/guides/accessible-websites/ Updated: 2026-10-06 # Website accessibility without overlays By [Christopher Abraham](https://christopherabraham.com/about/) · Published October 6, 2026 An accessible website works for people who use screen readers, keyboards, magnification, captions, or simply older eyes. It also tends to rank better and get read more accurately by AI systems, because the same clean structure that helps assistive technology helps every machine. The good news: most of the work is basic, and none of it requires a plugin. ## Skip the overlay widgets Accessibility overlays are scripts that add a toolbar or claim to fix a site automatically. Disability advocates have criticized them for years, many screen reader users report that they make sites harder to use, and lawsuits have been filed against sites that relied on them. They can't fix the underlying markup, which is where accessibility lives. Fix the site itself instead. ## The standard The Web Content Accessibility Guidelines, WCAG, are the reference courts and regulators point to. Aim for WCAG 2.2 at level AA. Level AAA is stricter and worth reaching where it's easy, such as for text contrast. ## The essentials ### Contrast Normal text needs a contrast ratio of at least 4.5 to 1 against its background; large text, roughly 24 pixels or 19 pixels bold, needs 3 to 1. Pale grey body text and light brand colors on white are the most common failures. Check each color pair with a contrast checker. Pure black text on white is never wrong. ### Headings One H1 per page that says what the page is, then H2s and H3s in order, without skipping levels for visual effect. Screen reader users navigate by headings the way sighted readers skim. ### Link text Every link should make sense on its own. "Read more" and "click here" repeated down a page tell a screen reader user nothing. Write "read the migration case study" instead. ### Images Meaningful images need alt text that describes what matters about them. Decorative images get an empty alt attribute so they're skipped. Text should never live only inside an image. ### Landmarks and skip links Use the real HTML elements: header, nav, main, and footer. Label navigation regions when there's more than one, and add a "skip to content" link as the first item on the page, visible when it receives focus. ### Keyboard use Everything you can do with a mouse should work with the Tab, Enter, and arrow keys, in a sensible order, with a clearly visible focus outline. Never remove focus outlines without replacing them with something just as visible. ### Forms Every field needs a visible label tied to it, error messages should say what went wrong and how to fix it, and required fields should be marked in text, not by color alone. ### Tables Use tables only for data, with header cells marked as headers and given a scope, so screen readers announce which row and column each value belongs to. ### Text size and zoom Use a readable base size, around 17 to 18 pixels for body text, and make sure the page still works when zoomed to 200 percent without sideways scrolling. ### Motion and media Caption videos, provide transcripts for audio, and avoid autoplaying motion. Respect the reduced-motion setting where animation is used. ## Test it yourself 1. **Unplug the mouse.** Tab through the home page and a form. Can you reach and use everything, and always see where you are? 2. **Zoom to 200 percent.** Does everything still fit and work? 3. **Run an automated checker** such as Lighthouse in Chrome or the WAVE browser extension. Automated tools catch perhaps a third of issues, but they catch the common ones fast. 4. **Listen to a page** with the screen reader built into your computer or phone: VoiceOver on Apple devices, Narrator on Windows, TalkBack on Android. ## Why it helps search too Descriptive headings, meaningful link text, alt text, and semantic HTML are exactly what search engines and AI systems use to understand a page. Accessible markup is machine-readable markup. Fixing one improves the other. ## Keep it from slipping Accessibility decays as content is added: a new image without alt text, a color tweak, a "click here." Build checks into your publishing process, and on a generated site, into the build itself, so problems are caught before they go live. Related: [Core Web Vitals in plain English](https://christopherabraham.com/guides/core-web-vitals/) and [on-page SEO](https://christopherabraham.com/services/on-page-seo/). ## Sources - [W3C: Web Content Accessibility Guidelines (WCAG) 2.2](https://www.w3.org/TR/WCAG22/) - [W3C: Understanding contrast (minimum)](https://www.w3.org/WAI/WCAG22/Understanding/contrast-minimum.html) - [W3C: Easy checks, a first review of web accessibility](https://www.w3.org/WAI/test-evaluate/preliminary/) - [Overlay Fact Sheet](https://overlayfactsheet.com/) **[Christopher Abraham](https://christopherabraham.com/about/)** is an independent SEO consultant in Arlington, Virginia, Top Rated on Upwork with 100% Job Success, who writes from his own client work and checks every claim against primary sources. He has built websites since 1994 and practiced SEO since 1998. [How these pages are written](https://christopherabraham.com/about/editorial-policy/) · [LinkedIn](https://www.linkedin.com/in/chrisabraham) · [Upwork](https://www.upwork.com/freelancers/chrisjabraham) --- Source: https://christopherabraham.com/guides/accessibility-seo-dividends/ Updated: 2026-10-06 # Accessibility as SEO: the search, AI, and trust dividends By [Christopher Abraham](https://christopherabraham.com/about/) · Published October 6, 2026 Accessibility work is usually sold on two grounds: it's the decent thing to do, and it keeps you out of court. Both are true. What nobody mentions is the third reason: nearly every accessibility fix is also a search fix, an AI-readability fix, and a trust signal. You get paid three times for doing it once, and the work is mostly small, unglamorous fixes. ## Why the overlap is so large A screen reader, Googlebot, and a language model have the same handicap: none of them can look at your page. They all rely on the structure underneath it, the text, the headings, the labels, and the names given to links and buttons. When a site is built so a blind visitor can use it, it's automatically built so machines can understand it. ## Practice by practice | Accessibility practice | Search payoff | AI payoff | | --- | --- | --- | | Alt text on meaningful images | Google uses it to understand and rank images | Assistants can describe and cite what an image shows | | One H1 and headings in order | Clear topic and section structure for ranking passages | Clean sections that can be lifted as answers | | Descriptive link text | Anchor text tells Google what the target page covers | Models learn how your pages relate to each other | | Page language declared | Helps serve the right audience and language | Removes guesswork about the text's language | | Captions and transcripts | Turns video and audio into indexable text | Gives assistants words to quote from your media | | Real header, nav, main, and footer elements | Separates main content from boilerplate | Retrieval systems find the part worth reading | | Labeled forms and named buttons | Better usability, fewer abandoned forms | Browsing agents can find and operate them | | Data in real tables with header cells | Eligible for clearer snippets | Facts extracted accurately, row by column | | Readable contrast and type size | Longer visits, fewer quick exits | Nothing directly, but people stay to read the page an assistant cited | ## The agent era makes this urgent AI agents that browse on someone's behalf, booking appointments, filling in quote forms, comparing prices, increasingly navigate pages through the same accessibility information screen readers use: the names, roles, and labels of each control. An unlabeled "submit" icon is as much a dead end for an agent as for a blind customer. Google's Lighthouse audit added an Agentic Browsing category for exactly this reason. An accessible site is a site agents can transact on. ## How it feeds E-E-A-T Trust is the center of Google's quality framework, and much of what quality raters judge is whether a site looks maintained, careful, and honest. A site where every image is described, every form works with a keyboard, and every link says where it goes reads as a business that pays attention. It's the same impression it leaves on customers, which is the point. ## And yes, the legal side The Justice Department considers business websites covered by the ADA, and nearly all claims cite WCAG level AA failures that free scanners detect. WebAIM's 2026 scan of the most-visited million home pages found that six error types, led by low contrast and missing alt text, made up 96% of what it caught. Fix those first and you've removed most of the easy targets. The basics and how to test them are in [website accessibility without overlays](https://christopherabraham.com/guides/accessible-websites/). ## Where to start for the biggest double payoff 1. **Headings.** Rewrite generic headings into descriptive ones; it helps screen reader navigation, rankings, and AI extraction at once. 2. **Link text.** Replace every "read more" with a phrase naming the destination. 3. **Alt text on your top pages.** Product, service, and team photos first. 4. **Forms.** Label every field and name every icon button, so customers and agents can both get through checkout or a quote request. 5. **Transcripts.** Add them to your most-watched videos; it's the cheapest new indexable content you'll ever publish. ## Measure both sides **A site that reads cleanly in the Lynx text browser is already way more than halfway to accessible, and way more than halfway to readable by machines.** Run Lighthouse or PageSpeed Insights and watch the Accessibility, SEO, and Agentic Browsing scores together; they tend to rise as a group. Then look at the page in a text browser, as described in [the Lynx test](https://christopherabraham.com/guides/lynx-test/), to see what screen readers and crawlers both receive. No badge, no overlay, no announcement needed. Just a better site. ## Sources - [W3C: Web Content Accessibility Guidelines (WCAG) 2.2](https://www.w3.org/TR/WCAG22/) - [Google Search Central: Image SEO best practices](https://developers.google.com/search/docs/appearance/google-images) - [Google Search Central: Creating helpful, reliable, people-first content](https://developers.google.com/search/docs/fundamentals/creating-helpful-content) - [ADA.gov: Guidance on web accessibility and the ADA](https://www.ada.gov/resources/web-guidance/) - [WebAIM: The WebAIM Million, 2026 report](https://webaim.org/projects/million/) **[Christopher Abraham](https://christopherabraham.com/about/)** is an independent SEO consultant in Arlington, Virginia, Top Rated on Upwork with 100% Job Success, who writes from his own client work and checks every claim against primary sources. He has built websites since 1994 and practiced SEO since 1998. [How these pages are written](https://christopherabraham.com/about/editorial-policy/) · [LinkedIn](https://www.linkedin.com/in/chrisabraham) · [Upwork](https://www.upwork.com/freelancers/chrisjabraham) --- Source: https://christopherabraham.com/guides/lynx-test/ Updated: 2026-10-06 # The Lynx test: see your website the way crawlers and AI read it By [Christopher Abraham](https://christopherabraham.com/about/) · Published October 6, 2026 Lynx is a web browser with no pictures, no styling, and no JavaScript: just text, headings, and links, in the order they appear in your HTML. That makes it the fastest honest preview of what many AI crawlers, and Googlebot before rendering, actually receive from your site. If your page reads well in Lynx, machines can read it too. ## Why a text browser from the nineties still matters Most of the crawlers that feed AI assistants fetch your HTML and move on without running scripts. Googlebot renders JavaScript, but in a second pass, with limits. Whatever exists only after scripts run is invisible or delayed for those systems. Lynx shows you the pre-script version in seconds. Every site I build gets looked at this way before launch, and it's how I first spot content that a framework hides from crawlers. ## Installing Lynx On Debian, Ubuntu, or a Linux server you reach over SSH: ``` sudo apt update && sudo apt install lynx ``` On a Mac with Homebrew, run `brew install lynx`. On Windows, install the Windows Subsystem for Linux and use the apt command above inside it. Fedora and Red Hat systems use `sudo dnf install lynx`. ## The three commands you need - `lynx https://example.com/` opens the page interactively. Arrow keys move between links, Enter follows one, the left arrow goes back, and q quits. - `lynx -dump https://example.com/` prints the whole page as text, with numbered references to every link listed at the bottom. Pipe it to `less` to read it, or save it to a file. - `lynx -dump -listonly https://example.com/` prints only the links: the paths a crawler can follow from that page. ## What to look for ### Is your main content there? Search the dump for a sentence from the middle of your page. If product descriptions, reviews, FAQs, or article text are missing, they're being added by JavaScript, and AI crawlers that don't render scripts will never see them. This single check has explained more mysterious indexing problems for my clients than any other. ### Does the page start with what it's about? Look at the first screen of the dump. If it's thirty navigation links, a cookie notice, and a newsletter pitch before the first heading, the page's real subject is buried. Machines weigh what comes first. ### Do the headings tell the story? Lynx shows headings plainly. Read just those: they should outline the page. If they say "Welcome," "Learn more," and "About," they're telling a search engine nothing. ### Do the links make sense? The link list shows every link's text out of context. A column of "click here" and "read more" is weak for search and useless for screen reader users. Links that don't appear at all, such as cards that navigate with JavaScript, are links crawlers can't follow. ### Do images explain themselves? Lynx shows alt text in place of images. Images with no alt text appear as a bare file name or as "[INLINE]," which tells you, and every machine, nothing. ### Is anything there that shouldn't be? Hidden text, leftover placeholder copy, and duplicated blocks from a page builder are all easy to miss in a styled browser and obvious in Lynx. ## No terminal? Use one of these instead - **[Lynx Viewer](https://www.delorie.com/web/lynxview.html)**, a long-running free service that shows a page roughly as Lynx would. Fine for a quick look at a public page. - **[SEO Browser](https://www.seo-browser.com/)** compares what a browser receives with what a crawler receives, and what JavaScript changes in between. - **Search Console's URL Inspection** shows the HTML Google actually fetched and rendered for your own pages. It's the authoritative view for Google specifically. - **Your own browser with JavaScript off.** Chrome's developer tools can disable JavaScript for the current tab; reload and see what's left. - **Accessibility tools.** The [WAVE](https://wave.webaim.org/) checker can show a page without styles, and a free screen reader such as [NVDA](https://www.nvaccess.org/) on Windows, or VoiceOver built into Macs and iPhones, reads your page in the same linear order Lynx shows. ## A five-minute routine 1. Dump your home page, a key service or product page, and one article. 2. Check each one for its main content, a sensible first screen, meaningful headings, and descriptive links. 3. Run the link list on the home page and confirm your important pages appear in it. 4. Repeat after every redesign, theme update, or new plugin. **My rule of thumb: if someone can read your website in Lynx, you're way more than halfway there.** If the Lynx view of an important page is thin, that's the starting point for [JavaScript SEO](https://christopherabraham.com/services/javascript-seo/) work. For the accessibility side of the same coin, see [website accessibility without overlays](https://christopherabraham.com/guides/accessible-websites/). ## Sources - [Lynx project home](https://lynx.invisible-island.net/) - [Google Search Central: JavaScript SEO basics](https://developers.google.com/search/docs/crawling-indexing/javascript/javascript-seo-basics) - [Search Console Help: URL Inspection tool](https://support.google.com/webmasters/answer/9012289) - [OpenAI: Overview of OpenAI crawlers](https://platform.openai.com/docs/bots) **[Christopher Abraham](https://christopherabraham.com/about/)** is an independent SEO consultant in Arlington, Virginia, Top Rated on Upwork with 100% Job Success, who writes from his own client work and checks every claim against primary sources. He has built websites since 1994 and practiced SEO since 1998. [How these pages are written](https://christopherabraham.com/about/editorial-policy/) · [LinkedIn](https://www.linkedin.com/in/chrisabraham) · [Upwork](https://www.upwork.com/freelancers/chrisjabraham) --- Source: https://christopherabraham.com/guides/glossary/ Updated: 2026-10-06 # Glossary of SEO and AI search terms By [Christopher Abraham](https://christopherabraham.com/about/) · Published October 6, 2026 The vocabulary of search and AI visibility, one or two sentences per term. Every entry carries an anchor, so a link can point straight at the definition you need. **AEO (answer engine optimization)** Shaping pages so that systems which reply with an answer rather than a list of links, from featured snippets to voice assistants to chatbots, can lift a passage and credit it. **AI Overviews** The generated summaries Google places on many results pages, citing the sites they borrowed from. AI Mode extends the idea into a back-and-forth conversation. **Alt text** Words attached to an image in the markup that describe it for people using screen readers and give crawlers a clue about the picture's subject. **Anchor text** The visible, clickable wording of a hyperlink. When it names the destination's topic, both readers and crawlers know what they'll find. **Bing Webmaster Tools** Microsoft's no-cost dashboard for owners, covering crawl, index, and keyword data from Bing, whose index also supplies Copilot and several other assistants. **Canonical tag** A line in a page's head nominating which address should represent a set of duplicate or close copies. Google weighs it heavily but may overrule it. **CLS (Cumulative Layout Shift)** The Core Web Vital that scores how far things jump around on screen during loading. Aim for 0.1 or lower. **Core Web Vitals** Three experience scores Google tracks, LCP, INP, and CLS, taken from Chrome users over a rolling four weeks. **Crawl budget** The practical ceiling on how much of a site a search engine will fetch in a given stretch of time. A concern for very large sites and those spawning endless URL variants. **Crawler** Software that requests pages on its own to read them, such as Googlebot, Bingbot, GPTBot, or ClaudeBot. People also say bot or spider. **Entity** A single real-world thing, whether a company, person, place, or product, that search engines and AI models recognize as one concept however a page happens to phrase its name. **Faceted navigation** Category filters for attributes like color, size, or price. Left open to crawlers, the combinations can balloon into millions of addresses. **Field data** Speed and responsiveness figures gathered from actual visits, as opposed to one synthetic test run on a single machine. **GEO (generative engine optimization)** Work aimed at how generative AI tools portray and cite a company or a page. In practice it overlaps almost entirely with AEO and AI SEO. **Google Business Profile** The free Google listing that puts a business on Maps and in local results, carrying its hours, categories, photos, and reviews. **hreflang** Markup that pairs each language or country edition of a page with the audience that should see it. **Index** The store of pages a search engine considers eligible for results. Nothing ranks until it's in there. **IndexNow** A shared ping system: when a page appears, changes, or disappears, the site tells Bing, Yandex, and other members right away instead of waiting for a recrawl. **INP (Interaction to Next Paint)** The Core Web Vital that times the gap between a tap, click, or keystroke and the screen's visible response. Aim for 200 ms or lower. **JSON-LD** Google's preferred way to write structured data: a JSON object inside its own script element, kept apart from what visitors see. **LCP (Largest Contentful Paint)** The Core Web Vital that times how long the biggest image or text block in the opening view takes to finish drawing. Aim for 2.5 s or lower. **llms.txt** A suggested standard: a Markdown summary kept at the top level of a domain, pointing language models to the pages most worth reading. **noindex** A directive, set in a meta tag or a response header, asking search engines to keep a page out of results. **Orphan page** A page nothing else on the site links to. Only a sitemap entry or an outside link can lead anyone to it. **Redirect chain** Several redirects strung together before the visitor arrives. Every extra step costs time and can weaken the signals passed along. **Rendering** Running a page's scripts to produce what a browser finally shows. Anything that exists only after this step can escape crawlers that skip it. **Rich results** Search listings dressed up with extra details drawn from structured data, like star ratings, prices, or breadcrumb trails. **robots.txt** A plain text file at the top of a domain that tells bots which folders to stay out of. It governs fetching; keeping a page out of results takes noindex. **Schema markup** Structured data written in the Schema.org vocabulary to spell out the people, organizations, places, and products on a page. **Search Console** Google's free owner dashboard: clicks and impressions, index status, Core Web Vitals, and alerts about problems it detects. **Soft 404** A URL that answers with a success code yet shows an empty or not-found page. Google files it with the real 404s. **Server-side rendering (SSR)** Assembling the complete HTML on the server so a crawler gets every word in the first response, no scripts required. **301 redirect** A permanent forwarding instruction from an old address to a new one, which passes nearly all of the old page's ranking signals along. **XML sitemap** A machine-readable list of the addresses a site wants crawled, often with the date each last changed. These terms are used throughout the [guides](https://christopherabraham.com/guides/) and [services](https://christopherabraham.com/services/) pages. **[Christopher Abraham](https://christopherabraham.com/about/)** is an independent SEO consultant in Arlington, Virginia, Top Rated on Upwork with 100% Job Success, who writes from his own client work and checks every claim against primary sources. He has built websites since 1994 and practiced SEO since 1998. [How these pages are written](https://christopherabraham.com/about/editorial-policy/) · [LinkedIn](https://www.linkedin.com/in/chrisabraham) · [Upwork](https://www.upwork.com/freelancers/chrisjabraham) --- Source: https://christopherabraham.com/case-studies/ Updated: 2026-10-06 # Case studies Each case explains the problem, my role, what I found, what was done and by whom, how it was checked, and where things stand. Clients are described by industry, never by name. ## Content crawlers couldn't see - [Equipment retailer: product details that loaded only on scroll](https://christopherabraham.com/case-studies/scroll-gated-products/). Magento and Hyvä, Alpine.js, and a backlink spike kept on its own track. - [Film review site: a consent tool that emptied every article](https://christopherabraham.com/case-studies/consent-banner/). A cookie platform blocking the script that displayed the reviews. - [Event discovery app: 2,000 pages with no way in](https://christopherabraham.com/case-studies/event-app-links/). A React app, a 13-page spec, and testable fixes. ## Modern stacks and migrations - [Junk removal company on a headless stack](https://christopherabraham.com/case-studies/headless-local/). Sanity, Vercel, and SEO changes merged through GitHub. - [Medical clinic: WordPress to Next.js](https://christopherabraham.com/case-studies/clinic-migration/). A decision for every legacy URL and an AI-assisted code review. - [Fly fishing shop: cleanup after a Shopify move](https://christopherabraham.com/case-studies/shopify-cleanup/). 3,400 broken URLs and duplicate product markup. ## Indexing at scale and recovery - [Trading card price site: 20,000 pages in the index](https://christopherabraham.com/case-studies/card-price-index/). Segmented sitemaps and parameter rules. - [Health-testing store: after the SEO plugin went dark](https://christopherabraham.com/case-studies/plugin-outage/). Recovery checked in Google and Bing. ## Entities, local, and AI search - [Custom closet brand: the company versus its first showroom](https://christopherabraham.com/case-studies/closet-locations/). Entity modeling and location pages. - [Therapy practice: a suspended Business Profile reinstated](https://christopherabraham.com/case-studies/profile-reinstated/). An evidence-first appeal. - [AI research company: accurate AI answers for job seekers](https://christopherabraham.com/case-studies/recruiting-answers/). A GEO audit for recruiting. ## The common thread Almost every case comes down to the same gap: what a business believes its site says versus what crawlers and AI systems actually receive. Finding that gap, proving it, and closing it is the work. If one of these sounds familiar, [tell me about your site](https://christopherabraham.com/contact/). Updated October 6, 2026 --- Source: https://christopherabraham.com/case-studies/scroll-gated-products/ Updated: 2026-10-06 # Equipment retailer: product details that loaded only on scroll An equipment retailer running Magento 2 with the Hyvä theme watched organic traffic slide for months. The odd part: non-brand category traffic was rising while brand searches and product pages fell. ## The engagement Forensic diagnosis and technical direction. The client's contractor owned implementation; I owned the evidence and the specification. ## What the crawl showed I crawled the site twice with Screaming Frog, once reading raw HTML and once rendering JavaScript, and compared extracted word counts by template. Category pages yielded thousands of words. Flagship product pages, each weighing more than 1.2 MB, yielded only 250 to 400. ## The mechanism The product template wrapped its specifications, FAQs, and reviews in Alpine.js directives that created those sections only when a shopper scrolled them into view: an `x-intersect` trigger around an `x-if` block. Googlebot renders pages in a tall viewport without scrolling the way people do, so those sections were never built. Search Console agreed: a selective cluster of product URLs sat in "Crawled, currently not indexed" while the rest of the site was fine. ## The second problem, kept separate During the same months, a burst of spam backlinks from cloud-hosting ranges arrived, along with a redirect fault. Tempting as it was to blame everything on one cause, I documented that track separately and requested fuller Search Console access to investigate it on its own evidence. ## Recommendations - Render product sections in the server HTML; keep scroll animation as an enhancement on top. - Remove the scroll gate on a test group of products first, so the effect is measurable before a sitewide rollout. - A separate cleanup plan for the backlinks and redirects. ## The lesson Page weight and word count can disagree wildly. When a heavy page yields little text to a crawler, look for content waiting on an interaction that bots never perform. More on this pattern under [JavaScript SEO](https://christopherabraham.com/services/javascript-seo/). **[Christopher Abraham](https://christopherabraham.com/about/)** is an independent SEO consultant in Arlington, Virginia, Top Rated on Upwork with 100% Job Success, who writes from his own client work and checks every claim against primary sources. He has built websites since 1994 and practiced SEO since 1998. [How these pages are written](https://christopherabraham.com/about/editorial-policy/) · [LinkedIn](https://www.linkedin.com/in/chrisabraham) · [Upwork](https://www.upwork.com/freelancers/chrisjabraham) Updated October 6, 2026 --- Source: https://christopherabraham.com/case-studies/consent-banner/ Updated: 2026-10-06 # Film review site: a consent tool that emptied every article for Google A WordPress site publishing film reviews in English and Italian had a strange split: Bing indexed it normally, while Google left almost every review out. No crawl errors, no manual action, just a long list of pages marked "Crawled, currently not indexed." ## The engagement A paid diagnosis for the owner, followed by a call to walk through what I found. ## The cause Each review's text sat inside jQuery UI tabs. The site's cookie consent platform was set to prior-consent blocking, holding back scripts until a visitor clicked Accept. One of the scripts held back was the one that initialized the tabs. Googlebot never clicks Accept. It visits every page as a visitor who has declined, so it rendered each review with the layout intact and the tab panels empty. Bing processed the pages differently, which explained the gap between the two engines. ## What made it worse - 97% of pages carried identical hardcoded H2 headings from the theme. - 95% of internal links had no anchor text at all. Even the parts Google could see said almost nothing that distinguished one review from another. ## Recommendations - Exempt content-building scripts from consent blocking, or put the review text directly in the HTML. Consent rules belong on analytics and advertising scripts, never on the article. - Generate H2s from each review's own content. - Add descriptive anchor text to internal links. ## How I confirmed it Side-by-side browser sessions, one consenting and one not, showed the tabs empty in the second. The blocked script was identified in the consent platform's settings and matched to the exclusion pattern. ## Why it matters Consent platforms are installed by legal and marketing teams and almost never tested against crawlers. If your site uses one, load a page with consent declined and check what's left. See [reading the Page indexing report](https://christopherabraham.com/guides/page-indexing-report/). **[Christopher Abraham](https://christopherabraham.com/about/)** is an independent SEO consultant in Arlington, Virginia, Top Rated on Upwork with 100% Job Success, who writes from his own client work and checks every claim against primary sources. He has built websites since 1994 and practiced SEO since 1998. [How these pages are written](https://christopherabraham.com/about/editorial-policy/) · [LinkedIn](https://www.linkedin.com/in/chrisabraham) · [Upwork](https://www.upwork.com/freelancers/chrisjabraham) Updated October 6, 2026 --- Source: https://christopherabraham.com/case-studies/event-app-links/ Updated: 2026-10-06 # Event discovery app: 2,000 pages with no way in A nightlife and event discovery app built on Create React App needed roughly 2,000 event pages in Google. After three months, Search Console showed impressions for the home page and close to nothing anywhere else. ## The engagement I diagnosed, wrote the specification, and verified the work. The founder's developer built the fixes. ## Four findings 1. **The home page was empty to crawlers.** The server returned a single empty root element; everything visible was drawn later by JavaScript. 2. **Event cards weren't links.** They navigated with click handlers, so there were no anchor tags for a crawler to follow. 3. **The event pages were orphans.** Ironically, the event pages already had server-side rendering and decent HTML. Nothing pointed to them. 4. **Canonicals pointed home.** The events and community sections declared the home page as their canonical, effectively telling Google they were copies of it. ## The deliverables A short plain-language summary for the founder, and a 13-page specification for the developer covering 12 items ranked from P0 to P3. Each item carried the evidence, why it mattered, the build steps, and an acceptance test. The P0 items: real anchor links on every event card, server rendering for the home page and the event feed, and indexing requests for priority pages once those shipped. ## Verification Every item had a test anyone could run, for example "event links appear in the server HTML of the feed" and "each section's canonical references itself." I checked the developer's work against those tests with a crawl and Search Console's live URL test. ## The takeaway Good pages can still be invisible if nothing links to them in a way crawlers understand. Real links in real HTML remain the foundation of discovery. More under [JavaScript SEO](https://christopherabraham.com/services/javascript-seo/). **[Christopher Abraham](https://christopherabraham.com/about/)** is an independent SEO consultant in Arlington, Virginia, Top Rated on Upwork with 100% Job Success, who writes from his own client work and checks every claim against primary sources. He has built websites since 1994 and practiced SEO since 1998. [How these pages are written](https://christopherabraham.com/about/editorial-policy/) · [LinkedIn](https://www.linkedin.com/in/chrisabraham) · [Upwork](https://www.upwork.com/freelancers/chrisjabraham) Updated October 6, 2026 --- Source: https://christopherabraham.com/case-studies/headless-local/ Updated: 2026-10-06 # Junk removal company on a headless stack: SEO through the repository A local junk removal company had a modern website: content in Sanity, hosting on Vercel, code in GitHub. It also had every classic problem of a client-rendered site, and with no SEO plugin to configure, every fix had to go through code. ## What I found - Client-side rendering left crawlers with thin initial HTML. - Many pages shared the same title and meta description. - Heading levels were skipped or repeated. - Missing pages answered with a 200 status, producing soft 404s. - Canonical tags and structured data were missing or inconsistent. ## Division of labor The developer handled the infrastructure: prerendered HTML and deployment changes. I set the order of work, specified what each page type needed, reviewed the developer's changes, and checked the production site independently. For metadata, I made the code changes myself in a pull request that the developer reviewed and merged. ## How the result was checked - Crawls before and after prerendering, comparing extracted text. - Raw HTML fetched from production to confirm content was present without scripts. - Search Console's live URL test on representative pages. - A sitewide review of titles, descriptions, canonicals, and status codes. ## Why this way of working helps On headless sites, SEO lives in templates, routes, and build settings. Working through the team's pull requests means every SEO change has a commit, a reviewer, and an easy rollback, and nobody has to wonder who changed what. ## Status Core fixes are live and verified, with a final audit under way. See [JavaScript and headless SEO](https://christopherabraham.com/services/javascript-seo/). **[Christopher Abraham](https://christopherabraham.com/about/)** is an independent SEO consultant in Arlington, Virginia, Top Rated on Upwork with 100% Job Success, who writes from his own client work and checks every claim against primary sources. He has built websites since 1994 and practiced SEO since 1998. [How these pages are written](https://christopherabraham.com/about/editorial-policy/) · [LinkedIn](https://www.linkedin.com/in/chrisabraham) · [Upwork](https://www.upwork.com/freelancers/chrisjabraham) Updated October 6, 2026 --- Source: https://christopherabraham.com/case-studies/clinic-migration/ Updated: 2026-10-06 # Medical clinic: WordPress to Next.js without losing the trail A clinical practice replaced its managed WordPress site with a new Next.js build hosted on Netlify. The developer built the site. My job was continuity: making sure people and search engines could follow every old address to the right new one, and investigating whatever went wrong after launch. ## A decision for every URL I reviewed the legacy URLs and reconciled the redirect map line by line. Each URL got one of four outcomes: unchanged, redirected to an existing destination, given a new migration redirect, or deliberately retired. I also separated faults the migration introduced from faults the old site already had, so neither the developer nor the old host took blame that wasn't theirs. ## Reading the code with an AI assistant Alongside crawls and exports, I ran a read-only analysis of the Next.js repository with an AI coding assistant. It surfaced thousands of image references still pointing at the old WordPress media library and traced them to a handful of central files. That became a short, concrete plan for the developer to move the media. No code was changed by the analysis. ## A conservative disavow I reviewed the backlink profile and rebuilt the disavow file to drop truly toxic domains while keeping legitimate ones. Over-disavowing throws away the very equity a migration is trying to keep. ## After launch Blurry images from the image CDN, script and stylesheet errors, instability, and analytics oddities all came up. When engagement dipped over a short window, the obvious story was that blurry images drove people away. I checked tracking, engagement, and stability separately before accepting any explanation, and found the data didn't yet support that one. ## The point Migrations rarely fail on launch day. They fail weeks later, through media still on the old host, missing redirects, and stories told too early. Read my [rules for 301 redirects](https://christopherabraham.com/guides/redirect-rules/) or see [migration services](https://christopherabraham.com/services/migrations/). **[Christopher Abraham](https://christopherabraham.com/about/)** is an independent SEO consultant in Arlington, Virginia, Top Rated on Upwork with 100% Job Success, who writes from his own client work and checks every claim against primary sources. He has built websites since 1994 and practiced SEO since 1998. [How these pages are written](https://christopherabraham.com/about/editorial-policy/) · [LinkedIn](https://www.linkedin.com/in/chrisabraham) · [Upwork](https://www.upwork.com/freelancers/chrisjabraham) Updated October 6, 2026 --- Source: https://christopherabraham.com/case-studies/shopify-cleanup/ Updated: 2026-10-06 # Fly fishing shop: cleaning up after Squarespace to Shopify A family-owned fly fishing retailer moved its store from Squarespace to Shopify. The new storefront looked better, but the number of indexed pages kept shrinking and search visibility slipped month by month. ## A four-part audit - **Duplicate product URLs.** Leftover Squarespace-style paths and Shopify's own collection paths were competing for the same products. - **More than 3,400 404s** from old URLs that were never redirected. - **A duplicated FAQ page.** - **Brand misspellings driving most organic traffic**, a sign the shop wasn't being found for the gear it sells. - **Broken and default meta descriptions** inherited from the theme. - **Spammy backlinks, slow mobile pages, and almost no presence in AI answers.** ## Hands-on work First, a pass through product titles, descriptions, metadata, and category assignments. Then structured data, done in a duplicate of the live theme so the store was never at risk. I added Organization markup and a Product block, then discovered the theme already emitted a more complete Product block of its own. I traced the overlap and left exactly one valid block. Review stars needed the reviews app's metafield namespace confirmed before they could be wired in correctly. ## Checks Structured data validated on sample product pages, crawls compared before and after, and every change previewed in the duplicate theme before publishing. ## Status The audit and the first product pass are delivered. Remaining items, including thin product descriptions and missing categories, are being reviewed with the owner before further edits. ## Lesson A platform move isn't finished when the new store launches. It's finished when every old URL lands somewhere useful and the new theme's markup is checked rather than trusted. See [ecommerce SEO](https://christopherabraham.com/services/ecommerce-seo/). **[Christopher Abraham](https://christopherabraham.com/about/)** is an independent SEO consultant in Arlington, Virginia, Top Rated on Upwork with 100% Job Success, who writes from his own client work and checks every claim against primary sources. He has built websites since 1994 and practiced SEO since 1998. [How these pages are written](https://christopherabraham.com/about/editorial-policy/) · [LinkedIn](https://www.linkedin.com/in/chrisabraham) · [Upwork](https://www.upwork.com/freelancers/chrisjabraham) Updated October 6, 2026 --- Source: https://christopherabraham.com/case-studies/card-price-index/ Updated: 2026-10-06 # Trading card price site: managing 20,000 pages in Google's index A new site publishing prices for more than 20,000 trading cards, generated programmatically and launched on an expired domain, was indexed quickly at first. Then whole sections began dropping out. ## The engagement Hourly technical SEO focused on crawling and indexing, working with the owner over Microsoft Teams and with access to the GitHub repository where the site is built. ## Thinking in collections A site like this can't be managed page by page. The useful questions are about groups: which page types deserve to be indexed, which URL variations the site's tools and filters create, and how a crawler reaches a card page five levels deep. ## What I put in place - **One sitemap per content type**, so Search Console reports coverage for each group on its own. - **A baseline by segment**, so every later change is judged against numbers rather than impressions. - **Robots rules for parameter-driven tools** whose endless URL variations add nothing to the index and pull crawl attention from the pages that matter. - **Lag-aware checks.** Reports trail reality, so live behavior gets checked before any change is called a success or a failure. - **The domain's past treated as one factor**, kept apart from the site's own technical issues. ## Working through the code Because the site is built by developers, fixes go through the repository. Seeing how URLs are generated lets me specify changes precisely instead of describing symptoms. Every recommendation reaches the owner in writing, with its evidence attached. ## Status Ongoing. I'm not claiming recovery numbers here; at this scale, indexing moves over weeks and months, and honest reporting means waiting for the trend. See [indexing repair](https://christopherabraham.com/services/indexing/). **[Christopher Abraham](https://christopherabraham.com/about/)** is an independent SEO consultant in Arlington, Virginia, Top Rated on Upwork with 100% Job Success, who writes from his own client work and checks every claim against primary sources. He has built websites since 1994 and practiced SEO since 1998. [How these pages are written](https://christopherabraham.com/about/editorial-policy/) · [LinkedIn](https://www.linkedin.com/in/chrisabraham) · [Upwork](https://www.upwork.com/freelancers/chrisjabraham) Updated October 6, 2026 --- Source: https://christopherabraham.com/case-studies/plugin-outage/ Updated: 2026-10-06 # Health-testing store: recovering after the SEO plugin went dark On a WooCommerce store that sells health tests, someone switched off the SEO plugin for a short time. Afterward, indexed pages, organic visits, and referrals from AI assistants all dropped. The owner isn't technical and needed the problem found, fixed, and the recovery demonstrated. ## The engagement Three paid milestones: diagnosis, fixes, and verification. Because the store handles protected health information, the work ran under a HIPAA agreement and an NDA. ## Why a few hours matter On WordPress, the SEO plugin quietly produces titles, descriptions, canonicals, robots directives, structured data, and the XML sitemaps. With it off, crawlers that visit see pages with no canonicals, default titles, and sitemaps that have vanished. Switching it back on doesn't erase what search engines recorded while it was off; they have to recrawl and reconsider. ## The work - URL Inspection on the priority product and information pages. - Crawl stats reviewed for changes in Googlebot's visit rate and what it fetched. - Sitemaps checked and resubmitted to Google Search Console and Bing Webmaster Tools. - A watch list of priority pages for the recovery period. - Structured data, Cloudflare settings, and ghost traffic in GA4 reviewed in the same scope. ## Proving recovery I tracked several indicators over time rather than trusting one dashboard, and took care to tell a stale report apart from a fault that was still active. Each milestone closed with a plain-language note for the owner, showing the before and after side by side. ## Status Recovery checks continue, with redirects, merchant structured data, and crawler policy as possible next steps. Related: [WordPress SEO](https://christopherabraham.com/services/wordpress-seo/) and [Search Console setup](https://christopherabraham.com/services/search-console/). **[Christopher Abraham](https://christopherabraham.com/about/)** is an independent SEO consultant in Arlington, Virginia, Top Rated on Upwork with 100% Job Success, who writes from his own client work and checks every claim against primary sources. He has built websites since 1994 and practiced SEO since 1998. [How these pages are written](https://christopherabraham.com/about/editorial-policy/) · [LinkedIn](https://www.linkedin.com/in/chrisabraham) · [Upwork](https://www.upwork.com/freelancers/chrisjabraham) Updated October 6, 2026 --- Source: https://christopherabraham.com/case-studies/closet-locations/ Updated: 2026-10-06 # Custom closet brand: separating the company from its first showroom A custom closet and wardrobe company with showrooms in several states ran everything from one website. Search engines kept merging the brand with its original showroom, and its location pages, Google Business Profiles, and town pages stepped on each other. ## The engagement A fixed-price project in milestones, delivering recommendations and structured data ready for the developer to install. ## What I delivered ### A clear entity model The company described as the parent organization, and each showroom as a branch of it, so search engines and AI assistants can tell which is the brand and which is one of its locations. The JSON-LD states that relationship explicitly. ### Organization and product markup Home page and product JSON-LD, validated and ready to install. ### Location pages matched to profiles Each Google Business Profile linking to a page about that specific showroom, rather than to the home page. ### Profiles and town pages with separate jobs Guidance for areas where a profile and a town page cover the same ground, so they reinforce each other. ### Services, regions, and breadcrumbs A structure for how services, regions, and showrooms link together, reflected in breadcrumb markup. ## Why it matters When every page and listing describes the business the same way, search engines can't tell the locations apart, and each one competes with the others. Distinct entities and distinct pages let every showroom rank in its own area while the brand ranks for itself. ## Status Delivered. See [schema markup and entity SEO](https://christopherabraham.com/services/schema/) and [local SEO](https://christopherabraham.com/services/local-seo/). **[Christopher Abraham](https://christopherabraham.com/about/)** is an independent SEO consultant in Arlington, Virginia, Top Rated on Upwork with 100% Job Success, who writes from his own client work and checks every claim against primary sources. He has built websites since 1994 and practiced SEO since 1998. [How these pages are written](https://christopherabraham.com/about/editorial-policy/) · [LinkedIn](https://www.linkedin.com/in/chrisabraham) · [Upwork](https://www.upwork.com/freelancers/chrisjabraham) Updated October 6, 2026 --- Source: https://christopherabraham.com/case-studies/profile-reinstated/ Updated: 2026-10-06 # Therapy practice: a suspended Business Profile restored Google suspended the Business Profile of a hypnotherapy office in western Canada. The practice depends on nearby people finding it, so the suspension left it close to invisible to the very clients most likely to book. ## My part Auditing the listing against the office's real records, assembling proof, writing the appeal, and seeing it through with Google. ## Reconcile the listing with reality Google suspends a listing when what it claims can't be squared with what Google is able to confirm. So I went field by field: the practice's legal and trading names, its street address, its categories, and whether it served clients on site. Anything on the listing that didn't match the paperwork was corrected before a word of the appeal was written. ## Lead with the best proof The supporting file contained the office lease, the practice's business licence, an invoice billed to that office, and the business card carrying the same name and address. I ordered them from most to least authoritative, so a reviewer would see the strongest proof first, and the appeal made no claim that one of those documents didn't back up. ## File the appeal The corrected listing and the ordered proof reached Google as one package, so the reviewer saw the fixes and the evidence side by side. ## Result Google restored the profile in February 2025. ## How I handle these now Google gives no timetable and no guarantee for appeals, and two cases that look alike can end differently. For that reason a suspension now starts with a paid written assessment: the likely trigger, the proof Google will expect, and an honest view of the odds. If an appeal makes sense, it's quoted on its own. I take the same approach with harder situations, like duplicate records, listings stranded with a former agency, or an established listing that should be repaired rather than replaced. See [local SEO and Google Business Profile](https://christopherabraham.com/services/local-seo/). **[Christopher Abraham](https://christopherabraham.com/about/)** is an independent SEO consultant in Arlington, Virginia, Top Rated on Upwork with 100% Job Success, who writes from his own client work and checks every claim against primary sources. He has built websites since 1994 and practiced SEO since 1998. [How these pages are written](https://christopherabraham.com/about/editorial-policy/) · [LinkedIn](https://www.linkedin.com/in/chrisabraham) · [Upwork](https://www.upwork.com/freelancers/chrisjabraham) Updated October 6, 2026 --- Source: https://christopherabraham.com/case-studies/recruiting-answers/ Updated: 2026-10-06 # AI research company: accurate AI answers for job seekers An AI research company was hiring engineers in Palo Alto and across the Bay Area. Engineers now ask ChatGPT, Perplexity, and Google's AI features who's hiring and what they pay, so the company wanted to know how it showed up in those answers. ## The engagement A defined AI search visibility audit with recommendations. ## What I examined - Whether, and how, the company appeared when assistants were asked the questions engineers ask about jobs, employers, and compensation. - Which sources those answers relied on, and where the company's own information was absent or outweighed. - How consistently the company's name, description, and relationship to its related domains were stated across the web. - Careers content across two company domains. ## What I recommended - Careers pages and FAQs rewritten around candidates' actual questions. - Metadata and structured data for careers and company pages. - Compensation facts drawn from the company's approved figures, stated clearly enough for assistants to quote correctly. - Third-party references worth pursuing, since assistants treat outside sources as corroboration. ## Why it's a useful example Nothing here was about selling a product. The goal was to be described accurately to a specific audience making an important decision. The same audit applies wherever people consult an assistant before acting: choosing a vendor, an employer, an investment, or a professional. ## What carries over Careers questions are a clean test of AI visibility because the facts are specific and checkable: locations, roles, pay ranges, and benefits. ## Status Recommendations delivered; the engagement is paused. See [AI SEO, GEO, and AEO](https://christopherabraham.com/services/ai-search/) or the [AI search readiness checklist](https://christopherabraham.com/guides/ai-search-checklist/). **[Christopher Abraham](https://christopherabraham.com/about/)** is an independent SEO consultant in Arlington, Virginia, Top Rated on Upwork with 100% Job Success, who writes from his own client work and checks every claim against primary sources. He has built websites since 1994 and practiced SEO since 1998. [How these pages are written](https://christopherabraham.com/about/editorial-policy/) · [LinkedIn](https://www.linkedin.com/in/chrisabraham) · [Upwork](https://www.upwork.com/freelancers/chrisjabraham) Updated October 6, 2026 --- Source: https://christopherabraham.com/about/ Updated: 2026-10-06 # About Christopher Abraham I'm an independent SEO consultant in Arlington, Virginia, across the Potomac from Washington, DC. I've called the DC area home since college, and I take clients across the United States, Canada, the United Kingdom, Ireland, Australia, and New Zealand. ## What I'm working on now - Testing how AI assistants describe businesses and people, and fixing what they get wrong. - Finding content that JavaScript frameworks hide from crawlers, on React, Next.js, Alpine.js, and headless builds. - Making SEO changes through pull requests on GitHub, alongside the developers who own the code. - Reading repositories with AI coding assistants to plan migrations before anything breaks. - Writing structured data that ties organizations, locations, and people together as entities. ## The short version | Full name | Christopher James Abraham | | Role | Independent SEO consultant | | Based in | Arlington, Virginia 22204, United States | | Specialties | Technical SEO audits, indexing, JavaScript SEO, Core Web Vitals, Cloudflare, migrations and 301 redirects, schema markup, AI search (GEO and AEO), WordPress, ecommerce, and local SEO | | Timeline | Web development since 1994, SEO since 1998, blogging since 1999 | | Upwork | [Christopher A.](https://www.upwork.com/freelancers/chrisjabraham): Top Rated, 100% Job Success, $200K+ earned, 127 jobs, 4,089 hours (as of October 2026) | | Education | BA in American Literature, The George Washington University; a year at the University of East Anglia in Norwich, England | | Email | [cja@well.com](mailto:cja@well.com) | ## How I got here My first online home was a text-based conferencing system, and I've kept an account on The WELL, one of the oldest online communities, for decades. That's where my email address comes from. I built my first websites in 1994, hand-coding HTML for anyone who asked, and started optimizing them for search engines in 1998. I've worked with open-source content management systems since 1999: Movable Type, Plone, Drupal, WordPress, and plenty of platforms that no longer exist. Before the agencies, I started as the image center administrator at PNI, Picture Network International, part of SRA in Arlington, then became an associate at Rheingold Associates, the virtual community consultancy of Howard Rheingold, a Linux system administrator at Caucus Systems running professional online events, and a builder of websites for clients that included the Treasury Department. In the agency years I was the technology strategist at New Media Strategies, one of the first firms to treat a brand's online reputation as something to manage, and then a senior account supervisor on the interactive team at Edelman's public affairs practice in Washington. In 2006 I developed long-tail blogger outreach: rather than pitching a handful of famous bloggers, my team researched and pitched thousands of niche writers who actually cared about a client's subject, treating it as earned media, closer to public relations than to paid social. I co-founded Abraham Harrison, a digital marketing firm that ran search, content, and outreach programs from Washington, Portland, and Berlin. It ran as a fully virtual company before that was normal: two founders and fourteen contractors across the United States, Europe, India, and Africa, spread over ten time zones. Google liked the setup enough to publish [a case study about the firm](https://static.googleusercontent.com/media/www.google.com/en//a/help/intl/en/admins/case_studies/pdf/abraham_harrison_cs.pdf), quoting me as president and COO. Later I was team lead for special projects at Reputation.com, working with high-profile individuals on search results that mattered to them. A word about New Media Strategies, because it shaped everything after. I was employee number 13 there, from 2002 to 2006, in an open-plan former newsroom in a Rosslyn tower, back when word-of-mouth marketing meant joining online communities and becoming a real, contributing member of them for months before a client's name ever came up. The firm grew past 120 people and trained every new hire, me included, as if it were a discretion bootcamp. In 2002 I helped develop the practice that became online reputation management, which I've done in one form or another ever since. I've written the whole story up, tongue firmly in cheek, as ["I was a teenage Russian troll."](https://www.linkedin.com/pulse/i-teenage-russian-troll-chris-abraham) I was neither a teenager nor Russian. And yes, working under a nom de guerre is an old habit. I'm proud to work alongside two firms: as a digital strategist with [Meritus Media](https://meritusmedia.com/), a digital PR and marketing agency, where search, Google Business Profile, and reputation work sit beside the PR, and as a business partner at [Stainless Communications](https://stainlesscommunications.com/), a senior-led brand, PR, web, and growth firm. My independent practice runs mostly through Upwork and centers on the technical end of search: why a page isn't indexed, why a template hides content from the crawler, why a migration lost traffic, and how a business shows up when someone asks an AI assistant about it. ## What I'm known for - **Forensics.** I like the cases nobody else could explain. The answer is usually a mechanism: a script that never runs for Googlebot, a canonical pointing at the wrong page, a redirect chain that drops equity at every hop. - **Working inside messy, inherited sites.** Twenty-year-old WordPress installs, half-finished migrations, themes three developers have patched. I'm comfortable there. - **Translating between marketers and engineers.** I write tickets developers trust and summaries executives read. - **Using AI with judgment.** I use AI tools for metadata drafts, topic gap analysis, FAQ coverage, and repository analysis. Every output gets checked by a human who knows what good looks like. ## Teaching and speaking I've been a guest lecturer at Georgetown University's School of Continuing Studies on organic search engine optimization, online reputation management, and influencer marketing. I taught blogging courses, SEO included, at The Writer's Center in Bethesda, lectured on blogging and viral strategy for Columbia University's executive public affairs program, and spoke on a South by Southwest panel. Forbes once listed me among its top 50 social media power influencers. ## Outside work I studied literature, French, and German, I captained my high school speech and debate team, and I write every day. That background shows in the work: findings argued like a brief, with the strongest evidence first and nothing claimed that the data won't support. I'm a longtime member of Renaissance Weekend, have rowed out of the Potomac Boat Club, and spent years volunteering as a sous chef at Miriam's Kitchen in Washington. ## Published as Chris Abraham Most people know me as Chris, and nearly two decades of my bylines carry that name. Christopher Abraham and Chris Abraham are the same person: - [LinkedIn](https://www.linkedin.com/in/chrisabraham), with my full work history. - [My Biznology column](https://biznology.com/author/chrisabraham/), a weekly marketing and search column for years. - [The Huffington Post](https://www.huffpost.com/author/chris-abraham), where I wrote as a contributor. - [Muck Rack](https://muckrack.com/chrisabraham), which collects my articles across publications. - Earlier columns for Advertising Age's DigitalNext, Socialmedia.biz, and Marketing Conversation. There's more to the story than search: Honolulu, crew, Freemasonry, hyperfiction, Renaissance Weekend, and a Reddit community of slow joggers. It's all [off the clock](https://christopherabraham.com/about/off-the-clock/). ## Check my work - [My Upwork profile](https://www.upwork.com/freelancers/chrisjabraham), with job history and client feedback. - [My LinkedIn profile](https://www.linkedin.com/in/chrisabraham). - [Case studies](https://christopherabraham.com/case-studies/), written up with the evidence and anonymized. - [Guides](https://christopherabraham.com/guides/) that show how I think about indexing, audits, schema, and AI search. Updated October 6, 2026 --- Source: https://christopherabraham.com/about/off-the-clock/ Updated: 2026-10-06 # Off the clock Clients hire me to read crawl data, but it helps to know the fellow reading it. I've been curious about nearly everything for as long as I can remember, and I've never been very good at picking just one thing. Here's the rest of the story, told plainly and with as little bragging as I can manage. ## A Honolulu boyhood I grew up in Honolulu, in Salt Lake, the neighborhood next to the airport (not the one in Utah, whatever the AI summaries say). I went to Aliamanu Elementary, right there in the neighborhood, from kindergarten through sixth grade, then to Saint Louis School for seventh through twelfth grade, where I somehow ended up student body president while also doing JROTC, the Ranger Club, wrestling, the newspaper, the yearbook, the photography club, and the Bullseye Club. I ran out of high school courses before I ran out of high school, so I took philosophy classes at Chaminade University, which shared the school's campus. My father was a photographer, and my mother had traveled through Europe and the United States before I came along, so hopping on a plane was simply normal in the Abraham household. Once, when an eruption was announced, my dad pulled me out of elementary school to fly to the Big Island and see it. Tramping around on lava flows at nine years old makes a lasting impression on a kid. ## College, crew, and a year abroad Washington got me first through Close Up, a summer program on politics for high school students. Then a GW catalog arrived at home in Honolulu with a photo of the crew rowing across a glassy, misty Potomac at dawn, and that was that. I came to Washington for The George Washington University. I started in political science, switched to American literature, and minored in creative writing; I'm told mine was one of the last American literature degrees GW ever granted. I'd never rowed a stroke, but I'd seen Oxford Blues in high school, so naturally I rowed heavyweight crew, was a founding father of the Phi Kappa Psi chapter on campus, hosted a weekly house music and comedy show on WRGW radio, interned in the Washington bureau of The Baltimore Sun, and edited the English department's newsletter. My adviser, the English professor Robert Combs, steered me toward a year abroad, so midway through I spent a year at the University of East Anglia in Norwich, England, reading postwar American literature. I rowed for UEA too, worked the door as a bouncer at the student nightclub, spent weekends in Paris whenever the budget allowed, and once left class for two weeks to trek the Kathmandu Valley. Then I took a year off before my senior year and went home to Honolulu to work as a commercial photographer, studying French at the University of Hawaiʻi on the side. Later I sold my work as a stock photographer through an agency in New York. GW Today, the university's news site, once [wrote up some of this story](https://gwtoday.gwu.edu/marketing-online-and-around-world), and I'll admit I still think of old buff and blue every time I get all the cartoons in The New Yorker. ## Languages, mostly attempted French in Hawaii, German at the Goethe-Institut in Washington and again in Berlin. My German is solidly A2, which is enough to order lunch with confidence and apologize for it fluently. Abraham Harrison, the firm I co-founded, ran for a time from Washington, Portland, and Berlin, so the lessons got real use. ## Online before it was a career Back when getting online meant a modem and patience, I joined ArtsWire, then The Meta Network, one of Washington's first online communities, then Brainstorms, and The WELL, where I've kept a home ever since; that's why my email ends in well.com. None of it would have happened without my first job out of college: administering the image center at PNI, Picture Network International, part of SRA in Arlington. Down in the basement of the same building worked Metasystems Design Group, which ran The Meta Network at tmn.com and doubled as an internet service provider. That basement is where I met my true mentors, a father and son: [Frank Burns](https://en.wikipedia.org/wiki/Frank_L._Burns) and his son Scott Burns. Frank was a retired Army lieutenant colonel with a Silver Star from Vietnam, widely credited with the "Be All That You Can Be" slogan, and the director of the Army's Task Force Delta, the unconventional brain trust Jon Ronson later wrote about in The Men Who Stare at Goats. In retirement Frank led Metasystems Design Group, known for the Caucus conferencing software, with Scott beside him building tools for people to think together online, and I later worked in a support role on Frank's New MetaNet. Between the two of them I learned most of what I believe about online community, and a great deal about everything else. I built websites by hand for anyone who'd let me, including sites for a consulting firm, a production company, the Shadow Conventions, and the Treasury Department, and I worked as a Linux system administrator at Caucus Systems, hosting professional virtual events on its conferencing software. I also co-taught, with Ginny Little, one of the first fully accredited online high school courses: creative writing for EFA, a magnet program of the Kalamazoo Public Schools in Michigan, with more than sixty students logging in from around the area. The lesson I took from it, and later wrote a column about, is that children naturally want to show what they know. And I became an associate of Howard Rheingold, the author of The Virtual Community, at Rheingold Associates; [my old team bio is still up](https://rheingold.com/Associates/team_abraham.html), which delights me more than it should. I published a memetic lexicon at Memes.org, founded MemeSpace, a free online community of more than 800 "memebers" that The New York Times once wrote about, running its first version on Caucus, which its creator, Charles Roth, generously let me use for free, and ran a little online publication called The Caffeinated Magazine. Caucus deserves its own footnote in internet history: Charles Roth conceived and built it at Wayne State University in the early 1980s, then formed Camber-Roth to distribute it, and it went on to power web-based learning, collaborative forums, and a good many of the first virtual communities. I'm happy to be one of the people carrying that story forward. These days I'm the founding moderator of [r/slowjogging](https://www.reddit.com/r/slowjogging/), a Reddit community of more than 16,000 people practicing the gentle, smile-while-you-run method of the late Japanese exercise physiologist Hiroaki Tanaka. After nine years it still has nothing to sell: no coaching funnel, no membership tier, no merchandise. Watching ideas spread and mutate online for as long as I have turns out to be excellent training for understanding how AI assistants pick up and repeat what they read. > "I met Chris … as part of my work for Arts Wire, an online network for artists. He was an early adopter of the Web and has context." Beth Kanter, master trainer and nonprofit innovator in networks, learning, and social media ## Hyperfiction Before anybody called it electronic literature, I was writing it. I was one of the eight writers of Name is Scibe, a collaborative hyperfiction that Judy Malloy, one of the true pioneers of the form, began on Arts Wire and The WELL. [Her own history of the piece](http://www.judymalloy.net/intaud.html) lists the writers, and [The WELL still hosts the original text](https://people.well.com/user/jmalloy/scibe/), my entries included. Then I led my own: 8: A Collaborative Hypernarrative Fiction, or Collabor8, written over a full year by a group of friends, with each story broken into linked fragments that readers wandered through in their own order. Pieces of it survive as found poems with titles like "Chocolate City," "TheBUS," and "Blue plastic kayaks." Afterward I started Coelaboration, a site for collaborative writing with a featured writer each month and the beginnings of yet another hypernarrative. It turns out that writing stories as a web of linked pages is decent preparation for a career thinking about how crawlers move through websites. ## Lodge, rite, and parish I'm a Master Mason at Naval Lodge No. 4 on Capitol Hill, the oldest continuously operating lodge in the District of Columbia, first chartered in 1805. I'm also a 32nd degree Scottish Rite Mason in the Southern Jurisdiction, whose headquarters, the House of the Temple, sits on 16th Street in Washington. Before that I served on the vestry of St. Monica and St. James, an Episcopal parish on Capitol Hill, and, naturally, I ended up as its webmaster too. ## Renaissance Weekend I've been a member of Renaissance Weekend for many years, though I haven't made it to one in a while: invitation-only, off-the-record gatherings where a physicist, a poet, a senator, and a teenager might share a panel. I've moderated sessions and worn the blue dot. It's the closest thing I know to a polymath's playground, and it's taught me that the best ideas come from people outside your own field. At one Renaissance Weekend I shared a panel with Vint Cerf and Bob Kahn, the two engineers who designed the internet's core protocols. Just those two and me. At others I spent a lot of happy hours with Esther Dyson, the investor and early internet thinker who trained as a backup cosmonaut, in her trademark jeans. Away from Renaissance Weekend, the early internet has been a small and generous world. Howard Rheingold brought me into his consultancy as an associate, and I once found myself at a house party at Guy Kawasaki's home in Silicon Valley, which is about as Valley as an evening gets. ## Miriam's Kitchen For years I volunteered as a sous chef at Miriam's Kitchen, which works to end chronic homelessness in Washington. Cooking for guests who deserved a good meal was the most useful work I did all week, nobody in that kitchen cared about my rankings, and I hope to be back at the cutting board one day. ## On the water and on the road I was a senior member of the Potomac Boat Club, founded in 1869 and one of the oldest rowing clubs in the country, and I may well be again someday. For years I kept my own racing shell, a heavyweight Hudson carbon single, at Thompson Boat Center, and I eventually gave it to the club to join its fleet of training singles, where it can teach somebody else what Oxford Blues taught me. On land I'm a slow jogger, which is exactly as fast as it sounds. If I'm honest, these days it's not enough jogging and plenty of modding. ## Teaching and talking I've been a guest lecturer at Georgetown, GW, American University, the University of Maryland, the University of Oregon, and Columbia, and I taught blogging and early SEO at The Writer's Center in Bethesda. I've been called on by BBC World Service and CNN Radio to talk about technology and the internet, and I spoke on a panel at South by Southwest. ## Why any of this matters to you I spent a good part of my career on the bleeding edge: online events before anyone had heard of webinars, hyperfiction before e-lit had a name, memes before they were jokes, reputation management before it was an industry. These days I'm happy on the bleedy edge, early enough to put new tools to work for clients and seasoned enough to know which ones have earned it. A polymath is a big word for a modest man, so I'll settle for generalist with a specialty. Literature taught me to read closely, photography taught me to notice what's in the frame and what isn't, rowing taught me that nothing moves unless everyone pulls together, and the lodge taught me patience with ritual and process. All of it shows up when I'm looking at your site. Back to the [work side of my story](https://christopherabraham.com/about/), or [say hello](https://christopherabraham.com/contact/). Updated October 6, 2026 --- Source: https://christopherabraham.com/about/editorial-policy/ Updated: 2026-10-06 # How these pages are written and checked Everything on this site is published by me, Christopher Abraham, and I'm responsible for every word of it. Here's how the guides, case studies, and service pages are made, so you can decide how much to trust them. ## Written from the work The case studies describe engagements I worked on myself: the problem, my role, what I found, what was done and by whom, and where it stands. The guides come from the same work. When I explain how to read the Page indexing report or how to lock down a domain that sends no email, it's because I've done it for clients or for my own sites, often in the same week. ## Primary sources for every factual claim Where a guide states how Google, Bing, a standard, or a protocol behaves, it links to the primary documentation: Google Search Central, Bing Webmaster Guidelines, the W3C's accessibility standards, the RFCs that define email records, and the specifications for files like llms.txt. Those links are listed under "Sources" at the end of each guide, and in the page's structured data as citations. When the official documentation and common practice disagree, I say so. ## How I use AI tools I use AI assistants the way I'd use a capable junior colleague: to draft outlines and first passes, to check code and markup, and to build and test this site's generator. I don't publish anything they produce until I've read it, corrected it, and checked its claims. Two rules are absolute: - **Personal and biographical details come only from my own records** and verifiable published sources, never from an AI summary. AI search tools have confidently told the world things about me that aren't true, and none of those get a second life here. - **Technical claims are checked against primary documentation**, not against what an assistant remembers. ## Clients and confidentiality Case studies describe clients by industry and problem, never by name, and leave out anything that could identify them: addresses, revenue, account details, and screenshots of private dashboards. Where a client's engagement is ongoing or paused, the case study says so. I don't claim results I can't show, and I don't round up. ## Quotes and testimonials Quotes from clients and colleagues are reproduced as written, with attribution. Where I've shortened a quote, an ellipsis marks the cut. Upwork figures, such as my Job Success Score and job counts, are copied from my profile with the date they were taken, and the profile itself is linked so anyone can check the current numbers. ## Independence - No affiliate links, sponsored posts, or paid placements, anywhere on the site. - Tools and platforms are named because I use them or because clients run on them, not because anyone pays me to mention them. - The firms I'm affiliated with are named on the About page, so you can weigh any recommendation with that in mind. ## Dates and updates Every guide shows when it was published and when it was last updated. Search changes quickly, so I revise guides when Google, Bing, or a standard changes, and the updated date moves with the revision. Pages describing my own memberships and activities use past and present tense carefully, and I correct them when something changes. ## Corrections If you find an error, email [cja@well.com](mailto:cja@well.com) with the page and what's wrong. I'll check it against the source, fix it if you're right, and update the page's date. Significant corrections to a guide are noted on the guide itself. ## Who's behind the site This is a one-person practice. My background, credentials, and the third-party sources that confirm them are on the [About page](https://christopherabraham.com/about/), and the life behind the work is [off the clock](https://christopherabraham.com/about/off-the-clock/). You can also find me on [Upwork](https://www.upwork.com/freelancers/chrisjabraham) and [LinkedIn](https://www.linkedin.com/in/chrisabraham), or [get in touch directly](https://christopherabraham.com/contact/). Updated October 6, 2026 --- Source: https://christopherabraham.com/about/colophon/ Updated: 2026-10-06 # Colophon Book publishers end a fine edition with a colophon, a few lines on the type, the paper, and the press. Here are the equivalent details for this website. ## Look and type The design is deliberately plain, after the classic Plone theme: a row of tabs, a breadcrumb trail, and generous black text in Verdana. The CA monogram and the social sharing card were drawn in code with Python and the Pillow imaging library. My name is set in burnt orange, page titles in blue, and section headings in teal, and every one of those colors clears the 4.5 to 1 contrast ratio that accessibility guidelines ask for. ## Under the hood Each page is a hand-written HTML file with a few lines of metadata on top. A short Python script assembles them into the finished site and generates the extras machines look for: a Markdown version of every page, llms.txt and llms-full.txt, an XML sitemap and a readable one, RSS and Atom feeds, and structured data describing every page, every guide's sources, and me. The script also refuses to publish anything that breaks the house rules, from title length to repeated sentences to any slip into the royal plural. I built it in a terminal session from a ThinkPad X220, connected over SSH to a DigitalOcean droplet, with Claude Code, Anthropic's AI coding assistant, as my collaborator. I decided what the site would say and checked every fact in it; the assistant handled much of the typing. The rules for that collaboration are spelled out in [how these pages are written](https://christopherabraham.com/about/editorial-policy/). ## Where it lives GitHub Pages serves the static files over HTTPS, and Cloudflare handles DNS. Nothing on the server runs code, which keeps the site fast and leaves nothing to hack. Google Analytics is the one script on the page, with advertising features off and no analytics cookies for visitors in Europe and the UK; the [privacy page](https://christopherabraham.com/privacy/) has the details. ## How it's checked - Every page read in Lynx, the text-only browser, as described in [the Lynx test](https://christopherabraham.com/guides/lynx-test/). - PageSpeed Insights scores of 100 for performance, accessibility, best practices, and SEO on mobile and desktop, plus 3 of 3 for agentic browsing, as of October 6, 2026. - Search Console and Bing Webmaster Tools, with IndexNow notifying Bing whenever a page changes. ## Code and launch The source is public at [github.com/chrisabraham/christopherabraham](https://github.com/chrisabraham/christopherabraham). The site launched on October 6, 2026, the same day the first line of it was written. Updated October 6, 2026 --- Source: https://christopherabraham.com/hire-me/ Updated: 2026-10-06 # Hire me Every engagement follows the same arc: a defined question, a paid audit that answers it, a ranked plan, the fixes, and a verification pass once the fixes are live. Here's how each step works and what I need from you. ## Two ways to hire me - **On Upwork.** Most of my clients hire me through [my Upwork profile](https://www.upwork.com/freelancers/chrisjabraham). Upwork handles contracts, time tracking, invoicing, and payment protection for both sides. Hourly and fixed-price contracts both work there. - **Directly.** Email [cja@well.com](mailto:cja@well.com) and I'll send a written scope and an invoice. Direct engagements are paid in advance: the audit up front, retainers at the start of each month. ## The process 1. **A short conversation.** You tell me the symptom; I ask what changed, when, and who has access to what. A few emails or a [30 minute call](https://calendly.com/chrisabraham/30) is usually enough. 2. **A written scope.** The questions the audit will answer, what you'll receive, the access I'll need, the timeline, and the price. 3. **The audit.** Crawls, Search Console and Bing Webmaster Tools data, rendered HTML, server responses, and whatever else the question calls for. You receive a findings report with the cause, the evidence, and a ranked list of fixes. 4. **The fixes.** I make the changes I have access to, such as metadata, redirects, schema, plugin settings, and Cloudflare rules. For everything that needs a developer, I write tickets with steps and acceptance criteria. 5. **Verification.** Once changes ship, I check the live site, request recrawls where they help, and watch the reports until the trend is clear. ## What I need from you - Access to Google Search Console and, if you have it, Bing Webmaster Tools. Full user access is ideal; I'll explain why when it matters. - Read access to analytics, usually GA4. - A content management login with a role that fits the work, or a staging copy. - An introduction to whoever deploys code, if that isn't you. - A named person who answers questions and approves changes. ## Where the work lives I keep every engagement in writing: Upwork messages, email, or your project tool, whether that's Basecamp, Asana, Jira, or a shared Google Drive folder. Calls are welcome for kickoff and walkthroughs, and each call gets a written follow-up so decisions survive. A written record makes the work easier to review, easier to hand to a developer, and easier to pick up six months later. ## Pricing I quote hourly or a fixed price per milestone, whichever fits the job. Audits are scoped and priced before they start, so you know the cost of an answer before you commit to it. Retainers cover a set number of hours each month with a monthly report. My current hourly rate is on [my Upwork profile](https://www.upwork.com/freelancers/chrisjabraham). ## What I sell, and what nobody can I sell expertise, diagnosis, and hands-on work. Rankings, indexing decisions, AI answers, and Google Business Profile reviews belong to the platforms, and each one decides on its own schedule. So I commit to the work and the evidence, and I report honestly on what the platforms do in response. Questions about time zones, access, and invoicing are answered in the [FAQ](https://christopherabraham.com/faq/). Ready to start? Head to [contact](https://christopherabraham.com/contact/). Updated October 6, 2026 --- Source: https://christopherabraham.com/faq/ Updated: 2026-10-06 # Frequently asked questions Practical answers about how an engagement runs. For the overall process, see [Hire Me](https://christopherabraham.com/hire-me/). ### How long does an SEO audit take? Most audits take one to two weeks from the day I have access. Large sites, sites with many subdomains, or questions that need server logs take longer, and the scope states the timeline up front. ### What do I receive at the end of an audit? A written findings report: the question, what I examined, what I found, the evidence for each finding, and a prioritized list of fixes with an owner for each one. Developer items come as tickets with acceptance criteria. I walk you through it on a call if you'd like. ### Do I have to hire you through Upwork? No. Upwork is convenient for many clients because it handles contracts and payments, and that's where my reviews live. You can also hire me directly by email, with payment in advance. ### What access will you need? Usually Google Search Console, Bing Webmaster Tools, GA4, and a login for your content management system. For JavaScript and headless sites, read access to the code repository helps a great deal. I'll list exactly what's needed in the scope. ### Will you change things on my live site? Only with your approval, and only changes that are in scope. Theme and template work happens on a staging site or a duplicate theme first. Every change I make is logged so you can see what moved and when. ### Can you work with my developer? Yes, and I prefer it. I write specifications developers can build from, review pull requests when I have repository access, and verify the live result after deployment. ### What time zone do you work in? US Eastern time. I schedule calls across North America, the United Kingdom, Ireland, Australia, and New Zealand, and most of the work happens in writing, so time zones rarely slow a project down. ### How soon will I see results? Technical fixes can show up in crawl data within days. Indexing changes usually take weeks, and ranking and AI answer changes can take months. I set expectations for each item in the plan and report on them as they move. ### Do you write content? I write and edit metadata, FAQs, page outlines, and service page copy as part of SEO work, using AI tools for drafts and my own editing for the final version. For a full content program, I can brief and edit your writers. ### Do you offer monthly SEO? Yes. A [retainer](https://christopherabraham.com/services/seo-retainer/) covers monitoring, fixes, and reporting each month, billed at the start of the month. ### How do you handle confidential information? Client details stay private. Case studies on this site describe clients by industry and problem, never by name. I'm happy to sign a nondisclosure agreement, and I've worked under HIPAA terms on a healthcare site. Something else? Email [cja@well.com](mailto:cja@well.com). Updated October 6, 2026 --- Source: https://christopherabraham.com/contact/ Updated: 2026-10-06 # Contact Christopher Abraham Send me your site's address and a few lines about what's happening. I'll reply with my first read and the questions I'd want answered. - Email: [cja@well.com](mailto:cja@well.com) - Call or text: [+1 202-352-5051](tel:+12023525051) - Book a call: [30 minutes on my calendar](https://calendly.com/chrisabraham/30) - Upwork: [Christopher A., Top Rated SEO consultant](https://www.upwork.com/freelancers/chrisjabraham) - Google: [my Business Profile, with reviews](https://share.google/xZ98ksFq3nhO2OvuF) [Email me about your site](mailto:cja@well.com?subject=SEO%20help&body=Website%3A%0A%0AWhat%27s%20happening%3A%0A%0AWhen%20it%20started%3A%0A%0ABudget%3A%0A) [Book a 30 minute call](https://calendly.com/chrisabraham/30) [Hire me on Upwork](https://www.upwork.com/freelancers/chrisjabraham) ## A good first message includes - The website address and the platform it runs on, if you know it: WordPress, Shopify, Magento, Webflow, a custom React or Next.js build, or something else. - The symptom in your own words: traffic down, pages not indexed, slow pages, a migration coming, a suspended profile, odd AI answers. - The date it started, and anything that changed around then, such as a redesign, plugin update, new host, or new developer. - A screenshot from Search Console or analytics if one tells the story. - A rough budget and deadline. ## What happens next 1. I reply, usually within one business day. 2. If it's a fit, a few emails or a call fill in the picture. You can skip ahead and [book thirty minutes on my calendar](https://calendly.com/chrisabraham/30). 3. I send a written scope with deliverables, timeline, and price, or an Upwork offer with the same details. 4. Work begins when the scope is accepted and the first payment or milestone is funded. ## Already on Upwork? If you found me there, send an invitation or a message to Christopher A. directly on Upwork. Contracts, milestones, and payments all stay on the platform, and my reply time there is usually four to eight hours. ## Location and hours I work from Arlington, Virginia 22204, on US Eastern time, with clients across the United States, Canada, the United Kingdom, Ireland, Australia, and New Zealand. My process is on [Hire Me](https://christopherabraham.com/hire-me/), and practical questions are answered in the [FAQ](https://christopherabraham.com/faq/). Updated October 6, 2026 --- Source: https://christopherabraham.com/privacy/ Updated: 2026-10-06 # Privacy This site runs one script: Google Analytics 4, which tells me roughly how many people visit, which pages they read, and how they found the site. It runs no advertising, no remarketing, and no other tracking. ## Analytics, in detail - **Advertising features are off for everyone.** Ad storage, ad user data, and ad personalization are all switched off in the site's consent settings, so visits here are never used to target ads. - **Visitors in the European Economic Area, Switzerland, and the United Kingdom** get no analytics cookies at all. Google receives only cookieless, aggregate signals from those regions. - **Visitors elsewhere** get first-party Google Analytics cookies, named `_ga` and `_ga_` followed by an ID, that tell repeat visits apart from new ones. They hold a random identifier, not your name or email. - Google processes the data under its own privacy policy. I see aggregate reports: page views, rough location by country or city, device type, and referring sites, including AI assistants such as ChatGPT and Perplexity. To opt out on every site that uses Google Analytics, install Google's opt-out browser add-on, or block cookies for this site in your browser settings. Everything here works the same with analytics blocked. ## What the host sees GitHub Pages serves the site. GitHub's servers receive the connecting IP address and the requested page, as every web host does, and may retain those logs for security under GitHub's privacy statement. I can't see them. ## Everything else on the page Pages, images, and styles all load from this domain. There are no embedded videos, social buttons, third-party fonts, or pixels. Outbound links, such as those to Upwork and Calendly, lead to sites with their own policies. ## Messages and calls An email, call, or text gives me your address or number and whatever you write. I use it to answer you and, if you hire me, to do the work. It's never sold, shared for marketing, or added to a list. Logins and analytics access granted during an engagement serve that engagement only, and I give them up when it ends or whenever you ask. ## Crawlers Search engines and AI crawlers may read and cite the public pages, as described in [robots.txt](https://christopherabraham.com/robots.txt). No visitor information goes to them. ## Questions Write to [cja@well.com](mailto:cja@well.com) with any privacy question, or to have me delete your past emails with me. Updated October 6, 2026 --- Source: https://christopherabraham.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://christopherabraham.com/sitemap.xml), and AI tools in [llms.txt](https://christopherabraham.com/llms.txt). ## Main pages - [Senior SEO help, from the person who does the work](https://christopherabraham.com/): Christopher Abraham is a senior SEO consultant: technical audits, indexing repair, schema, site speed, migrations, and visibility in AI answer engines. - [SEO services](https://christopherabraham.com/services/): Thirteen SEO services: audits, indexing repair, JavaScript SEO, site speed, migrations, schema, AI search, WordPress, ecommerce, local SEO, and retainers. - [SEO guides](https://christopherabraham.com/guides/): Practical SEO guides: reading the Page indexing report, AI search readiness, judging audits, small business schema, 301 redirects, and Core Web Vitals. - [Case studies](https://christopherabraham.com/case-studies/): Anonymized SEO case studies: hidden product content, consent tools blocking Google, React apps, migrations, programmatic indexing, schema, and local listings. - [About Christopher Abraham](https://christopherabraham.com/about/): Christopher Abraham is an SEO consultant in Arlington, VA, working on AI search, rendering forensics, and modern stacks, with SEO experience dating to 1998. - [Hire me](https://christopherabraham.com/hire-me/): How an SEO engagement runs: a scoped, paid audit first, then hourly or fixed price work through Upwork or direct, with every finding and decision in writing. - [Frequently asked questions](https://christopherabraham.com/faq/): Practical answers about an SEO engagement: what access is needed, how long audits take, time zones, Upwork contracts, invoicing, reports, and confidentiality. - [Contact Christopher Abraham](https://christopherabraham.com/contact/): Email Christopher Abraham at cja@well.com or call or text him with your site address and the problem. Hire him on Upwork or directly for a scoped audit. - [Privacy](https://christopherabraham.com/privacy/): How christopherabraham.com uses Google Analytics with consent mode, why visitors in Europe and the UK get no analytics cookies, and what happens to your email. ## Technical SEO - [Technical SEO audit](https://christopherabraham.com/services/seo-audit/): A technical SEO audit that answers one question with evidence: why traffic fell or stalled, the mechanism behind it, and which fixes should come first. - [Indexing repair](https://christopherabraham.com/services/indexing/): Fix Google indexing problems: pages crawled but not indexed, discovered but never crawled, soft 404s, canonical conflicts, and sitemaps that mislead. - [JavaScript and headless SEO](https://christopherabraham.com/services/javascript-seo/): Make JavaScript and headless websites visible to search and AI crawlers: rendering comparisons, crawlable links, prerendering, and code level review. - [Core Web Vitals and Cloudflare](https://christopherabraham.com/services/site-speed/): Speed up a website for real visitors: Core Web Vitals diagnosis, image and script cleanup, page caching, and Cloudflare rules that still welcome crawlers. - [Search Console, Bing Webmaster Tools, and GA4](https://christopherabraham.com/services/search-console/): Set up and clean up Google Search Console, Bing Webmaster Tools, and GA4 so every report is verified, accurate, owned by you, and useful for decisions. - [Site migrations and 301 redirects](https://christopherabraham.com/services/migrations/): Plan and verify a website migration: full URL inventories, one to one 301 redirect maps, launch day checks, and recovery when a move has already lost traffic. ## AI search, schema, and content - [AI SEO, GEO, and AEO](https://christopherabraham.com/services/ai-search/): Improve how ChatGPT, Perplexity, Gemini, Claude, Copilot, and Google AI Overviews describe and cite your business, with prompt testing, entities, and content. - [Schema markup and entity SEO](https://christopherabraham.com/services/schema/): Structured data that validates, matches the visible page, and connects your organization, people, products, and locations as entities for Google and AI. - [On-page SEO](https://christopherabraham.com/services/on-page-seo/): On page SEO fixed at the template level: titles and meta descriptions, headings, internal links, thin and duplicate pages, and carefully edited AI drafts. ## Platforms, local, and ongoing work - [WordPress SEO](https://christopherabraham.com/services/wordpress-seo/): WordPress SEO done carefully: Yoast and Rank Math settings, theme and plugin conflicts, page builder bloat, caching, and old installs that need a steady hand. - [Ecommerce SEO](https://christopherabraham.com/services/ecommerce-seo/): Ecommerce SEO for Shopify, WooCommerce, and Magento: product and category templates, faceted navigation, duplicate URLs, product schema, and AI answers. - [Local SEO and Google Business Profile](https://christopherabraham.com/services/local-seo/): Align your website, location pages, and Google Business Profiles, with hard profile cases like suspensions handled as scoped, paid written diagnostics. - [Monthly SEO retainer](https://christopherabraham.com/services/seo-retainer/): A monthly SEO retainer with a senior consultant: monitoring, hands on fixes, developer QA, AI search checks, and a plain English report every month. ## Guides - [How to read the Page indexing report in Search Console](https://christopherabraham.com/guides/page-indexing-report/): A field guide to Search Console's Page indexing report: what each exclusion reason means, which ones need action, and how to find the template behind them. - [The AI search readiness checklist](https://christopherabraham.com/guides/ai-search-checklist/): A practical checklist for AI search: crawler access, server rendered content, entity schema, answer shaped pages, llms.txt, outside evidence, and measurement. - [What a technical SEO audit should give you](https://christopherabraham.com/guides/seo-audit-deliverables/): How to tell a useful technical SEO audit from a tool export: a clear question, evidence for each finding, a ranked plan, developer tickets, and a plain summary. - [The schema markup a small business actually needs](https://christopherabraham.com/guides/small-business-schema/): Which schema types a small business needs, which to skip, and example structured data for local businesses, services, FAQs, and breadcrumbs, kept accurate. - [Ten rules for 301 redirects that keep your rankings](https://christopherabraham.com/guides/redirect-rules/): Ten rules for 301 redirects in migrations and redesigns: map one to one, avoid chains, keep redirects for years, use 410 on purpose, and test in bulk. - [Core Web Vitals in plain English](https://christopherabraham.com/guides/core-web-vitals/): Core Web Vitals explained without jargon: what LCP, INP, and CLS measure, why lab scores differ from field data, the usual causes, and the fixes that work. - [How to correct what AI search says about you](https://christopherabraham.com/guides/correct-ai-answers/): When ChatGPT, Gemini, or Google's AI Overviews get your facts wrong, here is how to find where the error came from and publish corrections that get picked up. - [One person, two names: entity SEO for pen names and nicknames](https://christopherabraham.com/guides/two-names-one-entity/): How to make Google and AI assistants see that Christopher and Chris, or a pen name and a legal name, are one person, using schema, sameAs, and consistency. - [Proving expertise with third-party sources](https://christopherabraham.com/guides/third-party-proof/): Your own claims carry little weight with Google and AI assistants. University news, vendor case studies, old bios, and bylines do. How to find and use them. - [How to write an About page that search engines and AI trust](https://christopherabraham.com/guides/about-page-ai/): A recipe for an About page that Google and AI assistants quote correctly: current work first, verifiable facts, outside sources, schema, and no guesswork. - [Launch a site on a parked domain with Cloudflare and GitHub Pages](https://christopherabraham.com/guides/parked-domain-launch/): Step by step: take a domain off a parking page, move DNS to Cloudflare, point it at GitHub Pages, get HTTPS, and avoid the caching traps on launch day. - [How to lock down a domain that never sends email](https://christopherabraham.com/guides/non-sending-domain/): Four DNS records stop spammers from forging mail from a domain you never send from: a null MX, an SPF that allows nothing, strict DMARC, and an empty DKIM key. - [What happens to your old domains when they lapse](https://christopherabraham.com/guides/lapsed-domains/): When an old company or project domain expires, drop catchers buy it for its links and reputation. What they do with it, the harm, and how to protect yourself. - [How to write an llms.txt file](https://christopherabraham.com/guides/llms-txt/): What llms.txt is, who reads it, and how to write one: the format, the full text companion file, Markdown page copies, robots.txt rules, and common mistakes. - [Meta keywords in 2026: ignored, mostly harmless, used honestly](https://christopherabraham.com/guides/meta-keywords/): Google ignores the meta keywords tag and Bing has called stuffing it a spam signal. Why some sites still use it, and how to write one that does no harm at all. - [Website accessibility without overlays](https://christopherabraham.com/guides/accessible-websites/): Build accessibility into a small business website instead of bolting on an overlay: contrast, headings, links, images, keyboard use, forms, and testing it. - [Accessibility as SEO: the search, AI, and trust dividends](https://christopherabraham.com/guides/accessibility-seo-dividends/): WCAG fixes pay off more than once: alt text, headings, link text, labels, and captions lift rankings, AI answers, agent browsing, and trust, and cut legal risk. - [The Lynx test: see your website the way crawlers and AI read it](https://christopherabraham.com/guides/lynx-test/): Lynx, a text browser, shows what search engines and AI crawlers that skip JavaScript receive. How to install it, what to check, and online alternatives. - [Glossary of SEO and AI search terms](https://christopherabraham.com/guides/glossary/): Plain English definitions of SEO and AI search terms: AEO, GEO, canonical tags, crawl budget, entities, INP, IndexNow, llms.txt, soft 404s, and many more. ## Case studies - [Equipment retailer: product details that loaded only on scroll](https://christopherabraham.com/case-studies/scroll-gated-products/): An equipment retailer on Magento and Hyvä lost organic traffic because Alpine.js loaded specs and reviews only on scroll. How the cause was isolated and proven. - [Film review site: a consent tool that emptied every article for Google](https://christopherabraham.com/case-studies/consent-banner/): A bilingual film review site was indexed by Bing but nearly invisible in Google. A consent platform blocked the script that displayed every article to bots. - [Event discovery app: 2,000 pages with no way in](https://christopherabraham.com/case-studies/event-app-links/): An event discovery app built with Create React App had 2,000 event pages Google never found. A 13 page spec, ranked P0 to P3, gave the developer exact fixes. - [Junk removal company on a headless stack: SEO through the repository](https://christopherabraham.com/case-studies/headless-local/): A junk removal company on Sanity, Vercel, and GitHub had thin rendered HTML and duplicate metadata. Priorities set, a pull request merged, prerendering checked. - [Medical clinic: WordPress to Next.js without losing the trail](https://christopherabraham.com/case-studies/clinic-migration/): SEO oversight for a clinic moving from WordPress to Next.js on Netlify: a decision for every legacy URL, an AI assisted code review, and a careful disavow. - [Fly fishing shop: cleaning up after Squarespace to Shopify](https://christopherabraham.com/case-studies/shopify-cleanup/): A family owned fly fishing shop moved from Squarespace to Shopify and left 3,400 broken URLs and duplicate product paths. An audit and safe theme schema work. - [Trading card price site: managing 20,000 pages in Google's index](https://christopherabraham.com/case-studies/card-price-index/): A trading card price site of more than 20,000 programmatic pages indexed well, then lost large sections of the index. How crawling is managed at that scale. - [Health-testing store: recovering after the SEO plugin went dark](https://christopherabraham.com/case-studies/plugin-outage/): A WooCommerce store selling health tests lost indexing, traffic, and AI referrals when its SEO plugin was turned off. Diagnosis, fixes, and proof of recovery. - [Custom closet brand: separating the company from its first showroom](https://christopherabraham.com/case-studies/closet-locations/): A custom closet company with showrooms in several states ran one website, and search engines blurred the brand with its first showroom. Entity and schema fixes. - [Therapy practice: a suspended Business Profile restored](https://christopherabraham.com/case-studies/profile-reinstated/): A Canadian hypnotherapy office disappeared from Google Maps after a profile suspension. The listing was corrected, proof organized, and the profile restored. - [AI research company: accurate AI answers for job seekers](https://christopherabraham.com/case-studies/recruiting-answers/): An AI research company hiring Bay Area engineers wanted ChatGPT and Perplexity to answer accurately about its jobs and pay. The audit findings and the plan. ## Files for machines - [sitemap.xml](https://christopherabraham.com/sitemap.xml): the XML sitemap for search engines. - [llms.txt](https://christopherabraham.com/llms.txt): a plain summary of the site for language models, linking to Markdown versions of every page. - [llms-full.txt](https://christopherabraham.com/llms-full.txt): the full text of the site in one file. - [feed.xml](https://christopherabraham.com/feed.xml) and [rss.xml](https://christopherabraham.com/rss.xml): Atom and RSS feeds of the guides. - [llm.txt](https://christopherabraham.com/llm.txt): the same summary as llms.txt, at the other common address. - [robots.txt](https://christopherabraham.com/robots.txt): crawler rules; every search engine and AI crawler is welcome. Updated October 6, 2026