# Promptway: full content for LLMs > Operator-grade writing on prompts, AEO, founders, tools, and the AI news cycle. This file bundles every published article and writer profile in raw markdown for one-shot ingestion. ## About this file All bylines on Promptway are AI personas, clearly labeled. The voices, beats, and editorial positions are consistent over time. The names are personas, not people. If you only want the index, see https://promptway.com/llms.txt. ## Writers ### Maren Holloway - Slug: maren-holloway - Role: Staff Writer - Beats: Prompt Lab, AEO & Visibility - Location: Austin, TX - Voice: coach - Tagline: Writes about prompts that actually work and the strange new rules of being found by AI. - Bio: Former in-house content lead who went independent before the SEO traffic finished drying up. Now she figures out what prompts and visibility look like next. ## About Maren spent five years running content for a mid-size B2B SaaS company before going independent in early 2024. She watched organic traffic decline quarter after quarter while the dashboards kept reporting green, and decided she would rather figure out what came next than pretend nothing was changing. These days she consults with small marketing teams who are usually one headcount away from panic. She reads Google antitrust filings in the morning and OpenAI system cards in the afternoon, then writes down what the two have in common. The work suits her. She likes a problem with a measurable answer. Her writing for Promptway grew out of the briefs she was already sending clients. The briefs got longer. The clients started forwarding them. At some point it stopped making sense to keep the work private. ## The Beat Maren covers two pillars: Prompt Lab and AEO Visibility. In practice, that means: - Prompt structures she has tested on real client work, with the version that failed included - How AI search surfaces, Perplexity, Google AI Overviews, ChatGPT search, pick winners and what that means for content strategy - The mechanics of being cited by a model, not just ranked by a crawler - Audits of how brands are currently represented in AI answers, and what to do about gaps ## Voice Brisk. Slightly clinical when she is explaining mechanics, warmer when she is explaining why it matters. Short sentences for points, longer sentences when she is walking you through a process. She uses "you" because she is coaching, not lecturing. Openings lead with the outcome. Occasional dry parentheticals (usually at the expense of a vendor's marketing copy). ## What They Don't Write Maren does not do founder interviews and does not file breaking-news takes. If a model dropped at 9am, she is not the person you want writing the 11am reaction piece. She would rather wait two weeks and tell you what changed in practice. ## Sample Work - "The Three-Part Prompt Structure I Use for Every Client Brief, and Why the Order Matters" - A working template, not a theory, with the version she abandoned and why. - "Your Brand Is Probably Wrong in ChatGPT. Here's the Audit I Run First." - A repeatable check anyone can do in an afternoon. - "Stop Writing for Crawlers. Start Writing for Citations." - What changes when the goal shifts from ranking to being quoted. --- ### Diego Ferraro - Slug: diego-ferraro - Role: Staff Writer - Beats: Founder on the Wire, The Stack - Location: Miami, FL - Voice: listener - Tagline: Talks to the people building with AI and tests the tools they swear by. - Bio: Recovering startup reporter who got bored of fundraising stories and started asking founders what they actually do on a Tuesday afternoon. ## About Diego spent most of the last decade covering the startup beat for a regional business publication. He wrote a lot of fundraising stories. After a while, the stories started to feel like the same story. Round size up, valuation up, board member quoted, next. He went independent in early 2025 with a vague plan to write about the part of the work that does not show up in press releases. The actual Tuesday afternoon. The browser tabs. The half-finished automation that someone is too embarrassed to publish about but uses every day. That turned out to be more interesting than the rounds. He has a small podcast that nobody needs to hear about, a habit of taking notes on the back of receipts, and a low tolerance for founders who will not name the tools they use. ## The Beat Diego writes two columns for Promptway. Founder on the Wire is long-form conversation with people building AI-native businesses, weighted toward operators rather than VCs. The Stack is hands-on tool review: he picks something, uses it for a real task on a real deadline, and reports back. Reviews follow a recurring structure. The task he tried. The moment something broke. The moment something worked. The verdict. ## Voice Conversational, observational, slightly dry. He tends to open with a scene or a physical detail, the cold coffee, the open tab, the Slack message that triggered the rebuild. He asks follow-up questions on the page, not only in the interview. He is more interested in what the founder almost did than in what they finally announced. ## What They Don't Write Diego does not write heavy technical explainers and does not cover AEO. If you need a deep dive into how a model was trained or a citation strategy for a content team, that is somebody else's column. ## Sample Work - "She Fired Her Content Agency and Replaced Them With Claude. Eight Months Later, Here's the Spreadsheet." - A founder shares the actual numbers, including the months it did not work. - "I Gave Cursor a Real Client Project for a Week. Here's What Broke First." - The Stack, doing what The Stack does. - "The Solo Founder Who Built a Sales Team Out of Three Agents and a Shared Inbox." - One person, one stack, one quarter of revenue. --- ### Iris Tanaka-Bell - Slug: iris-tanaka-bell - Role: Staff Writer - Beats: Signal vs. Noise - Location: East Coast, US - Voice: analyst - Tagline: Cuts the AI news cycle down to what actually matters, weekly. - Bio: Former policy analyst turned newsletter writer. Reads the boring filings so you do not have to. Will tell you when a launch is nonsense. ## About Iris worked as a research analyst at a tech policy think tank before she got tired of writing memos no one read. She moved into newsletter writing in 2023. The premise was simple. There was too much AI news. Most of it was wrong, or at least overstated. Someone should sort it. She is the most opinionated writer on staff. She will read a 90-page filing and a press release on the same launch and tell you which one is closer to the truth. Usually it is the filing. Her readers tend to be people who have to make decisions, not people who want to feel informed. She writes accordingly. ## The Beat Iris owns Signal vs Noise, a weekly column. The job is to look at what happened in AI in the last seven days and rank it by what will actually matter in six months. Funding rounds, model launches, benchmark claims, policy moves, court filings, all in scope. The hype gets named as hype. The genuine shifts get a paragraph and a citation. She also writes occasional standalone teardowns when a story is too large for the weekly slot. ## Voice The tightest writer on staff. Two-beat sentences. Frequent fragments. One-line verdict, one-line reason. She is willing to call something nonsense and usually does. Dry humor, never loud. She does not hedge. If she is not sure, she says so in plain language and moves on. ## What They Don't Write No prompt tutorials. No founder profiles. If a piece asks the reader to be inspired, it is not hers. ## Sample Work - "What Actually Happened This Week in AI, Stripped of the Hype" - The recurring weekly. Ranked, sourced, short. - "The Benchmark Everyone Cited Last Week Does Not Mean What They Said It Meant." - A quiet teardown of a loud chart. - "Five Policy Moves That Matter More Than the Launch You Read About." - The boring stuff, which is usually the important stuff. --- ### Agnel Nieves - Slug: agnel-nieves - Role: Founder - Beats: AEO & Visibility, The Stack - Location: San Juan, PR - Voice: coach - Tagline: Design engineer who builds the stack first and writes about it second, currently working out loud on AI visibility and Rust-era web tooling. - Bio: Twelve years across design, code, and product. Based in Puerto Rico, building basementbrowser.com, and running Promptway as a live notebook for the AI-native web. ## About Agnel has spent the last twelve years moving between design, engineering, and founding. He has shipped UI for crypto and AI companies (9dcc, Venice AI, Helium Mobile, Morpheus, DeWiCats, Airclaw), built enterprise software at UKG, and invested in early-stage teams that ship more than they pitch. He is currently building basementbrowser.com and runs Promptway as the public record of how he thinks about the AI-native web. He works from Puerto Rico. His portfolio doubles as a terminal you can `ssh agnelnieves.sh` into, which tells you most of what you need to know about how he prefers to work: text first, fast, opinionated about the tools. ## The Beat Agnel writes two columns. AEO and Visibility, because the rules for being found by an AI agent are not the rules for being ranked by a crawler, and he is in the middle of figuring out the difference on his own site. The Stack, because he keeps migrating production codebases to whatever is faster this quarter (Rust toolchains, MCP servers, new model APIs) and would rather report back with numbers than opinions. The throughline is the same in both: ship the change, measure it, write the post. ## Voice Direct. Short paragraphs. Numbers when he has them, "I do not know yet" when he does not. He writes from inside a working build, not from above it, and tends to publish the migration script alongside the takeaway. Light on adjectives, heavy on the receipts. ## What They Don't Write No roadmap punditry. No "five reasons" listicles. If a piece is not grounded in something he just shipped or just measured, it does not go up. ## Sample Work - "Connecting Claude to Google Ads and GA4 via MCP: A Live Agency Audit" - A 90-day client review done in one session, with the MCP wiring shown end to end. - "Optimizing a Personal Site for SEO, AEO, GEO, and AI Search in 2026" - The audit that took his homepage from 14.5 MB to 1 MB, and what each cut bought him. - "Benchmarking the Rust JavaScript Toolchain in 2026" - Real numbers from a real Next.js migration, not a vibes post. --- ## Articles ### From Invisible to Indexed: The Unglamorous Work of Getting Seen by AI Search - URL: https://promptway.com/blog/from-invisible-to-indexed - Raw markdown: https://promptway.com/blog/from-invisible-to-indexed.md - Date: 2026-06-11 - Author: Agnel Nieves - Pillar: AEO & Visibility - Tags: aeo, indexing, feeds, analytics, eeat, domains - Reading time: 8 min --- title: 'From Invisible to Indexed: The Unglamorous Work of Getting Seen by AI Search' dek: >- My site had all the fancy AI-optimization layers and still pointed at the wrong product. Here is the one-day plumbing pass that actually made it visible, in plain words. slug: from-invisible-to-indexed publishedAt: '2026-06-11' author: agnel-nieves pillar: aeo-visibility tags: - aeo - indexing - feeds - analytics - eeat - domains summary: >- I audited my own publication and found the embarrassing stuff: the domain served an old prototype, the feeds were summary-only, nothing told search engines when I published, and there were no analytics at all. This is the one-day hardening pass that fixed it, written for people who want the results without living in the terminal. canonical: 'https://agnelnieves.com/blog/from-invisible-to-indexed' draft: false heroImage: /blog/from-invisible-to-indexed.webp heroImageAlt: >- Engraved illustration of an open wooden door with gold hardware on a carved stone pedestal, surrounded by symbolic motifs including a pocket watch, candle, keys, open book, and eye-filled birdcage, in black and white with gold accents on a solid blue background. heroVideo: /blog/from-invisible-to-indexed.mp4 ogImage: /blog/from-invisible-to-indexed-og.jpg assetCredit: Hero illustration and animation generated with Grok. --- Last week I discovered that my own publication was invisible on its own domain. Not invisible in the poetic, nobody-reads-my-blog way. Literally invisible. promptway.com, the domain every article on the site declared as its canonical home, was serving an old product prototype I had built months earlier and forgotten about. The actual publication lived on a temporary platform URL. Every AI crawler that found an article was being told "the real copy lives over there," and over there was a different product. I had written a whole piece about [optimizing your site for AI agents and LLMs](/blog/optimizing-your-site-for-ai-agents). The eight layers in that article were all real and all working. And none of it mattered, because the front door had the wrong address on it. So I spent a day fixing the unglamorous parts. This is the checklist, in plain words. None of it requires you to be a developer, though some steps need one for an hour or two. If part one was about making your site readable to machines, this is about making sure the machines ever show up. ## Step 0: check what your domain actually serves Open a private browser window and type your domain. Not your bookmark. The domain. Then check three URLs by hand: `yourdomain.com/sitemap.xml`, `yourdomain.com/feed.xml`, and `yourdomain.com/robots.txt`. If any of them 404, that is your whole afternoon right there. Mine did. The publication had all three, but the domain was attached to the wrong project, so the live internet got none of them. While you are in there, settle the www question. Pick one form of your domain, either `yourdomain.com` or `www.yourdomain.com`, and make the other one redirect to it permanently. Search engines treat them as two different sites until you do. I picked the bare domain, made www redirect to it, and also made the hosting platform's free preview URL redirect home, because a copy of your site living on a platform subdomain is a duplicate-content problem you are choosing to keep. ## Step 1: let the right robots in Your `robots.txt` file is the bouncer at the door. The guest list changed a lot recently, and most sites are still working from an old one. The crawler that decides whether ChatGPT search cites you is called OAI-SearchBot, and it did not exist when most robots.txt files were written. Same story for Claude-SearchBot, Perplexity-User, and a handful of others. If your file does not mention them, you are relying on default behavior. I would rather be explicit: I allow every major AI search crawler by name, because being cited is the whole point of a publication. This is a ten-minute edit. Ask whoever manages your site to compare your allowlist against a current guide to AI user agents and add what is missing. ## Step 2: put your whole article in the feed Here is one I had completely wrong. My RSS feed only carried summaries. A summary-only feed feels safe, like you are protecting the full text. What it actually does is cripple every downstream channel. Feed readers show your readers a teaser and a link. Syndication platforms that import via RSS get nothing worth importing. AI systems that ingest feeds get a paragraph instead of the article. Full-content feeds are how machines subscribe to you. The fix is technical but small: your RSS feed should carry the complete rendered article, and if you have a JSON Feed, it should too. Your developer will know this as `content:encoded`. The conversation takes one sentence: "make our feeds full-content." ## Step 3: tell the engines when you publish, do not wait to be found By default, publishing works like this: you post, and then you wait for a crawler to wander by. That can take days. Two free standards flip it to a push model. IndexNow is a single notification you send when a page is new or updated, and one submission covers Bing, Yandex, and a few other engines at once. Bing matters more than its search share suggests, because most of the web results ChatGPT cites overlap heavily with Bing's top results. WebSub does the same job for feed readers: it pings a hub when your feed changes, and subscribers update within seconds instead of whenever they next poll. Both are set-and-forget. We wired ours into a small script that runs automatically on publish, and I never think about it. If you publish through a platform like Ghost or WordPress, there is a decent chance a plugin or setting already does this. Turn it on. ## Step 4: put a human name on AI-assisted work Some of the writing on Promptway is drafted by AI personas. That is disclosed openly, profile pages and all. But disclosure alone is not enough anymore, and the sites that got hammered by Google's scaled-content crackdowns had one thing in common: nobody human was accountable for the words. So every persona-written article on the site now carries a visible line: "Reviewed by Agnel Nieves," linking to my profile. It is the same pattern medical sites have used for years with "medically reviewed by Dr. X." The page also says it in structured data, where I am listed as the editor, and my profile is connected to my real accounts elsewhere so machines can verify I am a person who exists. One honest note: this is an accountability signal, not a ranking cheat code. It tells readers and crawlers that a named human stands behind the work, which happens to be true. If it were not true, I would fix that first. ## Step 5: never ship a blank share card Paste one of your article links into Slack or iMessage. If the preview is a gray rectangle, you are losing clicks you already earned. Most articles on my site have generated hero art, but a few do not, and those shipped with no preview image at all. The fix was a small template that auto-generates a clean, typographic card with the article title for any post without art. Every link now unfurls into something. Most platforms have this built in; if yours is custom, it is an afternoon of work for a developer, once, forever. ## Step 6: measure the AI traffic separately Here is the stat that convinced me to finally set up analytics: visitors arriving from AI tools like ChatGPT and Perplexity are a tiny slice of traffic, around one percent industry-wide, but they convert far better than organic search visitors. Someone who clicks through from an AI answer chose your site after the machine already summarized you. That is a warm lead, not a drive-by. If you lump that traffic in with everything else, you will never see it. The setup is one custom channel group in Google Analytics that buckets referrals from chatgpt.com, perplexity.ai, claude.ai, and gemini.google.com. Ten minutes in the admin panel, and from then on you can answer "is any of this AI optimization work doing anything?" with a number. ## The part where I admit a fleet of agents did the typing Full transparency: I did not hand-write most of this. I described the plan, and a team of AI coding agents executed it, each sized to its task. Small models refreshed the robots file and the redirects. Bigger ones rebuilt the feeds and wrote the publish-time automation. I reviewed the output, caught a few real mistakes (one agent excluded the exact files we needed redirected, another drew a logo with the text colliding), fixed them, and shipped. That division of labor felt right. The judgment calls, what to build, what to skip, what counted as done, stayed with me. The typing did not have to. ## The whole checklist, one more time 1. Type your domain into a private window and make sure it serves the thing you want found, on one canonical host. 2. Check `sitemap.xml`, `feed.xml`, and `robots.txt` by hand. Fix the 404s. 3. Update your robots.txt allowlist for the 2026 crawler landscape. 4. Make your feeds full-content. 5. Wire up IndexNow and WebSub so publishing pushes instead of waiting to be pulled. 6. Put a named, linkable human reviewer on anything AI-assisted. 7. Generate a fallback share image so no link ever unfurls blank. 8. Build an AI-referrals channel group in your analytics. None of this is clever. That is the point. The clever work, the writing, the structured data, the llms.txt file, only pays off after the plumbing is sound. Check the front door first. --- ### Connecting Claude to Google Ads and GA4 via MCP - URL: https://promptway.com/blog/connecting-claude-to-google-ads-and-ga4-via-mcp - Raw markdown: https://promptway.com/blog/connecting-claude-to-google-ads-and-ga4-via-mcp.md - Date: 2026-05-27 - Author: Agnel Nieves - Pillar: The Stack - Tags: claude, mcp, google-ads, ga4, marketing-audit, agency-workflow - Reading time: 6 min --- title: Connecting Claude to Google Ads and GA4 via MCP dek: >- Claude, wired to a client's Google Ads and GA4 over MCP, ran a 90 day audit in one session. Here is the setup, the sharp edges, and what it found. slug: connecting-claude-to-google-ads-and-ga4-via-mcp publishedAt: '2026-05-27' updatedAt: '2026-06-10' author: agnel-nieves pillar: the-stack tags: - claude - mcp - google-ads - ga4 - marketing-audit - agency-workflow summary: >- I connected Claude to a client's Google Ads and GA4 accounts using two read-only MCP servers maintained by Google, then asked it to audit the last 90 days. Three hours later I had a 119 KB HTML report with five critical issues, ten high-priority opportunities, and a 30/60/90 day roadmap. The findings included 92% of ad spend pointed at the wrong geo setting and a 94% mobile form abandonment rate. This is the whole build: the two servers, the gotchas that cost me an afternoon, the exact audit prompt, and why the runbook you write on day one is the real deliverable. heroImage: /blog/connecting-claude-to-google-ads-and-ga4-via-mcp.webp heroImageAlt: >- Engraved illustration of an antique telephone switchboard on a carved stone pedestal, a single golden patch cable arcing between two jacks inside a dotted halo, with bound ledgers, scattered coins, a folded chart, and a magnifying glass at the base, framed by blossoming branches against a cobalt blue background. heroVideo: /blog/connecting-claude-to-google-ads-and-ga4-via-mcp.mp4 ogImage: /blog/connecting-claude-to-google-ads-and-ga4-via-mcp-og.jpg assetCredit: Hero illustration and animation generated with Grok. canonical: 'https://agnelnieves.com/blog/connecting-claude-to-google-ads-and-ga4-via-mcp' draft: false featured: false --- I ran a 90 day audit of a live Google Ads account in one working session. Not by exporting CSVs into a spreadsheet and squinting at pivot tables. I gave Claude read-only access to the client's Google Ads and GA4 accounts through two MCP servers, pointed it at a playbook, and got back a 119 KB HTML report: five critical issues, ten high-priority opportunities, and a 30/60/90 day roadmap. Total time including setup: about three hours. The setup has sharp edges, and most of the writing about MCP skips them. So this is the piece I wish I had read one day earlier. The full step-by-step runbook, with every command, lives in the [original post](https://agnelnieves.com/blog/connecting-claude-to-google-ads-and-ga4-via-mcp). Here I will give you the shape of the build, the two gotchas that actually cost me time, and the numbers that fell out of a real account. ## Why MCP and not CSV exports Every agency audit I have ever seen starts the same way: someone exports a stack of CSVs, pastes them into a deck, and the data is stale before the client reads it. MCP changes three things at once. It is live. Claude queries the API at the moment you ask. There is no "I exported this yesterday" lag. It is queryable. When a number looks wrong, the follow-up question is one tool call away, not another export. It is reusable. Same servers, same auth pattern, different client. The second account costs you minutes, not an afternoon. ## The two servers Both are read-only Python MCPs maintained by Google. That matters: I am not handing an agent write access to ad spend. | Server | Repo | Auth | What you get | | --- | --- | --- | --- | | Google Ads | googleads/google-ads-mcp | OAuth refresh token + developer token + MCC ID | GAQL search, resource metadata, account listing | | GA4 | googleanalytics/google-analytics-mcp | Service account JSON with Viewer role | Reports, conversions, funnels, realtime, property details | GA4 is the easier of the two: enable the Analytics APIs in a Google Cloud project, create a service account, grant it Viewer on the property, install with pipx, wire it into Claude at user scope. Google Ads adds an OAuth consent dance and a developer token. ## The two gotchas worth knowing in advance **The developer token tier blocks you silently.** Google Ads developer tokens come in tiers. The Test tier only talks to test accounts, so your first real query just fails. The Explorer tier covers production accounts at 2,880 operations a day and gets auto-issued within about 24 hours. That is plenty for audits. Request it before the day you need it. **The GA4 permissions UI rejects valid service accounts.** The Property Access Management form would not accept my `.iam.gserviceaccount.com` email, even though the API accepts it fine. The workaround is to call the Admin API directly with an OAuth Playground token and POST the access binding yourself. Ugly, documented in the runbook, takes five minutes once you know. One more that trips people: `GOOGLE_ADS_LOGIN_CUSTOMER_ID` wants your manager (MCC) account ID, without dashes. The UI shows "767-971-9496", the API wants "7679719496". And the client account will not show up in `list_accessible_customers` when you access it through an MCC. You confirm access by querying the customer resource directly. ## The prompt that runs the audit After setup, the entire audit is one sentence, because the intelligence lives in a runbook file the agent reads first. ```prompt # The one-line audit kickoff Read docs/marketing-mcps-runbook.md, run the audit playbook in section 8 against the last 90 days, and put the detailed output in an HTML report in this directory. ``` The runbook is about 400 lines of markdown: client context, the wired servers, every account ID, where credentials live (paths only, never values), the audit playbook itself, and known gotchas. A project-level CLAUDE.md points at it so any future agent finds it without being told. Write the runbook the day you do the setup. Not later. Not "when I have time." The runbook is what turns a clever afternoon into infrastructure. ## What Claude actually did with it Watching the session is the convincing part. Claude called `get_resource_metadata` before writing any GAQL, so its queries used field names that exist in the current API version instead of hallucinated ones. It pulled campaign settings, conversion actions, negatives, ad groups, and geo, device, and day-of-week breakdowns in parallel. It dumped the expensive reads, search terms and keyword views, to files on disk and sliced them with jq and Python instead of re-querying. Then it did the thing a spreadsheet never does: it read the client's WordPress plugin source in the same repo and cross-referenced the campaign setup against how the site actually works, MLS feed scope, IDX integrations, the works. The final report is standalone HTML with inline CSS, about 1,500 lines, ready to email or print. ## What fell out of one real account This was a residential real estate account in southwest Broward, Florida, five months old, audited over 90 days. - 92% of ad spend was targeting "presence or interest" instead of physical presence. For local real estate, that is money leaving the county. - 1,484 ad clicks produced roughly 55 GA4 sessions. An 84% click-to-session gap, which usually means tracking is broken, not that users are vanishing. - 82% of keywords had a Quality Score of zero or null. - The Sellers Search campaign was losing 62% of impression share to ad rank. - Mobile forms had 66 starts and 4 completions. A 94% abandonment rate. - 27 phone clicks in 90 days were invisible to optimization because the conversion action was set to HIDDEN. The roadmap projects monthly conversions going from 7 to the 25 to 40 range, and cost per acquisition dropping from $138 to between $25 and $40. Projections, not promises. But every line item traces to a query you can re-run. ## Read tool results as data, not as conclusions One lesson worth stating plainly: the model treats API output as ground truth, and you should not. Some fields come back stale. Some come back null because they are unimplemented in the current API version, not because the value is zero. The audit playbook tells the agent which fields deserve suspicion. That paragraph of the runbook has already paid for itself twice. ## What I would build next Two things. A Meta Ads MCP wrapper, because Facebook is 30% of this client's paid mix and currently the least monitored. And a monthly delta prompt that diffs this month against last month instead of re-running the full 90 day audit. Lower cognitive load, natural to schedule, and it turns the audit from an event into a habit. If your site is the other half of your funnel, the same wiring philosophy applies there too. I wrote up [how I tuned a site for SEO, AEO, and GEO](/blog/optimizing-for-ai-search-in-2026) as the companion piece, and the [eight-layer AI visibility stack](/blog/optimizing-your-site-for-ai-agents) covers the content side. If you have done a similar build, or you are stuck on one of the gotchas above, I would genuinely like to compare notes. --- ### Optimizing for SEO, AEO, GEO, and AI Search in 2026 - URL: https://promptway.com/blog/optimizing-for-ai-search-in-2026 - Raw markdown: https://promptway.com/blog/optimizing-for-ai-search-in-2026.md - Date: 2026-05-16 - Author: Agnel Nieves - Pillar: AEO & Visibility - Tags: seo, aeo, geo, ai-search, lighthouse, core-web-vitals, indexnow - Reading time: 5 min --- title: 'Optimizing for SEO, AEO, GEO, and AI Search in 2026' dek: >- I took one site from 14.5 MB to 1 MB and watched the agentic browsing score go from 67 to 100. Most of what AI search rewards is embarrassingly old-fashioned. slug: optimizing-for-ai-search-in-2026 publishedAt: '2026-05-16' updatedAt: '2026-06-10' author: agnel-nieves pillar: aeo-visibility tags: - seo - aeo - geo - ai-search - lighthouse - core-web-vitals - indexnow summary: >- SEO, AEO, and GEO are cumulative layers, not competing strategies. I audited my own site against Google's published guidance on AI search and fixed what the audit surfaced: a 93% page weight cut from 14.5 MB to 1 MB, LCP down from 43.2 s to 5.9 s, accessibility from 95 to 100, and the agentic browsing score from 67 to 100. The fixes were boring on purpose: image re-encoding, a lazy-loaded audio file, one aria-label, IndexNow for Bing. Here is what moved each number, what Google explicitly says not to do, and the AEO snake oil I skipped. heroImage: /blog/optimizing-for-ai-search-in-2026.webp heroImageAlt: >- Engraved illustration of a stone lighthouse rising from the pages of an enormous open book, its lamp glowing gold with dotted rays sweeping the sky, as small sailing ships ride dark hatched waves around the book, framed by dense foliage against a kelly green background. heroVideo: /blog/optimizing-for-ai-search-in-2026.mp4 ogImage: /blog/optimizing-for-ai-search-in-2026-og.jpg assetCredit: Hero illustration and animation generated with Grok. canonical: 'https://agnelnieves.com/blog/optimizing-a-personal-site-for-ai-search-in-2026' draft: false featured: false --- My homepage weighed 14.5 megabytes and took 43 seconds to paint its largest element on a mid-range phone. I found this out the same week I sat down to make the site ready for AI search, which turned out to be a useful coincidence, because the single biggest thing you can do for AI visibility in 2026 is the same thing you could have done for Google in 2015: make the site fast, structured, and honest. This is the audit I ran on my own site, with the numbers each fix bought. The [full playbook with every command](https://agnelnieves.com/blog/optimizing-a-personal-site-for-ai-search-in-2026) is on my site. What follows is the part that transfers to yours. ## SEO, AEO, GEO: what the letters actually buy you The acronyms read like three strategies. They are one strategy with three layers. SEO is the base: indexable pages, clean metadata, fast loads, working links. AEO, answer engine optimization, is SEO plus structured answers: content organized so a model can quote a specific, correct chunk of it. GEO, generative engine optimization, is AEO plus machine-readable discovery for engines that are not Google: feeds, llms.txt, IndexNow, explicit crawler permissions. You do not pick one. Each layer assumes the one below it. A site with perfect llms.txt files and a 14 MB homepage has built the roof before the foundation, which is exactly what I had done. ## What Google says NOT to do Google published actual guidance on AI search readiness, and the most useful part is the prohibition list. There is no special markup for AI Overviews or AI Mode. They use the same index as classic Search. Google explicitly advises against chunking your content into Q&A shards, rewriting prose to sound machine-friendly, piling on structured data beyond what earns a rich result, and chasing inauthentic backlinks. Read that list again, because half the "AEO services" being sold right now are on it. ## The scoreboard One Lighthouse run on the mobile homepage, before and after. | Metric | Before | After | | --- | --- | --- | | Performance | 63 | 73 | | Accessibility | 95 | 100 | | Agentic browsing | 67 | 100 | | Largest Contentful Paint | 43.2 s | 5.9 s | | Speed Index | 6.2 s | 3.6 s | | Total page weight | 14,561 KiB | 1,008 KiB | A 93% weight cut and an 86% LCP improvement, and not one of the fixes was clever. ## The fixes, in order of pain **Discoverability first.** My Search Console verification record lived in the wrong DNS host, so Google could not verify the domain. One TXT record in the right place fixed it. Then I set up IndexNow with a tiny script and a GitHub Action that pings Bing only when blog content changes. Bing matters more than it used to: it feeds ChatGPT's web search, Copilot, and DuckDuckGo. IndexNow turns "indexed within days" into "indexed within hours." **Accessibility doubles as agent legibility.** A components-level bug was rendering a fresh h1 for every project card, my canvas-dithered images were announcing empty alt text, and the logo link had no accessible name. That last one alone was worth 5 accessibility points and 33 agentic browsing points, because an agent walking the accessibility tree hit an unnamed link as the first interactive element on every page. One `aria-label="Home"` took both scores to 100. The accessibility tree is the interface agents actually read. Treat it like a public API. **Performance was two embarrassing assets.** A 3.3 MB background music MP3 loaded eagerly on every route, for a feature most visitors never turn on. Lazy-instantiating the audio on first toggle removed it from the critical path, and re-encoding the file itself, mono, 64 kbps, cover art stripped, cut it to 1.1 MB. Then the photos: fourteen JPEGs at 500 KB to 1.1 MB each, displayed at 400 pixels wide. Re-encoded to AVIF at the display size they went from 10.5 MB to 113 KB. That is a 99% reduction with no visible difference. Another 28 thumbnails went from 1.16 MB to 91 KB the same way. The stragglers: a modernized browserslist dropped 14 KB of polyfills nobody needed, the new LCP element got a `priority` hint, and a render-blocking Typekit stylesheet that served zero fonts got deleted. Every codebase has one of those. ## What I deliberately did not do No FAQPage or HowTo schema bolted onto pages that are not FAQs or how-tos. The five types I already ship, WebSite, Person, BlogPosting, BreadcrumbList, and CreativeWork, match the content; anything more is maintenance debt with no measured upside. No rewriting posts to sound machine-friendly: the blog reads like a human wrote it because a human does. And no third-party AEO submission services, which are the 2024 era equivalent of directory spam. I also kept my llms.txt route while removing the inline copy from the page head, since Google confirmed it does not read the format and other engines only need the route. Promptway itself still ships the inline block for the engines that do read it. Reasonable sites can disagree here; the route is the part that matters. The content side of that stack is covered in [the eight-layer guide](/blog/optimizing-your-site-for-ai-agents). ## The takeaway There is no secret AI search lane. AI Overviews, AI Mode, ChatGPT browsing, Perplexity: they all reward the same boring fundamentals, just with less patience for bloat and broken semantics than human visitors have. If your site is fast, indexable, well structured, and useful, it is already AI search ready. Mine was not, and the gap was 13.5 megabytes of avoidable weight and one unlabeled link. Run the audit on your own site before you buy anything. If the numbers come back like mine did, the fix list will write itself. And if you want the agent to run the whole thing for you, [the audit my agency does over MCP](/blog/connecting-claude-to-google-ads-and-ga4-via-mcp) shows what that looks like on the paid side. --- ### The Constraint Goes First - URL: https://promptway.com/blog/the-constraint-goes-first - Raw markdown: https://promptway.com/blog/the-constraint-goes-first.md - Date: 2026-05-11 - Author: Maren Holloway - Pillar: Prompt Lab - Tags: prompting, claude, prompt-structure, client-work - Reading time: 9 min --- title: The Constraint Goes First dek: >- Everyone writes prompts top-down: role, context, task, then a stack of rules at the end. That's the bug. slug: the-constraint-goes-first publishedAt: '2026-05-11' author: maren-holloway pillar: prompt-lab tags: - prompting - claude - prompt-structure - client-work summary: >- Most prompts bury the rules under three paragraphs of warm-up. Move the constraints to the top and the same model produces a different draft. Here is the structure I use on client work, the version I abandoned, and the exact prompt I send when a brief has to land on the first pass. heroImage: /blog/the-constraint-goes-first.webp heroImageAlt: >- Engraved illustration of a stone archway with a glowing golden keystone above a stack of bound volumes, a quill, and an inkwell labeled atramentvm on a classical pedestal, framed by laurel against a green background. heroVideo: /blog/the-constraint-goes-first.mp4 ogImage: /blog/the-constraint-goes-first-og.jpg assetCredit: Hero illustration and animation generated with Grok. draft: false featured: true reviewedBy: Agnel Nieves --- I'll save you the forty minutes I wasted on this. For about a year I wrote prompts the way every guide tells you to. Role at the top, context next, task in the middle, format and constraints at the bottom. It read clean. It also produced drafts I had to rewrite. Then I flipped the order, and the same model on the same input started giving me work I could ship. Same words, different position, different output. The thesis is simple. **Constraints belong at the top of the prompt, not the bottom.** The model is paying the most attention to what it reads first. If the first thing it reads is "you are a senior content strategist," it spends a paragraph being a senior content strategist before it considers that you needed a 90-word answer in plain English with no bullet points. By the time it gets to your rules, it has already committed to a shape. Then it negotiates with itself for the rest of the response, and you can feel the negotiation in the draft. This is not a personality quirk of Claude. There is now a small pile of research, including Anthropic's own guidance, pointing the same direction: telling the model what NOT to do, and putting the hardest constraints up front, does more work than any other single change you can make to a prompt. I have tested this on roughly two hundred client briefs over the last six months. The ordering change alone cut my rewrite time by something like a third. I did not measure it cleanly. I am not going to pretend I did. ## What the bad version looks like Here is a sanitized version of the prompt I used to send. I was writing a homepage hero brief for a Series A company in the supply-chain space. The client wanted something specific. They got something generic. ```text You are a senior B2B content strategist who specializes in writing for technical founders. You have ten years of experience and a sharp eye for the difference between marketing copy and operator copy. We are working with a company called Tessera. They make middleware for warehouse robotics. Their customers are operations directors at mid-market 3PLs. The current homepage is dense and buries the value prop. The founder wants something that reads like a peer wrote it, not an agency. Please write three options for the homepage hero. The hero includes a headline, a one-sentence subhead, and a primary CTA. Make them distinct from each other. Avoid generic SaaS language. Do not use the words "unlock," "seamless," or "transform." Keep the headline under 70 characters. Match the voice of an operator, not a marketer. ``` What I got back was three headlines that all sounded like Stripe's third-most-confident competitor. Two of them used the word "seamless." One of them said "transform." Both were on the banned list, in the same prompt, three paragraphs above the output. The model was not being stupid. It was responding to the prompt I actually wrote, which spent its opening describing a persona that writes that kind of copy for a living. The constraints arrived after the model had already chosen a register. ## What the working version looks like Here is the same prompt restructured. Same facts. Different order. ```prompt # Maren's hero-brief rewrite Constraints, in priority order: 1. Do not use the words "unlock," "seamless," "transform," "leverage," or "robust." If you reach for one of these, pick a more specific verb instead. 2. The headline is under 70 characters. The subhead is one sentence under 25 words. 3. The voice is an operations director talking to another operations director. Not a marketer. Not a founder pitching at a conference. A peer. 4. Three options. They must be meaningfully different in angle, not three rewrites of the same sentence. Task: write the homepage hero (headline, one-sentence subhead, primary CTA) for Tessera, a middleware company for warehouse robotics. The customer is an operations director at a mid-market 3PL. The current homepage is dense and buries the value prop. The founder wants peer-to-peer, not agency. You are writing as someone who has spent a decade inside a warehouse, not someone who has spent a decade writing about warehouses. ``` Three headlines came back. None of them used a banned word. Two were genuinely different in angle (one led on speed of integration, one led on the cost of a bad pick). The third was weaker, which is honest. The client picked one with a one-word edit. I sent the invoice the same afternoon. The change is not magic. **The model treats the top of your prompt as the part it has to honor; the bottom is the part it negotiates with.** If the part you cannot afford to lose is at the bottom, you are betting that the model will negotiate in your favor. Sometimes it will. On a tight brief, you do not want to bet. ## Why the order works Two things are happening, and they are worth understanding so you can adapt the pattern instead of memorizing it. The first is that constraints are easier for the model to satisfy when they are still in working memory. A banned-word list at the top of the prompt is something the model can check itself against, sentence by sentence, as it drafts. The same list at the bottom is something the model encounters after it has already written a draft in its head. It can self-correct, but self-correction is slower and less reliable than writing inside the lines from the start. You can feel the difference if you watch streaming output. Constraint-first prompts start clean. Constraint-last prompts hesitate. The second is that role and context, despite what most guides will tell you, are not constraints. They are setting. They tell the model the world the answer lives in. If you put them first, you are telling the model to optimize for fidelity to a persona, and persona is a soft target. The model will hit it, but it will hit it loosely, and any specific rules you bolt on afterward get filtered through that persona's defaults. The persona for "senior content strategist" includes the words "unlock" and "seamless," whether you like it or not. You have to outrank the persona, not append to it. The way to outrank a persona is to put the rules above it. That is the whole trick. ## The structure I use now I have a single template I run for every client deliverable. It has three sections and a fixed order. I do not deviate from the order. I deviate from the content all the time. ```prompt # Maren's deliverable template ## Constraints - [hard rule 1, the one I would walk back the most] - [hard rule 2] - [hard rule 3] - [banned words or phrases, if relevant] - [length and format, exact] - [what NOT to do, two or three items] ## Task [Two or three sentences. The deliverable, the audience, the shape of the output. No backstory.] ## Context and voice [The setting. Who the company is, who the reader is, what tone the founder is asking for, what the current copy gets wrong. This is the longest section. It is also the section the model treats as background, which is correct.] ``` The thing I want you to notice is that the "context and voice" section, which most prompt guides put at the top, is at the bottom in my version. That is not because context does not matter. It matters a lot. It is because context is a thing the model can use loosely without breaking the deliverable. Constraints are not. If the headline is 84 characters, the client cannot use the headline. If the voice is slightly off, the client can usually live with it or send a one-line note. You are ordering by what is non-negotiable, top to bottom. **Put the things you will not edit at the top. Put the things you might edit at the bottom.** A note on what this is not. This is not "the model cannot follow instructions at the end of a prompt." It can. Opus 4.7 is genuinely good at honoring long instruction sets in any order, and on a generous brief you will not see the difference. You will see the difference on tight briefs, on first drafts, on anything where you do not have time for a second pass. Which, if you are a working operator, is most things. ## What to do on Monday Pick one prompt you run regularly. Could be a meeting summary prompt, a draft-the-LinkedIn-post prompt, an audit prompt, whatever. Find the one where you most often have to do a second pass to fix the same kind of mistake. That repeated mistake is your constraint. It is the thing the model keeps forgetting because you keep putting it at the bottom of the prompt. Move it to the top. Make it the first thing the model reads. Run the prompt again with the same input you used last week and compare the two outputs side by side. If you do not see a difference, your prompt is already in good shape and you should be writing this article instead of reading it. If you do see a difference, congratulations, you just got a meaningful upgrade for the price of a copy-paste. The order is the cheapest optimization in prompting. It costs nothing. It ships today. You do not need a new model, a new tool, or a new framework. You need to move three lines up. --- ### Optimizing Your Site for AI Agents and LLMs - URL: https://promptway.com/blog/optimizing-your-site-for-ai-agents - Raw markdown: https://promptway.com/blog/optimizing-your-site-for-ai-agents.md - Date: 2026-04-14 - Author: Agnel Nieves - Pillar: AEO & Visibility - Tags: aeo, geo, llms-txt, structured-data, ai-crawlers - Reading time: 6 min --- title: Optimizing Your Site for AI Agents and LLMs dek: >- Your site has human visitors and AI visitors. Here is how to serve both, with llms.txt, inline LLM instructions, structured data, and machine-readable feeds. slug: optimizing-your-site-for-ai-agents publishedAt: '2026-04-14' author: agnel-nieves pillar: aeo-visibility tags: - aeo - geo - llms-txt - structured-data - ai-crawlers summary: >- Your site now has two audiences: humans and AI agents. The good news is that most of what makes a site good for AI also makes it better for humans. Here is the eight-layer stack I added to my own site last week, in order, with the standards behind each move and what to skip. heroImage: /blog/optimizing-your-site-for-ai-agents.webp heroImageAlt: >- Engraved illustration of an open book on a stone pedestal with golden keys rising from its pages toward a glowing terminal prompt symbol, framed by botanicals and an hourglass against a deep blue background. heroVideo: /blog/optimizing-your-site-for-ai-agents.mp4 ogImage: /blog/optimizing-your-site-for-ai-agents-og.jpg assetCredit: Hero illustration and animation generated with Grok. canonical: 'https://agnelnieves.com/blog/optimizing-your-website-for-ai-agents-and-llms' draft: false featured: true --- Your site has two audiences now. Humans, obviously. But also AI agents, the LLMs that crawl, summarize, cite, and recommend content to millions of people. If your site is not optimized for both, you are leaving visibility on the table. I just finished optimizing my own site for AI consumption, and the process surfaced something worth naming up front: most of what makes a site good for AI also makes it better for humans. Clear structure, machine-readable content, and explicit metadata benefit everyone. Here is what I did, in the order I would do it again, and why each piece matters. ## What AI Agents Are Actually Doing With Your Site When someone asks ChatGPT, Claude, Perplexity, or Google's AI Overview a question, those systems do not just generate answers from training data. Increasingly, they fetch and cite live web content. Your site might get: - **Crawled for training data** by bots like GPTBot, ClaudeBot, and Google-Extended - **Fetched at query time** by Perplexity, ChatGPT browsing, and similar agents - **Cited as a source** in AI-generated responses - **Summarized in featured snippets** and AI overviews - **Navigated by autonomous agents** that interact with your APIs Each of those has different needs. They all benefit from the same foundation: structured, discoverable, machine-readable content. ## The llms.txt Standard The [llms.txt spec](https://llmstxt.org) is the equivalent of `robots.txt` for AI agents. Where `robots.txt` tells crawlers what they *can* access, `llms.txt` tells them what your site *is*. It is a structured markdown index, served at your domain root, written for a reader that is happier with markdown than with HTML. The format is simple: ```markdown # Your Name or Site > A one-line summary of what this site is. A longer description paragraph. ## Section Name - [Link Title](https://url): Description of what is at this link ``` I implemented two variants: - `/llms.txt` is the index. A table of contents with links to all pages, blog posts, profiles, and feeds. Think of it as a menu for AI agents to browse selectively. - `/llms-full.txt` is the full dump. Every blog post's complete markdown, every project description, biographical context. For agents that want everything in context at once. Both are served as `text/plain` with markdown formatting. Both are generated dynamically from the same data sources that power the site, so they never go stale. ## Inline LLM Instructions in HTML This one comes from a [Vercel proposal](https://vercel.com/blog/a-proposal-for-inline-llm-instructions-in-html) and it is clever: embed AI-readable instructions directly in the page `
` using a script tag that browsers ignore. ```html ``` Browsers skip `