{"slug": "hermes-agent-for-seo-from-search-console-to-a-blog-post", "title": "Hermes Agent for SEO: from Search Console to a blog post", "summary": "A developer has published a workflow that pairs the Hermes Agent with the Google Search Console API and NotFair's open-source skills to research, write, and audit SEO blog posts, adapting a process used at Straffe Sites. The tutorial covers installation, Google Cloud and Search Console authentication, and short skill commands that let the agent inspect a site and produce checkable drafts rather than generic keyword-driven copy. It also warns that credentials stay local but content sent to a cloud model may reach that provider.", "body_md": "I don't want an AI agent to turn a keyword into another 1,500 words of plausible advice. I want it to inspect the site, find a question worth answering, read the relevant documentation, and give me an article whose claims I can check.\n\nHermes Agent plus Google Search Console gets you part of the way there. Add reusable research and writing skills, your repository, and your own technical notes, and you have a workflow you can inspect instead of a conversation you hope went well.\n\nThis tutorial covers installation, connecting Google Search Console, and using short skill commands to research, write, or audit an article. It adapts the process behind my work at Straffe Sites.\n\nThere are three separate pieces:\n\n| Piece | Job | What it does not provide | \n|---|---|---|\n| [Hermes Agent](https://hermes-agent.nousresearch.com/) | Runs the conversation and tools; reads files; follows skills | A Google account or verified technical expertise | \n| [Google Search Console API](https://developers.google.com/webmaster-tools?hl=en) | Returns search performance for properties you can access | Market-wide keyword volume or an explanation of why rankings changed | \n| [NotFair's open-source skills](https://github.com/nowork-studio/notfair-plugin) | Supply research, audit, planning, and writing procedures | An automatically working replacement for their default hosted connector | \n\nYou ask for a task; Hermes loads the relevant skill, uses the connected tools, and returns an audit or draft for you to review. The skill carries the detailed procedure, so your chat message can stay short.\n\nYour Google credentials stay in the local setup, but content passed to a cloud model may reach that model provider. Use approved accounts, keep credentials out of chat, and only share client data you are allowed to process.\n\nYou will need [Git](https://git-scm.com/), a model provider configured in Hermes, and a Google account. You or your administrator must be able to approve Cloud setup and access to the intended Search Console property. Hermes can help select or create the Cloud project instead of making you configure it in advance. The [Bash](https://www.gnu.org/software/bash/) examples below target Linux, macOS, and [WSL2](https://learn.microsoft.com/en-us/windows/wsl/install) on Windows.\n\nThe [official Hermes installation guide](https://hermes-agent.nousresearch.com/docs/getting-started/installation) provides this CLI installer:\n\n```\ncurl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash\n```\n\nThat executes a downloaded installer with your user's permissions and installs dependencies. If you prefer to review it first, use this route instead:\n\n```\ncurl -fsSL https://hermes-agent.nousresearch.com/install.sh \\\n  -o hermes-install.sh\nless hermes-install.sh\n# Run only after reviewing the script and its dependencies.\nbash hermes-install.sh\n```\n\nOpen a new terminal if `hermes` is not yet on your PATH. Then verify the CLI and run setup in the default Hermes profile:\n\n```\nhermes --version\nhermes setup\nhermes skills list\n```\n\nIn setup, choose your model provider and follow its authentication flow. Hermes installation and access to a model are separate requirements.\n\nThe current [platform support page](https://hermes-agent.nousresearch.com/docs/getting-started/platform-support) lists Apple Silicon macOS as supported and Intel macOS as unsupported. Check that page before assuming an older Mac has the same installation path.\n\nFor the Bash examples in this article, use WSL2. In an administrator [PowerShell](https://learn.microsoft.com/en-us/powershell/) window:\n\n```\nwsl --install\n```\n\nRestart if Windows requests it, open the installed Linux distribution, complete its initial user setup, and run the Linux installer above inside that shell. Have Hermes install [Google Cloud CLI](https://docs.cloud.google.com/sdk/docs/install-sdk?hl=en) inside WSL too. Mixing a Windows Hermes process, WSL credentials, and Bash paths makes authentication harder to diagnose.\n\nHermes also has an official native Windows installer. If you prefer PowerShell rather than WSL:\n\n```\niex (irm https://hermes-agent.nousresearch.com/install.ps1)\n```\n\nReview that script first if you would not normally execute a remote installer. Native Windows installation is an alternative, not an extra step after WSL. The remaining shell snippets here are Bash; don't paste them unchanged into PowerShell. The Google setup prompt below asks Hermes to handle installation and paths for your actual environment, including native Windows.\n\nFor an introduction that also covers the desktop app, see [installing Hermes on Voltti](https://voltti.ai/en/insights/install-hermes-desktop-app-or-terminal). Use the official Hermes docs for current commands.\n\nOpen Hermes:\n\n```\nhermes\n```\n\nReplace `[MY_WEBSITE]` with your site and give Hermes this prompt:\n\n```\nInstall gcloud and connect Google Search Console for [MY_WEBSITE]\nusing a service account. Add its email in GSC through browser control,\nor give me the email to add myself. Use read-only access, ask me to\napprove permissions, and test the connection.\n```\n\nHermes can work out the installation commands, Cloud project setup, and authentication details from the official documentation. You handle Google login, consent, and 2FA. If browser control is unavailable, a [Search Console property owner](https://support.google.com/webmasters/answer/7687615?hl=en) can add the email under **Settings → Users and permissions**. Restricted access is enough for performance reports.\n\nKeep command approvals enabled. Prefer [keyless service-account authentication](https://docs.cloud.google.com/iam/docs/service-account-impersonation), keep credentials out of chat and your repository, and don't grant site ownership or broad Cloud administrator roles just to read reports. The connection test must use the service account that was added to GSC, not a different personal account.\n\nYou should finish with the correct property identified and a real API read, not just “setup complete.” If the property has no useful history yet, Hermes should say so. My [Search Console setup guide](https://straffesites.com/en/blog/google-search-console) covers creating and verifying the property itself.\n\nThe [NotFair plugin](https://github.com/nowork-studio/notfair-plugin) provides reusable SEO, research, and writing procedures. Ask Hermes to adapt them to the Google connection you just set up:\n\n```\nAdapt the SEO and Search Console skills from\nhttps://github.com/nowork-studio/notfair-plugin for Hermes.\nUse my gcloud service account instead of the hosted connector, name\nthem notfair-*, and keep Google access read-only. Show the changes\nand test results before installing.\n```\n\nHermes should inspect the source, include the required supporting files, and test the adaptation. You don't need to dictate the folder structure or API implementation. Review what it changed; once you are satisfied, reply:\n\n```\nInstall the reviewed skills.\n```\n\nThe `notfair-*` names below are the local names requested in that prompt, not commands bundled with a fresh Hermes install. Start a new Hermes session after installation. If a command is missing, ask Hermes to check that the skill was installed and exposed under its intended command name.\n\nVoltti's [guide to retrieving marketing data with an AI agent](https://voltti.ai/en/insights/retrieve-marketing-data-with-ai-agent) explains the broader approach. Here, the goal is simply to make the skills use your own working Google connection.\n\nIn the Hermes chat box, start with **`/skill-name`**, then add a URL and what you want done. Type `/` to see available commands. Hermes [loads the installed skill's instructions](https://hermes-agent.nousresearch.com/docs/user-guide/features/skills) for you; you don't need to paste its whole procedure into the conversation.\n\nThese examples go into **Hermes chat, not Bash or PowerShell**. I use Straffe Sites URLs as examples. Replace them with your own site; a public URL does not grant access to its private Search Console data.\n\nEach block below contains the original prompt and the complete final answer from a recorded Hermes run. Intermediate tool activity is omitted. The writing follow-ups continue the same writing conversation; the audit follow-up continues its own audit conversation. Nothing was published.\n\nDEV currently labels these compatible trace imports as Claude Code. The agent that ran them was Hermes. Expand the longer answers and use the scrollbar to read them. DEV does not create section anchors inside these embeds, so an answer's contents links will not jump to its headings.\n\nThe skill supplies the writing process. Your prompt supplies the site and topic. Add an audience or angle when it matters, and let Hermes ask for anything it cannot establish from the context.\n\n/notfair-content-writer [https://straffesites.com](https://straffesites.com)\n\nWrite an English article about Astro versus WordPress for small\n\nbusiness websites.\n\n`/en/blog/astro-vs-wordpress`\nNo dedicated Astro-versus-WordPress article was found in the inspected content inventory or site search. Related coverage already exists:\n\nThis draft keeps its focus on small-business platform selection rather than repeating those implementation guides.\n\nThe verified keyword registry uses final Google Search Console data for `sc-domain:straffesites.com`, covering September 1, 2025, through September 1, 2026. It contains no retained query combining “Astro” and “WordPress.” The proposed primary keyword therefore comes from the requested topic and live search research, not a demonstrated ranking opportunity in that registry.\n\nRelevant existing queries include:\n\n| Existing destination | Recorded query | Clicks | Impressions | \n|---|---|---|---|\n| Headless CMS article | what is a headless cms | 0 | 106 | \n| WordPress maintenance article | wordpress development and maintenance | 0 | 182 | \n| Astro glossary entry | astro framework | 0 | 11 | \n\nThese are query impressions for this property and period, not search volumes. The low-click clusters are indicative, and absent queries do not establish absent demand.\n\nThe first five returned results included:\n\n| Result | Format and emphasis | Editorial response | \n|---|---|---|\n| [Web Aloha](https://webaloha.co/wordpress-vs-astro-for-business/) | Broad comparison with performance, security, and cost claims | Explain caching and avoid treating platform defaults as guaranteed outcomes. | \n| [Reddit discussion](https://www.reddit.com/r/smallbusiness/comments/1t6zldz/astro_code_or_wordpress_for_businesses_websites/) | Community discussion about editing and maintenance ownership | Full discussion unavailable: extraction failed and the browser showed a human-verification page. No anecdote from it is used as evidence. | \n| [Andrew Walpole](https://andrewwalpole.com/blog/consider-astro-over-wordpress/) | Developer perspective on custom brand sites and content architecture | Bring the decision down to small-business editing tasks and handover requirements. | \n| [MFB Solutions](https://www.mfbsolutions.hr/en/blog/wordpress-vs-astro-for-small-business) | Small-business comparison favoring Astro | Correct the implication that static delivery eliminates technical maintenance. | \n| [Dizzi Digital](https://dizzidigital.com/blog/wordpress-vs-astro-business-website/) | Business-purpose comparison and migration discussion | Add a concrete acceptance test for editing, publishing, integrations, and recovery. | \n\nTechnical claims below rely on official documentation rather than competitors' benchmarks. The business scenario is explicitly hypothetical. No speed experiment, client result, or ranking uplift is invented.\n\nAstro vs WordPress is often sold as a speed contest. For a small business, the more expensive mistake may be choosing a site that nobody can update. Choose Astro when a developer will maintain a mostly informational site; choose WordPress when the business needs a familiar publishing dashboard or depends on established plugins. A fast homepage cannot compensate for an outdated service page.\n\nThis comparison is for developers advising small businesses and owners reviewing their recommendations. WordPress here means the open-source CMS in a conventional hosted setup, not a particular WordPress.com plan. Astro means the web framework, with static delivery as the starting point rather than a restriction.\n\n**Contents**\n\nWordPress combines content management with website rendering. Its [block editor](https://wordpress.org/documentation/article/wordpress-block-editor/) gives editors a browser interface for headings, images, paragraphs, and other content. Themes control presentation, while plugins can add features.\n\nAstro is a framework for building the website. It does not supply an equivalent editorial dashboard by itself. Developers can use content files, connect a CMS, or combine sources. Its [default rendering mode](https://docs.astro.build/en/guides/on-demand-rendering/) builds pages ahead of time; routes that need fresh or personalized responses can render on demand with an adapter and suitable runtime.\n\n| Decision | Astro, starting with static pages | Conventional WordPress | \n|---|---|---|\n| Who changes content? | A developer, or editors using a separately configured CMS | Editors using the built-in dashboard | \n| How do visitors receive pages? | Prebuilt HTML for static routes; server rendering where configured | Generated pages or cached responses, depending on the setup | \n| How are features added? | Components, integrations, external services, or custom code | Core features, plugins, external services, or custom code | \n| What needs maintenance? | Dependencies, build and deployment workflow, hosting, accounts, and integrations | Core, themes, plugins, hosting, database, accounts, and integrations | \n| Where does it fit well? | Content-focused sites with deliberate control over the frontend | Sites that benefit from an established editor and plugin workflow | \n\nNeither column describes a maintenance-free product. Compare the complete setup the client will receive, including the editing interface and support arrangement.\n\nBefore approving a platform, ask the person who will maintain the content to change opening hours, replace a photo, and publish a service update in a preview environment. Give them the proposed interface, not a presentation about it.\n\nWatch where they need help. Can they preview the page on a phone? Can they correct a mistake without contacting the developer? Can another employee take over? A technically elegant setup fails this test if routine changes require skills the business does not have.\n\nWordPress supplies the basic editing interface. Its usability still depends on the theme, blocks, permissions, and customizations. A cluttered dashboard with unrestricted layout controls can be harder to use than a small set of well-designed fields.\n\nAn Astro proposal should name the content workflow: developer-managed files, a Git-based editor, or a headless CMS. These are different products for the business, even when visitors receive similar HTML.\n\nStraffe Sites provides a concrete example of the file-based option: its [website without a CMS](https://straffesites.com/en/blog/website-without-cms) uses Astro Content Collections with MDX and JSON content in Git. That demonstrates a workable approach for a technical team. It does not show that a shop owner should learn Git to change holiday hours.\n\nIf editors need a CMS, include it from the start. Agree on preview access, publication timing, image handling, and who responds when an update fails. **Choose the editing workflow before treating Astro as the finished solution.**\n\nAstro's [islands architecture](https://docs.astro.build/en/concepts/islands/) lets developers render UI components as HTML and add client-side JavaScript where interactive components need it. A service page can remain mostly HTML while a calculator receives its own interactive code.\n\nThat can reduce unnecessary browser work. It does not make large photos smaller by itself, remove an embedded booking widget, or stop a developer from adding expensive scripts. Ordinary script tags and third-party embeds still count toward the visitor's workload.\n\nWordPress is not required to rebuild every public page for every visitor. Its [official caching documentation](https://developer.wordpress.org/advanced-administration/performance/cache/) describes serving cached static files. A well-configured page cache changes the comparison substantially; dynamic and personalized pages need separate consideration.\n\nCompare representative pages with the content and features the business will actually use. Include the same images, fonts, analytics, and booking tools. Test a service page and an article, not just a nearly empty homepage.\n\nCheck loading behavior and responsiveness on mobile, keyboard navigation, layout stability, and whether the main action works. Record the test conditions. Lab tests help diagnose problems; available real-user data describes a different population and should not be presented as the same measurement.\n\nGoogle confirms that [Core Web Vitals are used by its ranking systems](https://developers.google.com/search/docs/appearance/page-experience), but good scores do not guarantee top rankings. Neither platform replaces useful content, crawlable links, or accurate service information. This article reports no controlled Astro-versus-WordPress experiment, so it makes no percentage-speedup or ranking-uplift claim.\n\nThe acceptance criterion should be a usable, measured website, not the framework name on the proposal.\n\nWordPress needs a plan for core, theme, and plugin updates, backups, access control, and recovery. Its [security guidance](https://developer.wordpress.org/advanced-administration/security/hardening/) describes security as risk reduction rather than risk elimination. Managed hosting can take responsibility for some tasks; check which ones the agreement actually covers.\n\nTest important functions after changes. For a service business, a working contact form matters more than a dashboard that says every plugin is current. The separate guide to [WordPress maintenance](https://straffesites.com/en/blog/wordpress-maintenance) covers the work in more detail.\n\nA fully static Astro frontend does not need a WordPress application or database to serve its pages. Removing that public application layer removes the need to maintain it. But the repository, dependencies, deployment accounts, domain, and hosting still need care. Forms, APIs, and any connected CMS bring their own responsibilities.\n\nA compromised deployment account can replace a static site. A broken dependency can prevent the next build. If the site uses on-demand rendering, its runtime also needs maintenance. “Nothing to patch” is not a credible handover promise.\n\nCompare ownership costs across the same scope: implementation, hosting, editor support, integrations, updates, recovery, and eventual handover. Do not compare basic static hosting with a WordPress agreement that also includes technical support. Ask who owns each task and what happens when that person is unavailable.\n\nA static page can display a form, but submitting it still needs a receiving service or server endpoint. Choose that destination before launch. Test validation, spam controls, delivery failures, and the confirmation message. A success screen should mean the receiving system accepted the request, not merely that the visitor clicked a button.\n\nFor appointments, distinguish a link to an existing booking service from a custom booking application. A local consultant who already uses a scheduling service may need only a clear link. A business managing staff calendars, deposits, cancellations, and customer accounts has a larger integration problem.\n\nThe same distinction applies to selling online. WordPress can use a commerce plugin such as [WooCommerce](https://woocommerce.com/). Astro can connect to a commerce backend, but the framework itself is not an order-management system. Define who handles products, inventory, payments, refunds, and customer notifications before selecting the frontend.\n\n**List the business operations first.** If an established WordPress plugin already supports them well, replacing it with custom integrations needs a specific benefit. If the business already runs those operations in another service, its website may not need to duplicate them.\n\nAstro and WordPress can work together. In a headless setup, WordPress manages content while Astro renders the public website. The [official Astro integration guide](https://docs.astro.build/en/guides/cms/wordpress/) explains how to retrieve content through the WordPress REST API.\n\nThis is useful when editors need to retain WordPress while developers need a separate frontend. The guide to [how a headless CMS works](https://straffesites.com/en/blog/what-is-a-headless-cms) explains that separation more broadly.\n\nIt also leaves two systems to operate. For a statically built frontend, publishing in WordPress must trigger a successful build and deployment before visitors see the new content. Draft previews, failed builds, redirects, and cache invalidation need deliberate handling. WordPress plugins that expect to render their own frontend do not automatically become Astro components.\n\nKeep private drafts behind appropriate authentication. Treat HTML returned by a CMS according to its trust boundary; rendering a string as HTML is not a substitute for controlling who can supply it.\n\nChoose this combination to preserve a valuable editorial workflow or meet a frontend requirement. It is usually unnecessary complexity if a conventional WordPress site already does the job.\n\nConsider a hypothetical electrical contractor with eight service pages, a project gallery, a contact form, and an existing external scheduling tool. The owner changes service descriptions occasionally and wants someone else to handle technical maintenance. These are example requirements, not a client case or measured experiment.\n\nAstro is a reasonable starting point. The service pages can be prebuilt, the gallery can use optimized images, and the booking action can link to the scheduling tool. The proposal still needs to explain how the owner requests content changes and how urgent corrections are handled.\n\nNow change one requirement: an office manager must publish new projects independently every week. Astro can still work, but a suitable CMS becomes part of the proposal. WordPress deserves a fresh comparison because its editor may meet that requirement with less integration work.\n\nChange another requirement: the business already relies on a WordPress plugin to coordinate bookings and payments. Keeping WordPress may now be the lower-risk choice. Rebuilding a working operational system just to change the frontend is a much larger decision than replacing a brochure site.\n\nUse this exercise in discovery. Change the requirements and see whether the recommendation changes. If the answer is always the developer's favorite framework, the evaluation is not doing its job.\n\nA working WordPress site does not need replacement because Astro exists. First identify the problem: slow pages, an unusable editor, excessive maintenance, or a design that no longer fits the business. Some problems can be fixed without changing platforms.\n\nIf a migration is justified, make an inventory of existing URLs, content, images, metadata, forms, and integrations. Preserve useful URLs where possible. Map changed URLs to relevant destinations instead of sending everything to the homepage, and check internal links after the move.\n\nAvoid these common shortcuts:\n\nBefore signing off, request a demonstration of editing, publishing, and recovery, plus a written handover plan. Choose Astro for a content-focused site with an agreed editing workflow and capable technical ownership. Choose WordPress when its editor or established integrations solve the business's needs more directly. Keep the current site when the migration cannot justify its disruption.\n\nAstro is a strong option for a content-focused site with an agreed editing workflow and technical support. WordPress is often the more direct choice when staff need its built-in editor or established plugins. Choose the complete setup, not the framework in isolation.\n\nYes, if the project includes an appropriate CMS or editing interface. Astro alone does not provide a WordPress-style dashboard. Without an editor, content changes usually go through someone comfortable with the project's files and publishing workflow.\n\nNo. Astro can support a lightweight implementation, but rankings also depend on content relevance and other signals. A migration must preserve useful URLs, internal links, metadata, and indexability. Good performance scores do not guarantee higher rankings.\n\nYes. Astro can retrieve content through the WordPress REST API while WordPress remains the editing system. The project still needs WordPress maintenance, frontend deployment, and a tested approach to previews and publishing.\n\nImage production is outside this demonstration's scope. These are concepts, not existing assets. No placeholder image tags have been inserted. The inline concepts are optional editorial suggestions, not instructions to override the site's image policy.\n\n`astro-vs-wordpress-publishing-workflows.webp`\n`website-editor-acceptance-test.webp`\n`astro-wordpress-page-delivery.webp`\n`website-maintenance-responsibilities.webp`\nThe following draft JSON-LD parses successfully, and all four FAQ questions and answers match the article.\n\nPublication-specific fields are deliberately absent: `image`, `url`, `mainEntityOfPage`, author identity, and publication dates must come from the approved publication and real assets. This is a draft schema, not a claim that a page or image has been published.\n\n`FAQPage` remains a Schema.org type, but Google's [documentation changelog](https://developers.google.com/search/updates#removing-faq-rich-result) states that FAQ rich results are no longer shown. This markup is not a promise of search-result enhancements.\n\n```\n{\n  \"@context\": \"https://schema.org\",\n  \"@graph\": [\n    {\n      \"@type\": \"BlogPosting\",\n      \"headline\": \"Astro vs WordPress: choose for the person editing\",\n      \"description\": \"Astro vs WordPress for small business websites: compare editing, speed, maintenance, and integrations. Use a practical checklist to choose your setup.\",\n      \"inLanguage\": \"en-US\",\n      \"about\": [\n        {\n          \"@type\": \"Thing\",\n          \"name\": \"Astro\"\n        },\n        {\n          \"@type\": \"Thing\",\n          \"name\": \"WordPress\"\n        }\n      ]\n    },\n    {\n      \"@type\": \"FAQPage\",\n      \"inLanguage\": \"en-US\",\n      \"mainEntity\": [\n        {\n          \"@type\": \"Question\",\n          \"name\": \"Is Astro better than WordPress for a small business?\",\n          \"acceptedAnswer\": {\n            \"@type\": \"Answer\",\n            \"text\": \"Astro is a strong option for a content-focused site with an agreed editing workflow and technical support. WordPress is often the more direct choice when staff need its built-in editor or established plugins. Choose the complete setup, not the framework in isolation.\"\n          }\n        },\n        {\n          \"@type\": \"Question\",\n          \"name\": \"Can a nontechnical owner update an Astro website?\",\n          \"acceptedAnswer\": {\n            \"@type\": \"Answer\",\n            \"text\": \"Yes, if the project includes an appropriate CMS or editing interface. Astro alone does not provide a WordPress-style dashboard. Without an editor, content changes usually go through someone comfortable with the project's files and publishing workflow.\"\n          }\n        },\n        {\n          \"@type\": \"Question\",\n          \"name\": \"Does switching to Astro improve SEO automatically?\",\n          \"acceptedAnswer\": {\n            \"@type\": \"Answer\",\n            \"text\": \"No. Astro can support a lightweight implementation, but rankings also depend on content relevance and other signals. A migration must preserve useful URLs, internal links, metadata, and indexability. Good performance scores do not guarantee higher rankings.\"\n          }\n        },\n        {\n          \"@type\": \"Question\",\n          \"name\": \"Can Astro use WordPress as its CMS?\",\n          \"acceptedAnswer\": {\n            \"@type\": \"Answer\",\n            \"text\": \"Yes. Astro can retrieve content through the WordPress REST API while WordPress remains the editing system. The project still needs WordPress maintenance, frontend deployment, and a tested approach to previews and publishing.\"\n          }\n        }\n      ]\n    }\n  ]\n}\n```\n\n| Destination | Anchor used | Purpose | \n|---|---|---|\n| [Website without a CMS](https://straffesites.com/en/blog/website-without-cms) | website without a CMS | Show the site's documented file-based content workflow. | \n| [WordPress maintenance](https://straffesites.com/en/blog/wordpress-maintenance) | WordPress maintenance | Keep detailed maintenance coverage on its existing page. | \n| [What is a headless CMS?](https://straffesites.com/en/blog/what-is-a-headless-cms) | how a headless CMS works | Explain the architecture without expanding this comparison into a separate CMS tutorial. | \n\nThe headless anchor follows a recorded query variation. The maintenance anchor is a natural topic description; no ranking claim is made for that exact phrasing. The newer no-CMS article has no demonstrated cluster in the inspected snapshot.\n\nThese are recommendations only; no links were added.\n\nThis is the complete demonstration draft and writing package. Nothing has been published.\n\nThis is writing output to review, not an approved article. A short follow-up narrows the same draft to developers maintaining the site:\n\nFocus on developers maintaining the site. Show me the outline first.\n\nProposed title\n\nAstro vs WordPress: what developers maintain after launch\n\nAudience\n\nDevelopers responsible for small business websites after handover: content changes, dependency updates, forms, production failures, and eventual migration.\n\nAngle\n\nCompare the work each setup leaves you with. Keep the earlier draft's distinctions around caching, headless WordPress, and editing, but move the focus from the owner's platform choice to the maintainer's responsibilities.\n\nOutline\n\nOpen with the recommendation:\n\n   - Static Astro is a strong fit when the site mostly publishes content and its publishing workflow has a clear technical owner.\n\n   - Conventional WordPress is often more practical when its editor and established plugins already meet the business's needs.\n\n   - Keeping a working site is a valid outcome.\n\nDefine the comparison: static-first Astro versus conventional WordPress with sensible caching and maintenance. Cover on-demand Astro and headless WordPress as separate configurations.\n\nExplain the request path briefly, then connect it to operational work:\n\n   - Prebuilt Astro pages versus cached and uncached WordPress responses.\n\n   - What removing a public PHP application and database removes from maintenance.\n\n   - What remains: dependencies, deployment access, hosting, domains, and integrations.\n\n   - How adding SSR changes the responsibilities again.\n\nInclude one compact comparison table organized by maintenance task, not feature scores.\n\nTrace the same change through both setups: update a service description and replace its image.\n\nCover:\n\n   - WordPress editing, preview, publication, and cache invalidation.\n\n   - Astro file changes or CMS updates, validation, build, and deployment.\n\n   - Diagnosing “published in the editor, missing on the website.”\n\n   - Who handles urgent corrections when the usual maintainer is unavailable.\n\nTreat the editor as part of the system the developer supports, not a separate convenience.\n\nUse two clearly labeled hypothetical incidents:\n\n   - A WordPress plugin update breaks the contact form.\n\n   - An Astro dependency update prevents deployment.\n\nExplain:\n\n   - Staging, backups, dependency locks, and focused regression checks.\n\n   - The difference between a failed build and a broken live deployment.\n\n   - Why a code rollback does not necessarily reverse database changes.\n\n   - What a recovery procedure must cover beyond “revert the commit.”\n\nTakeaway: define and test recovery for the actual deployment setup.\n\nFollow the business-critical path beyond the frontend:\n\n   - Form submission, validation, spam protection, and delivery.\n\n   - Embedded scheduling tools versus booking plugins or custom integrations.\n\n   - Payments, webhooks, and external service failures where relevant.\n\n   - Checks that prove an inquiry reached its destination.\n\nShow when replacing a working plugin creates more maintenance than it removes.\n\nExplain when Astro plus WordPress is justified.\n\nCover the additional work:\n\n   - API access and private previews.\n\n   - Build triggers, publication delays, and failed updates.\n\n   - Rendering blocks and features that previously depended on the theme.\n\n   - Maintaining both WordPress and the Astro frontend.\n\nKeep this section short: an operational trade-off, not an integration tutorial.\n\nApply the comparison to a hypothetical small service-business site. Change its requirements to show when the recommendation changes.\n\nEnd with a practical checklist:\n\n   - Who edits, and how urgently?\n\n   - Which integrations already work?\n\n   - Who owns updates and recovery?\n\n   - What can another developer take over?\n\n   - Could the current site's problems be fixed without migrating?\n\nInclude performance checks here: representative pages, real scripts and embeds, consistent test conditions, and no automatic SEO benefit.\n\nEssential editorial decisions\n\nAn outline lets you check the angle before another writing pass. Give Hermes your own code, notes, or test results when you want first-hand examples; the agent cannot invent your experience.\n\nThe URL is enough to request a page audit. Hermes loads the audit skill, examines the page, and identifies improvements. If its GSC connection has access to that property, it can use the search data too; otherwise it should explain that limitation.\n\n/notfair-seo-page [https://straffesites.com/en](https://straffesites.com/en)\n\n*September 13, 2026 · GSC data: June 13–September 10, 2026 · 90 days, final data*\n\nThe page is indexed, its canonical is correct, and its technical foundation is strong. The main opportunity is clearer, better-qualified commercial messaging—not an indexability repair.\n\nThe audited URL is the English business homepage, not a developer tutorial. It should help prospective clients understand the service, assess the evidence, and contact the team. Tutorial content is supporting material.\n\nThese are editorial assessments, not Google scores, PageSpeed measurements, or ranking predictions. GSC metrics and browser observations are identified separately.\n\n| Dimension | Score | Weight | Weighted | \n|---|---|---|---|\n| Search Intent Alignment | 8.0/10 | 20% | 1.600 | \n| E-E-A-T Signals | 7.5/10 | 20% | 1.500 | \n| Content Quality & Depth | 7.0/10 | 20% | 1.400 | \n| On-Page SEO | 8.5/10 | 15% | 1.275 | \n| Content Structure & UX | 8.0/10 | 15% | 1.200 | \n| Technical SEO | 8.5/10 | 10% | 0.850 | \n| **Overall** |  |  | **7.825 → 7.8** | \n\n| Dimension | What earns the score | What prevents a higher score | \n|---|---|---|\n| Search intent | Services, portfolio, process, and “Discuss your project” fit a commercial homepage. | The headline emphasizes speed without immediately identifying the small-business audience. Actual GSC queries are sparse and ambiguous. | \n| E-E-A-T | Named contact, 12 linked case studies, linked Google reviews, technical explanations, and an HTTP Archive citation. | Hero performance claims lack an adjacent measurement date, sample definition, and clearly named loading metric. | \n| Content quality | Covers services, examples, process, editing, support, and terminology. | Buyers get limited detail about project scope and delivery dependencies. A substantial part of the content is article-card text rather than buyer guidance. | \n| On-page SEO | Complete metadata, one H1, descriptive links, responsive WebP images, and language annotations. | Minor English-copy issues and an opportunity to make the title more audience-specific. | \n| Structure and UX | Short sections, a clear primary CTA, native FAQ disclosures, and no horizontal overflow in the tested viewports. | The article rail contains 34 cards, which may be more choice than a homepage visitor needs. No conversion or usability study was available. | \n| Technical SEO | Google confirms indexing; server-rendered content, self-canonical, valid JSON-LD parsing, HTTPS, and responsive geometry. | No fresh Lighthouse or URL-level field-performance assessment was run, and this was not a full accessibility or asset audit. | \n\nNo critical indexability blocker was found.\n\nThe biggest improvement would be making the existing performance evidence precise and easy to verify. Strong numbers are useful only when visitors understand what was measured.\n\n🟡 **High**\n\n**Score impact:** Potentially +0.5 in E-E-A-T and +0.5 in Content Quality. These are editorial estimates, not projected ranking gains.\n\n**Current:**\n\n“Our case sites reach a 98/100 median mobile PageSpeed score; the fastest loads in 0.9 seconds.”\n\n**Fix:**\n\nAdd a nearby evidence link and state:\n\nDo not describe LCP as total page-load time if LCP is the underlying metric.\n\nA safe nonnumeric alternative, pending verification of those details:\n\n“Explore our case studies for monthly PageSpeed measurements and Search Console reporting.”\n\n**Why:** The audit verified that the numbers appear on the page; it did not independently reproduce them. Clear provenance strengthens trust and avoids confusing a lab performance score with a visitor-experience guarantee.\n\n**Score impact:** Potentially +0.5 in Content Quality and +0.5 in the Trustworthiness subscore.\n\n**Current heading:**\n\n“We build with Astro — the Core Web Vitals leader in the latest HTTP Archive comparison”\n\n**Current explanation:**\n\n“In July 2026, 69% of measured mobile Astro sites had good Core Web Vitals, compared with 49% for WordPress and 33% for Next.js.”\n\n**Verified finding:** The linked source confirms those July values. However, it now displays August 2026 as the latest period, with Astro at 71%, WordPress at 48%, and Next.js at 35%.\n\nSuggested heading:\n\n“Astro leads this Core Web Vitals comparison”\n\nSuggested explanation:\n\n“In HTTP Archive’s August 2026 mobile comparison, 71% of measured Astro origins had good Core Web Vitals, compared with 48% for WordPress and 35% for Next.js.”\n\nKeep the source link. Explain that an origin groups pages under the same protocol, host, and port; this is not a measurement of every page built with a framework.\n\n**Why:** The existing July figures are not fabricated or disproved, but “latest” is stale. Framework-level comparisons also do not prove that a particular website will pass Core Web Vitals.\n\n🟢 **Medium**\n\n**Score impact:** Potentially +0.5 in Search Intent Alignment and +0.3 in On-Page SEO.\n\n**Current title:**\n\n“Straffe Sites — rock-solid websites that load fast”\n\n**Current H1:**\n\n“A rock-solid site that loads fast”\n\nTest this title rather than assuming the existing one is underperforming:\n\n“Fast websites for small businesses | Straffe Sites”\n\nThe proposed title is 50 characters.\n\nKeep the distinctive H1 if desired, but make the first sentence more explicit:\n\n“We design and build fast websites and online stores for independent professionals and small businesses. Seppe is your main contact, supported by a senior team.”\n\n**Why:** The current meta description already identifies the audience. Bringing that clarity into the title or opening sentence helps qualified visitors recognize the fit.\n\nGSC does not show a proven CTR problem here. This is a relevance hypothesis, not a fix justified by a statistically reliable CTR deficit.\n\n**Score impact:** Potentially +0.5 in Content Quality.\n\n**Current timeline answer:**\n\n“It varies by project. Because you work directly with the developer, communication is quick. After our first conversation, you’ll get a realistic schedule.”\n\nExplain the factors that determine the schedule without inventing a delivery promise:\n\n“The schedule depends on the number of pages, content readiness, custom integrations, and feedback rounds. After the first conversation, we outline the project milestones and what we need from you.”\n\nReview the content-editing answer in the same way: distinguish projects with an editor-friendly CMS from projects where content is maintained through a development workflow.\n\n**Why:** Competitors explain publishing autonomy, migrations, and ongoing delivery in more detail. A few concrete answers would help buyers qualify their project without turning the homepage into a technical manual.\n\n| Signal | Score | Evidence | \n|---|---|---|\n| Experience | 8/10 | Twelve named case-study cards and practical delivery language: “You speak directly with the builder” and “You see the progress as it happens.” The homepage does not itself show detailed before-and-after evidence. | \n| Expertise | 8/10 | Correctly identifies LCP, INP, and CLS in the glossary; explains integrations, maintenance, CMS editing, and a staged delivery process. The hero’s “loads in 0.9 seconds” wording lacks metric precision. | \n| Authoritativeness | 7/10 | Seppe is named, the team page is linked, the server-rendered content states “25+ years of experience,” and relevant case studies and technical articles are linked. Independent reputation and backlinks were not assessed. | \n| Trustworthiness | 7/10 | HTTPS, direct contact details, legal links, a Google-review link, and an HTTP Archive citation. The review rating and case-performance aggregate were not independently remeasured; the “latest” comparison needs updating. | \n\n**YMYL:** This is not primarily a health, financial-advice, legal-advice, or safety page. Health-related client names in the portfolio do not make the homepage a medical-advice resource.\n\nThe page displays “4.9/5 on Google” and “26 reviews.” These are observed page claims, not independently verified review metrics from this audit.\n\n**Target keyword:** “Fast websites for small businesses” is an inferred commercial theme, not an established high-volume query for this URL.\n\n**Actual leading disclosed GSC query:** “fast sites,” with 3 clicks and 17 impressions.\n\n**Intent type:** Commercial service selection and branded navigation.\n\n**Content format match:** **Yes for the commercial theme; uncertain for the ambiguous query “fast sites.”**\n\nTwo searches were used to avoid judging intent from the homepage alone.\n\n| Search | Observed result sample | Interpretation | \n|---|---|---|\n| `fast website development small business Astro agency` | Astro Partner Agencies; Astro’s framework homepage; Lucky Media; Seibert; Opace | A mixture of agency discovery, commercial service pages, and framework information. The homepage’s service format is compatible. | \n| `fast sites` | Louisiana’s FastSites program; a governor’s announcement; WAFB coverage; a Catchpoint performance article; Louisiana Illuminator coverage | Strong ambiguity. This is not a clean web-development purchase query in the returned sample. | \n\nThese are current search-tool results, not a controlled Google rank-tracking study. Geography, device, and personalization were not matched to the historical GSC impressions.\n\n**Conclusion:** Do not optimize the homepage around “fast sites” simply because it produced three clicks. Preserve the homepage’s brand and service role, and let dedicated service pages own narrower purchase queries.\n\n| Feature | Optimized? | Fix | \n|---|---|---|\n| Featured snippet | Not established | No featured-snippet ownership was confirmed. Do not add a long informational section solely to chase one. | \n| People Also Ask | Structurally prepared | Four visible FAQs provide question-and-answer content, but PAA appearances were not reported by the search tool. Improve buyer usefulness rather than promising placement. | \n| Rich results | Markup present; appearance unconfirmed | Organization, WebSite, and FAQPage JSON-LD parse successfully. URL Inspection did not return a rich-result assessment. Markup does not guarantee an enhanced result. | \n| Image results | Basic preparation present | Descriptive alt text and WebP assets exist. Image-search visibility was not measured. | \n\n| Element | Current | Status | Recommendation | \n|---|---|---|---|\n| Title tag | “Straffe Sites — rock-solid websites that load fast” — 50 characters | Good length and clear benefit | Consider the audience-specific variant above. No demonstrated truncation problem. | \n| Meta description | “The Straffe Sites team designs and builds fast websites and online stores for independent professionals and small businesses, with no agency in between.” — 152 characters | Complete and relevant | Retain the audience clarity. A stronger invitation to view work is optional, not essential. | \n| H1 | “A rock-solid site that loads fast” | One H1; clear benefit | Clarify the service and audience in the adjacent introduction. | \n| Canonical | `https://straffesites.com/en` | Correct | Google-selected and user-declared canonicals agree. | \n| Robots metadata | No robots meta tag; no X-Robots-Tag in the checked response | No exclusion detected | An explicit `index,follow` tag is unnecessary. | \n| Open Graph | Title, description, URL, image, type, site name, and `en_US` locale | Complete | The declared 1200×630 image URL returned HTTP 200; visual preview not reviewed. | \n| Twitter Card | `summary_large_image` , title, description, and image | Complete | No urgent change. | \n| Language | HTML `lang=\"en\"` | Appropriate | Continue using US English consistently. | \n| Hreflang | `nl` ,`en` , and`x-default` | Present on the audited page | Reciprocal annotations on the Dutch page were outside this page-only audit. | \n\nSitewide title and description uniqueness was not tested.\n\nThe main content has one H1 and a consistent H2 → H3 hierarchy.\n\n```\nH1: A rock-solid site that loads fast\n  H2: We build with Astro — the Core Web Vitals leader in the latest HTTP Archive comparison\n  H2: One team, everything for your site\n    H3: Web development\n    H3: Custom features & integrations\n    H3: Website maintenance\n    H3: Technical partner\n    H3: AI design to website\n  H2: Work with real personality\n    H3: Verhuurwinkel.nl\n    H3: Straffe Sites\n    H3: Voltti.ai\n    H3: Gitaarlessen Boeckx\n    H3: 2140 Boxing Training\n    H3: Figur\n    H3: New Impact\n    H3: Roulez Roulez\n    H3: sympl\n    H3: ZET\n    H3: HWV Facilities\n    H3: CLW Antwerpen\n  H2: How we work together\n    H3: Introduction\n    H3: Design\n    H3: Build\n    H3: Launch & support\n  H2: No agency. Just a senior team\n  H2: Keep reading\n    H3: 34 linked article titles\n  H2: Frequently asked questions\n  H2: Terms\n    H3: CMS\n    H3: Responsive web design\n    H3: Core Web Vitals\n    H3: SEO\n    H3: Web hosting\n    H3: Website maintenance\n  H2: Ready for a rock-solid site?\n```\n\nThe article-card H3s cover CMS integrations, websites without a CMS, agency SEO research, lab versus field performance, website costs, semantic markup, AI writing, Search Console, Storyblok, Astro, hiring developers, maintenance, keyword research, and implementation tutorials.\n\nNavigation and contact-interface headings also exist outside `<main>`. They are not extra page H1s.\n\n**Assessment:** Logical structure. The main weakness is not heading hierarchy but emphasis: the long framework-comparison heading is more technical than the buyer-oriented service headings.\n\nFound **122 same-origin link elements across the document**, including navigation, repeated destinations, and fragment links. **63 are inside `<main>`.**\n\nThese are link-element counts, not counts of unique destination pages.\n\n| Anchor text or card heading | Target | Quality | \n|---|---|---|\n| Discuss your project | `/en/contact` | Clear conversion action | \n| See recent work ↓ | `/en#werk` | Useful on-page navigation; target exists | \n| Web development | `/en/website-development` | Relevant; card description adds context | \n| Custom features & integrations | `/en/web-development` | Descriptive and differentiated | \n| Website maintenance | `/en/website-maintenance` | Strong service anchor | \n| AI design to website | `/en/ai-design-to-website` | Specific service intent | \n| Meet the team ↗ | `/en/team` | Useful trust destination | \n| Straffe Sites case card | `/en/case/straffe-sites` | Useful supporting evidence | \n| Core Web Vitals | `/en/glossary/core-web-vitals` | Relevant explanation | \n| View all articles | `/en/blog` | Appropriate directory action | \n\nThe checked contact, service, team, and own-case destinations returned HTTP 200 without a redirect. This was a targeted check, not a full crawl of every link.\n\nThe large link count is not automatically an SEO defect. Much of it comes from the portfolio, article rail, and navigation. A shorter article selection could improve decision-making, but there is no measured evidence here that link count is harming rankings.\n\nTwo outbound HTTPS link elements were found:\n\n| Link | Purpose | Assessment | \n|---|---|---|\n| Google reviews | Reputation evidence | Useful direct source; rating and count not independently confirmed | \n| HTTP Archive comparison | Framework-performance citation | Source inspected successfully in a browser; July values confirmed and newer August values found | \n\nEmail and telephone links are contact actions, not external web citations.\n\nFound **49 `<img>` elements**:\n\n| Image group | Count | Format and attributes | Assessment | \n|---|---|---|---|\n| Case-study images | 12 | WebP, width/height attributes, responsive candidates, lazy loading | Strong implementation | \n| Article-card images | 34 | WebP, 800×450 declared dimensions, lazy loading | Mostly responsive candidates; four have only an 800w candidate | \n| Reused Seppe portraits | 3 | WebP with responsive candidates | Two lazy-loaded; the review avatar uses normal browser loading | \n\nAll images have an `alt` attribute and declared width and height. **48 are lazy-loaded.** One review-avatar image has empty alt text; that can be appropriate because the surrounding review link already has an accessible label.\n\nRepresentative findings:\n\n| Image | Current alt text | Issue or recommendation | \n|---|---|---|\n| Verhuurwinkel case | “Players in transparent bubble suits running at each other during a game of bubble football” | Descriptive and relevant | \n| Straffe Sites case | “…against a light grey background” | Use “gray” for consistent US English | \n| Figur case | “…with grey curly hair…” | Use “gray” | \n| New Impact case | “Camera operator filming a effects technician…” | Correct to “an effects technician” | \n| CMS article illustration | “Abstract Straffe Sites illustration of AI agents connecting to a CMS through MCP” | Understandable; avoid adding keywords merely for SEO | \n\nFour article assets with only an 800w candidate were observed at encoded sizes of 7,288, 17,778, 7,446, and 18,088 bytes. Smaller variants might save bytes, but these are not evidence of a major performance problem.\n\n| Signal | Present? | Evidence | \n|---|---|---|\n| Clear target audience | Partial | The meta description names independent professionals and small businesses; the hero is broader. | \n| Answers the query completely | Mostly | Services, portfolio, process, content editing, maintenance, and contact are covered. Project-planning detail is limited. | \n| Original value added | Yes | Named projects, a direct-contact model, and linked measurement-oriented case studies. | \n| Passes the “Last Click” test | Partial | Enough to begin a conversation; less useful for comparing scope, handover, and ongoing responsibilities. | \n| Appropriate depth | Yes, with a composition caveat | **1,167 words** in the extracted main-content text, including FAQs, glossary cards, and article-card text. | \n| First-hand knowledge | Yes | Practical delivery descriptions and a substantial linked portfolio. | \n| Human-first presentation | Mostly | Direct language and clear CTAs; the long article rail serves several audiences at once. | \n\n**Word-count method:** Text nodes were joined with spaces; scripts, styles, navigation, and aside elements were excluded. The same method was used for the competitor comparisons. Counts describe content volume, not quality or words visible simultaneously on screen.\n\nNo page-level publication or update date was found in `<time>` elements or the JSON-LD. A homepage does not require an article-style date, but numerical claims should carry their own date.\n\nTwo commercial pages from the exploratory search were fetched and inspected. They are comparison references, not proof that Straffe Sites competes against them for every query.\n\n| Competitor | Page type | Measured main-content words | Relevant strengths | \n|---|---|---|---|\n| [Lucky Media](https://www.luckymedia.dev/astro-development-agency) | Detailed Astro agency service page | 4,327 | Named client quotations, migration examples, publishing autonomy, ownership, retainer support | \n| [Seibert](https://astro-en.seibert.group/) | Astro agency landing page | 1,584 | Development, migration, performance optimization, integrations, consulting, and maintenance explanations | \n| Straffe Sites `/en` | General commercial homepage | 1,167 | Broad portfolio, small-team model, direct contact, concise service overview | \n\n**Lucky Media H2 topics:** platform limitations; delivered Astro projects; customer pain points; reasons to choose the agency; promise; process; services; enterprise projects; ongoing support; features; FAQs.\n\n**Seibert H2 topics:** business impact of performance; publishing workflows; Astro performance; islands; performance demonstration; services; FAQs; UI kit; company scale; partnership; contact.\n\n| Topic/subtopic | This page | Competitor evidence | Action | \n|---|---|---|---|\n| Who the service is for | Explicit in metadata; broad in hero | Both identify more specific buyer scenarios | Make the opening audience clearer | \n| Content-editing autonomy | One brief FAQ answer | Both explain publishing workflows in more depth | Clarify available editing approaches | \n| Migration concerns | Not explained in the main service overview | Both describe migration work | Add a short answer or link if this is part of the intended offer | \n| Ownership and handover | Not clearly stated in the homepage copy | Lucky Media explicitly discusses ownership and lock-in | State only verified contractual terms | \n| Attributed customer testimony | Aggregate Google-review badge | Lucky Media displays named quotes and roles | Consider one approved, relevant quote | \n| Ongoing support | Present but brief | Both describe support more specifically | Explain responsibilities and next steps without publishing prices | \n\nDo not copy competitors’ absolute promises about rankings, “instant” loading, or guaranteed performance. More aggressive wording is not better evidence.\n\n| Check | Status | Details | \n|---|---|---|\n| HTTP response | Pass | Audited URL returned HTTP 200 | \n| Indexability | **Indexed** | URL Inspection: `PASS` , “Submitted and indexed” | \n| Robots.txt | Pass | HTTP 200; `User-agent: *` and`Allow: /` | \n| Indexing directives | Pass | Google reports `INDEXING_ALLOWED` ; no checked meta/header exclusion | \n| Canonical | Pass | User-declared and Google-selected canonical both equal `https://straffesites.com/en` | \n| Last Google crawl | Confirmed | September 5, 2026, 19:09:45 UTC; successful fetch; crawled as mobile | \n| Server-rendered content | Pass | Full main content available in fetched HTML, not an empty JavaScript shell | \n| Mobile readiness | Positive bounded evidence | No horizontal document overflow at 390px; viewport metadata present | \n| Desktop layout | Positive bounded evidence | No horizontal document overflow at 1440px | \n| H1 wrapping | Pass in tested layouts | Two measured line bands at both 1440px and 390px | \n| Primary CTA | Adequate measured size | Approximately 240×53px on desktop and 350×53px on mobile | \n| Intro text | Readable measured size | 20.8px desktop; 18px mobile | \n| FAQ container | Contained on mobile | Heading begins 20px from the left and remains inside the viewport | \n| Schema markup | Basic checks pass | Organization, WebSite, and FAQPage JSON-LD parse; all four FAQ answers match the page text | \n| Rich-result status | Unconfirmed | Inspection returned no rich-result assessment | \n| Google mobile-usability verdict | Unspecified | `VERDICT_UNSPECIFIED` ; this is not a mobile-usability pass | \n| Page-speed signals | Favorable proxies only | No external stylesheet links; one inline head style block; module scripts and asynchronous analytics | \n| Fonts | Positive | Local WOFF2 fonts, two font preloads, and `font-display: swap` declarations | \n| DOM size | Observed, not diagnosed | 968 elements in the inspected document | \n| HTTPS/mixed content | Pass in checked markup | HTTPS; no HTTP URLs found in inspected `src` /`href` attributes | \n| Core Web Vitals | Not measured for this URL | No fresh field-data or Lighthouse verdict established | \n\nBrowser geometry is not a substitute for visual review, assistive-technology testing, or real-user monitoring. No accessibility certification or full performance pass is claimed.\n\nThe page’s 98/100 case aggregate and the HTTP Archive framework percentages are not measurements of this homepage’s current Core Web Vitals.\n\n**Property:** `sc-domain:straffesites.com`\n\n**Exact page:** `https://straffesites.com/en`\n\n**Period:** June 13–September 10, 2026\n\n**Data state:** Final\n\nPage totals were taken from page-dimension data, not reconstructed from disclosed query rows.\n\n| Metric | Value | \n|---|---|\n| Clicks, 90 days | 7 | \n| Impressions, 90 days | 105 | \n| Average CTR | 6.67% | \n| Average position | 5.66 | \n| Trend | Too little data for a reliable growth or decline conclusion | \n\nAverage position is a historical GSC aggregate—not the page’s current fixed rank.\n\nAll five disclosed query rows for this page are shown below.\n\n| Query | Avg. position | Clicks | Impressions | CTR | Expected CTR | Gap | \n|---|---|---|---|---|---|---|\n| fast sites | 6.00 | 3 | 17 | 17.65% | 3–4%, **only if treated as transactional** | +13.65 to +14.65 percentage points; intent uncertain | \n| fast site | 8.00 | 0 | 2 | 0% | 1.5–3%, **only if treated as transactional** | −3 to −1.5 percentage points; sample too small | \n| sites f | 7.75 | 0 | 4 | 0% | N/A | Unclear intent; no suitable benchmark | \n| straffe | 6.13 | 0 | 8 | 0% | N/A | Could be brand-related or unrelated; insufficient evidence | \n| websites starting with s | 27.00 | 0 | 1 | 0% | N/A | Outside the supplied benchmark range; poor commercial fit | \n\nThe benchmark ranges are generic reference bands, not measured expectations for these exact searches. No SERP-feature discount was applied because no relevant feature was confirmed.\n\n**Query-data limitation:** Disclosed queries account for 3 of 7 clicks and 32 of 105 impressions: 42.86% and 30.48%, respectively. They are not the complete search-query picture.\n\nThere is no defensible basis for predicting additional clicks from a title change with this sample.\n\n| Period | Clicks | Impressions | CTR | Avg. position | \n|---|---|---|---|---|\n| June 13–July 12 | 2 | 26 | 7.69% | 4.50 | \n| July 13–August 11 | 1 | 45 | 2.22% | 6.04 | \n| August 12–September 10 | 4 | 34 | 11.76% | 6.03 | \n\nThe latest period has more clicks but fewer impressions than the preceding period. With single-digit clicks, describing this as sustained growth would overstate the evidence.\n\nNo algorithm-update attribution is justified.\n\nThe disclosed query `fast sites` appeared for:\n\n| Page | Clicks | Impressions | Avg. position | \n|---|---|---|---|\n| `/en` | 3 | 17 | 6.00 | \n| `/` | 0 | 15 | 3.47 | \n| `/blog/laadtijd-website` | 0 | 1 | 5.00 | \n\nThis is **query overlap, not proven harmful cannibalization**.\n\nThe Dutch homepage had the stronger average position, while the English homepage received the disclosed clicks. Language and geography could explain part of that difference.\n\nDo not consolidate the language homepages or change canonicals on this evidence. Maintain distinct language roles and monitor relevant query/page combinations over a longer period.\n\n**Correct small English-copy issues.** Change “a effects technician” to “an effects technician” and standardize “grey” to “gray” in the observed alt text.\n\n**Evaluate the article rail as a commercial UX choice.** It contains 34 cards. Consider whether a smaller curated selection would help buyers, while keeping the full blog directory available. This is a usability hypothesis, not a proven ranking fix.\n\n**Preserve the distinction between website builds and custom development.** The links to `/en/website-development` and `/en/web-development` serve different roles. Keep their labels differentiated rather than targeting every service page with the same phrase.\n\n**Run a dedicated performance check before changing loading behavior.** Current HTML and resource signals are favorable, but they do not establish LCP, INP, or CLS.\n\n**Reassess after at least 30 days following any future change.** Keep a dated baseline, compare matching periods, and focus on qualified commercial queries. Low traffic may require a longer observation window.\n\nNo follow-up workflow was executed.\n\n| Handoff | Purpose | \n|---|---|\n| Metadata optimization | Develop audience-specific title and description alternatives without assuming the current CTR is deficient | \n| Content writing | Refine the hero’s evidence wording and expand buyer FAQs using verified service details | \n| Keyword research | Validate relevant English commercial demand instead of treating “fast sites” as a reliable primary keyword | \n| Structured-data review | Check search-feature eligibility separately from JSON syntax; no missing-schema emergency was found | \n| Search Console follow-up | Reassess this exact URL after at least 30 days, with query/page overlap and low-volume limitations preserved | \n\n**Bottom line:** This is an indexed, technically sound commercial homepage with useful portfolio depth. The strongest next step is to make its evidence more precise and its buyer guidance more specific—not to add keywords indiscriminately, expand it into a tutorial, or chase an ambiguous query.\n\nIts scores and recommendations are the agent's assessment, not a Google rating or a promise of results. You can narrow the audit to three priorities without letting it edit the page:\n\nWhich three changes would you prioritize? Don't edit the page yet.\n\nI’d prioritize these three changes to [https://straffesites.com/en](https://straffesites.com/en), in this order, based on the recorded audit.\n\nThe line “98/100 median mobile PageSpeed score; the fastest loads in 0.9 seconds” needs context.\n\nAdd a short measurement note and an evidence link stating the period, number of case sites, and calculation method. Identify exactly what the 0.9 seconds measures. If it is lab LCP, call it that rather than total loading time.\n\nUntil those details are verified, use:\n\n   “Explore our case studies for monthly PageSpeed measurements and Search Console reporting.”\n\nWhy first: Performance is the page’s central selling point. Visitors should be able to check the evidence without guessing what the numbers mean. The audit confirmed the claims were present, not that the aggregate was independently reproduced.\n\nThe heading says “latest,” but the paragraph uses July 2026 figures. The audit confirmed those July figures and found August data in the linked source.\n\nSuggested heading:\n\n   “Astro leads this Core Web Vitals comparison”\n\nSuggested paragraph:\n\n   “In HTTP Archive’s August 2026 mobile comparison, 71% of measured Astro origins had good Core Web Vitals, compared with 48% for WordPress and 35% for Next.js.”\n\nKeep the source link and briefly explain that these are framework-level results across measured origins, not a guarantee for an individual website. Avoid “latest” unless the wording is maintained with every update.\n\nWhy second: This is a specific, verified freshness issue in a prominent evidence block. Correcting it is more defensible than changing copy based on speculative keyword gains.\n\nKeep “A rock-solid site that loads fast” as the H1. It already fits the tested desktop and mobile layouts. Clarify the audience in the opening sentence instead.\n\nSuggested introduction:\n\n   “We design and build fast websites and online stores for independent professionals and small businesses. Seppe is your main contact, supported by a senior team.”\n\nSuggested title:\n\n   “Fast websites for small businesses | Straffe Sites”\n\nPut the qualified measurement note from priority one beside or below this introduction.\n\nWhy third: Prospective clients should immediately recognize what you build and whether it is for them. The existing meta description already does this better than the hero. I would not target “fast sites” aggressively: the recorded search results were ambiguous, and the page’s GSC sample was too small to establish a CTR problem.\n\nThese are editorial priorities, not Google ratings or promises of better rankings. I’d leave the indexed URL, canonical, schema, and broader layout alone for now. No page edits or new audit were performed for this follow-up.\n\nUse the planner when you haven't chosen a subject. Ask it to check whether an existing page already answers the question before proposing another article. Then take the topic you prefer to the writing skill.\n\n/notfair-content-planner [https://straffesites.com](https://straffesites.com)\n\nSuggest three article topics using my Search Console data.\n\nI recommend three article refreshes rather than three new posts. Each topic already has a relevant page earning impressions; a new URL would split the same search intent.\n\nSearch Console connection verified: sc-domain:straffesites.com\n\nPeriod: June 13–September 10, 2026, inclusive, finalized Web Search data.\n\nRetrieved: September 13, 2026.\n\nI checked 3,944 query/page rows, 258 page rows, your repository’s keyword clusters, and the current live articles. The property recorded 150 clicks and 336,530 impressions during this period.\n\nRefresh the existing Dutch article:\n\n[https://straffesites.com/blog/wat-kost-een-website-laten-maken](https://straffesites.com/blog/wat-kost-een-website-laten-maken)\n\nWhy this topic: It has the largest observed opportunity of these three, with substantial visibility for specific cost questions.\n\nQuery-level evidence for this page:\n\n  “wat kost een website laten maken”\n\n  5,391 impressions · 0 clicks · 0% CTR · average position 14.77\n\n“website laten maken kosten”\n\n  8,859 impressions · 1 click · 0.011% CTR · average position 17.27\n\nWhole-page context: 125,547 impressions and 33 clicks.\n\nWriting angle: Turn the existing quote-comparison advice into a checklist readers can use alongside an actual proposal. Cover included work, revisions, content responsibilities, recurring costs, ownership, and exclusions. Keep the sourced market benchmarks already present.\n\nOwnership warning: “goedkope website laten maken” appeared on both the budget article (3,548 impressions) and this cost guide (49). Online-store cost queries also overlap: “wat kost een webshop laten maken” received 116 impressions on this general guide and 43 on the dedicated online-store cost article. Keep budget-saving advice and online-store pricing detail on their respective pages. These overlaps are cannibalization signals, not proof of ranking damage.\n\nTiming: This article received a substantive update on September 11, after the report ends. Review its performance no earlier than October 11 before making another SEO-driven rewrite.\n\nWriting prompt:\n\n  Refresh the existing Dutch website-cost guide for Belgium and the Netherlands. Develop its quote-comparison section into a practical checklist covering scope, revisions, content, hosting, maintenance, ownership, and exclusions. Preserve sourced market figures with their dates and context. Do not invent prices or publish Straffe Sites rates. Link to the existing budget and online-store cost guides instead of duplicating them.\n\nRefresh the existing US English article:\n\n[https://straffesites.com/en/blog/integrate-prettier-astro-tailwindcss](https://straffesites.com/en/blog/integrate-prettier-astro-tailwindcss)\n\nWhy this topic: Its main formatting queries already average positions around 6–7, closer to prominent results than the other two recommendations.\n\nQuery-level evidence for this page:\n\n  “astro prettier”\n\n  422 impressions · 1 click · 0.237% CTR · average position 6.88\n\n“prettier astro”\n\n  376 impressions · 0 clicks · 0% CTR · average position 6.11\n\n“prettier-plugin-astro”\n\n  218 impressions · 1 click · 0.459% CTR · average position 6.11\n\nWhole-page context: 4,295 impressions and 14 clicks.\n\nWriting angle: The article already explains installation, plugin order, and Tailwind stylesheet configuration. Add a short diagnostic path for formatting failures rather than another setup walkthrough: does formatting work from the command line, does the editor use the same configuration, and does class sorting work separately?\n\nOwnership: Keep formatting on this dedicated guide. The broader Astro starter guide received only 6 impressions for “astro prettier,” compared with 422 here. The historical keyword registry flags overlap, but the current report does not show substantial competition for this query.\n\nWriting prompt:\n\n  Refresh the existing Astro/Prettier guide in US English. Preserve the configuration and add troubleshooting that separates command-line formatting, editor integration, and Tailwind class sorting. Verify current official documentation and test examples before claiming they work. Keep general Astro/Svelte/Vercel setup in the existing starter guide and link to it.\n\nRefresh the existing US English article:\n\n[https://straffesites.com/en/blog/google-search-console](https://straffesites.com/en/blog/google-search-console)\n\nWhy this topic: Google already shows the guide for clear setup intent, but those impressions produce few clicks.\n\nQuery-level evidence for this page:\n\n  “how to set up google search console”\n\n  1,649 impressions · 0 clicks · 0% CTR · average position 14.60\n\n“google search console setup”\n\n  1,033 impressions · 1 click · 0.097% CTR · average position 14.28\n\nWhole-page context: 8,677 impressions and 5 clicks.\n\nWriting angle: Keep the existing three-step setup and practical reporting workflow. A useful next extension is concise verification troubleshooting: choosing the correct property, finding the authoritative DNS provider, placing the TXT record, and distinguishing verification delays from missing report data.\n\nOwnership and timing: The English guide is the clear owner for these setup queries. Preserve its Dutch counterpart rather than merge languages. The September 9 refresh already improved the reporting instructions and citations; review its results no earlier than October 9 before expanding it again.\n\nWriting prompt:\n\n  Review the September 9 update before refreshing this US English guide. Preserve the setup steps and page/query workflow. Add concise verification troubleshooting supported by current Google documentation. Separate setup time from DNS waiting time and sitemap discovery from indexing. Do not promise immediate data or ranking gains.\n\nEvidence limits\n\nThese are observed search opportunities, not traffic forecasts. GSC omits anonymized queries, and average position is not a fixed ranking. Low CTR alone does not establish a title problem.\n\nCountry/page and device/page reports were also retrieved, but their totals did not reconcile with page-only data, including after a device-report recheck. I have not used them to claim audience shares. The proposed troubleshooting sections are editorial extensions of demonstrated broader intent, not independently proven high-volume keywords.\n\nNo articles, publication dates, or shared calendars were created or changed.\n\nSearch Console describes searches where your site appeared. It is not a market-wide keyword-volume tool, and sparse data should not become a confident demand forecast. Refreshing an existing article can be a better choice than adding a competing page.\n\nBack in the writing conversation, this follow-up revises the Astro-versus-WordPress draft using the developer-focused outline above:\n\n/notfair-content-writer\n\nRevise the draft above. Keep the code examples, cut generic advice,\n\nand make the explanation easier to follow.\n\nSEO metadata\n\nTitle: Astro vs WordPress: what developers maintain after launch\n\nMeta description: Astro vs WordPress for developers maintaining small business sites. Compare updates, publishing, integrations, recovery, and the work each setup leaves you.\n\nProposed slug: /en/blog/astro-vs-wordpress\n\nPrimary keyword: Astro vs WordPress\n\nSecondary topics: Astro maintenance, WordPress maintenance, static-site deployment, headless WordPress.\n\nThe earlier article contained no implementation code examples. I kept the technical explanations and updated its JSON-LD rather than introducing untested code.\n\nA static Astro site can remove a WordPress application and database from the public request path. It cannot remove the developer responsible for publishing changes, fixing forms, and recovering from a bad release. For developers comparing Astro vs WordPress for small business websites, that ongoing work is a better starting point than a framework benchmark.\n\nChoose static-first Astro when the site mostly publishes content and you can support its editing and deployment workflow. Keep WordPress on the shortlist when its editor or existing plugins already handle the business's requirements. A working WordPress site does not need a migration just because you would prefer to maintain Astro.\n\nThis comparison assumes conventional WordPress with sensible caching, not an intentionally slow installation. On the Astro side, it starts with prebuilt pages. On-demand rendering and headless WordPress add responsibilities of their own.\n\nA conventional WordPress installation runs application code and stores content in a database. That does not mean every visitor triggers a fresh database query. WordPress's [caching documentation](https://developer.wordpress.org/advanced-administration/performance/cache/) describes serving cached static files; uncached requests and dynamic features still need the application.\n\nAstro [prerenders routes by default](https://docs.astro.build/en/guides/on-demand-rendering/). For those routes, the host serves the files produced by the build. You maintain the system that creates and delivers those files rather than a CMS application serving public pages.\n\n| Maintenance task | Static-first Astro | Conventional WordPress | \n|---|---|---|\n| Publish content | Edit files or use a connected CMS, then build and deploy | Publish through the editor; check cache behavior | \n| Update software | Framework, packages, build environment, and integrations | Core, themes, plugins, and the hosting runtime | \n| Recover content | Restore source content or CMS data; rebuild if needed | Restore revisions or appropriate database and file backups | \n| Recover a release | Restore a known-good deployment or rebuild a reverted version | Restore compatible application code and account for database changes | \n| Investigate missing inquiries | Trace the form endpoint, provider, and delivery | Trace the plugin or endpoint, provider, and delivery | \n\nFor a fully static frontend, removing WordPress also removes its core, theme, and plugin update cycle. Repository access, deployment accounts, hosting, and external services remain. A compromised deployment account can replace a static site just as effectively as a compromised application can alter a dynamic one.\n\nIf you add Astro's on-demand rendering, you also need an adapter and runtime. Include those in the maintenance plan. The relevant distinction is which code runs where, not whether the project has an Astro logo.\n\nSuppose the client asks you to update a service description and replace its photo. The task is finished when the public page shows the approved content, with the right image and working links.\n\nThe [block editor](https://wordpress.org/documentation/article/wordpress-block-editor/) provides the editing interface. Preview the change, publish it, and check the page as a logged-out visitor. An administrator's view may bypass caching or show content that an ordinary visitor cannot see.\n\nIf the old description remains visible, first confirm the right page was updated and published. Then inspect the page cache and CDN behavior. If only the image is stale, check the image URL and its caching separately. Purging every cache before identifying the stale response can hide the cause.\n\nWith file-based content, the change passes through the repository and build before it reaches production. A CMS adds an editing interface, but a statically built frontend still needs a successful publication path.\n\nStraffe Sites documents one file-based approach in [its article about a website without a CMS](https://straffesites.com/en/blog/website-without-cms): content lives as MDX and JSON in Git, with Astro Content Collections validating configured fields. That is an example of a technical team's workflow, not a requirement for every Astro project.\n\nWhen an update is missing, check the stages in order:\n\nA CMS saying \"published\" answers only the first part of this chain. Give editors a way to tell whether their change reached the website, and assign someone to investigate failures. Otherwise routine publishing problems become unexplained support tickets.\n\nThe following are hypothetical failure scenarios, not reports of tests performed for this article.\n\nAfter a plugin update, the contact page still loads, but submissions fail. Start by reproducing a submission with test data. Inspect the browser request and the relevant server or provider logs. Determine whether the failure occurs before the request, at the endpoint, or during onward delivery.\n\nBefore restoring an older plugin version, check whether the update changed stored data and whether the older code can read it. Restoring files alone may not reverse a database migration. Restoring an entire database backup may also discard newer inquiries, bookings, or orders.\n\nThis is why the recovery plan must identify both the code version and the state it expects. WordPress's [security guidance](https://developer.wordpress.org/advanced-administration/security/hardening/) covers updates and recovery preparation; the separate [WordPress maintenance guide](https://straffesites.com/en/blog/wordpress-maintenance) provides broader context. For this incident, the useful acceptance test is a submitted inquiry reaching its destination.\n\nAn Astro update can fail during dependency installation, validation, or the build. Check the first relevant error and compare the changed dependency versions and runtime requirements. Use the project's lockfile and documented build environment rather than trying unrelated package upgrades.\n\nA failed build is not necessarily an outage. A deployment system that retains the previous successful release until its replacement is ready can keep serving the old site. A script that deletes or overwrites live files before finishing the build cannot make the same promise. Verify the host's behavior instead of attributing that protection to Astro.\n\nA successful build can still publish the wrong content or a broken form. Check the deployed page and critical interactions after release. Restoring a previous deployment reverses that deployment's files; it does not automatically reverse changes in an external CMS, form service, or database.\n\nFor either stack, document what \"rollback\" restores and what it leaves untouched. Recovery should not begin with someone discovering where the backups are.\n\nAn HTML form on a static page still needs somewhere to send its data. A WordPress form plugin also depends on processing and delivery beyond the visible form. In both cases, trace the complete path:\n\nVisitor submission → receiving endpoint → stored record or delivery queue → staff notification or CRM.\n\nCheck each boundary. Did the endpoint accept the submission? Was a record stored? Did the notification arrive? An accepted API request and a delivered email are different events. The confirmation message should accurately describe what the system knows.\n\nKeep the failure check small and repeatable: submit identifiable test data without private customer details, verify the destination, and remove the test through the agreed operational process. Check invalid input and unavailable-provider behavior as well as the successful path. Never use real charges to test a checkout when the provider supplies a test mode.\n\nA booking link to an existing scheduling service is a small frontend feature. Replacing a WordPress plugin that manages availability, deposits, and cancellations is a different project. List those behaviors before estimating a migration.\n\n[WooCommerce](https://woocommerce.com/) is a commerce platform for WordPress. Astro can render a storefront connected to a commerce backend, but it does not supply order management by itself. The new setup still needs someone responsible for payment events, inventory changes, refunds, and failed notifications.\n\nRetain an established integration when it works unless the replacement solves a specific problem. Moving complexity into custom code or another provider does not make it disappear from your maintenance workload.\n\nWith headless WordPress, editors retain WordPress while Astro renders the public site. Astro's [WordPress integration guide](https://docs.astro.build/en/guides/cms/wordpress/) describes fetching content through the WordPress REST API. The broader [headless CMS explanation](https://straffesites.com/en/blog/what-is-a-headless-cms) covers the separation between editing and presentation.\n\nFor a statically built frontend, you now own the connection between two publication states: content published in WordPress and content deployed by Astro. Define how publication triggers a build, how a failed build is reported, and how an editor previews a draft without exposing it publicly.\n\nAudit the plugins before committing to this design. A plugin that modifies a WordPress template, inserts frontend scripts, or renders a form will not automatically reproduce that behavior in Astro because the content API is available. Rendering CMS HTML also requires a clear trust boundary; inserting a string as HTML is not a sanitization step.\n\nHeadless WordPress is justified when preserving the editorial workflow has value and a separate frontend meets a concrete requirement. If the conventional site already works, adding a second deployment system solely to change frameworks is hard to justify.\n\nConsider a hypothetical electrical contractor with eight service pages, a project gallery, a contact form, and an external scheduling service. The developer handles occasional content changes.\n\nStatic Astro fits that brief: prebuilt pages, a defined form endpoint, and a link to the existing scheduler. The maintenance agreement still needs a response time for urgent content corrections and a backup maintainer who can publish them.\n\nIf an office manager must publish projects independently every week, include an editor in the Astro proposal and compare the resulting setup with WordPress. If bookings and payments already depend on a working WordPress plugin, keeping WordPress may avoid a substantial integration rewrite.\n\nAstro's [islands architecture](https://docs.astro.build/en/concepts/islands/) lets you add interactive components without hydrating the entire page. That is useful control over browser work, but a booking embed, large image, or added script can still dominate performance.\n\nCompare representative pages with the same required content and integrations. Record lab conditions, check mobile behavior, and use available real-user data as a separate source. Do not compare an empty Astro demo with a full production WordPress page.\n\nGoogle states that [good Core Web Vitals do not guarantee top rankings](https://developers.google.com/search/docs/appearance/page-experience). A platform change needs its own operational justification. If you migrate, preserve useful URLs and verify redirects, metadata, internal links, and indexability rather than treating the rebuild as an automatic SEO improvement.\n\nBefore recommending a stack, put these answers in the handover document:\n\nChoose Astro when its publishing and delivery model removes work you would otherwise maintain. Choose WordPress when its editor and integrations already do that work well. Keep the existing site if a rebuild cannot explain what becomes simpler afterward.\n\nYes. Static delivery removes the application runtime from prebuilt page requests, but the framework, packages, build environment, and integrations still need maintenance. Prioritize updates according to the affected component and its exposure.\n\nThat depends on deployment behavior, not Astro alone. A system that keeps serving the previous successful release while a replacement builds can preserve availability. A deployment script that removes live files first may not. Verify your setup.\n\nNo. The host may handle infrastructure, backups, or some updates. The developer still needs to know what the agreement covers and who tests custom code, plugins, forms, and business workflows after changes.\n\nWhen retaining WordPress's editorial workflow and using a separate frontend solve concrete requirements. Account for both systems, including previews, API access, publication triggers, failed builds, and plugin behavior that must be recreated in the frontend.\n\nAccompanying publication notes\n\nStructured data\n\nThis replaces the previous draft's headline, description, and FAQ content. JSON parsing and exact FAQ-text matching were checked.\n\nPublication-specific fields remain deliberately absent: author, dates, canonical URL, and image must reflect the actual approved publication. Image concepts are not published assets. FAQPage describes the visible questions; it does not promise Google FAQ rich results, which Google's previously verified documentation says are no longer shown.\n\n```\n{\n  \"@context\": \"https://schema.org\",\n  \"@graph\": [\n    {\n      \"@type\": \"BlogPosting\",\n      \"headline\": \"Astro vs WordPress: what developers maintain after launch\",\n      \"description\": \"Astro vs WordPress for developers maintaining small business sites. Compare updates, publishing, integrations, recovery, and the work each setup leaves you.\",\n      \"inLanguage\": \"en-US\",\n      \"about\": [\n        { \"@type\": \"Thing\", \"name\": \"Astro\" },\n        { \"@type\": \"Thing\", \"name\": \"WordPress\" }\n      ]\n    },\n    {\n      \"@type\": \"FAQPage\",\n      \"inLanguage\": \"en-US\",\n      \"mainEntity\": [\n        {\n          \"@type\": \"Question\",\n          \"name\": \"Does a static Astro site still need dependency updates?\",\n          \"acceptedAnswer\": {\n            \"@type\": \"Answer\",\n            \"text\": \"Yes. Static delivery removes the application runtime from prebuilt page requests, but the framework, packages, build environment, and integrations still need maintenance. Prioritize updates according to the affected component and its exposure.\"\n          }\n        },\n        {\n          \"@type\": \"Question\",\n          \"name\": \"Can a failed Astro build take the live website down?\",\n          \"acceptedAnswer\": {\n            \"@type\": \"Answer\",\n            \"text\": \"That depends on deployment behavior, not Astro alone. A system that keeps serving the previous successful release while a replacement builds can preserve availability. A deployment script that removes live files first may not. Verify your setup.\"\n          }\n        },\n        {\n          \"@type\": \"Question\",\n          \"name\": \"Does managed WordPress hosting remove the developer's maintenance work?\",\n          \"acceptedAnswer\": {\n            \"@type\": \"Answer\",\n            \"text\": \"No. The host may handle infrastructure, backups, or some updates. The developer still needs to know what the agreement covers and who tests custom code, plugins, forms, and business workflows after changes.\"\n          }\n        },\n        {\n          \"@type\": \"Question\",\n          \"name\": \"When is headless WordPress worth maintaining?\",\n          \"acceptedAnswer\": {\n            \"@type\": \"Answer\",\n            \"text\": \"When retaining WordPress's editorial workflow and using a separate frontend solve concrete requirements. Account for both systems, including previews, API access, publication triggers, failed builds, and plugin behavior that must be recreated in the frontend.\"\n          }\n        }\n      ]\n    }\n  ]\n}\n```\n\nImage concepts\n\nConcepts only; no images generated or inserted.\n\nFeatured illustration, after the opening paragraph\n\nFilename: astro-wordpress-maintenance.webp\n\nAlt: “Static publishing and WordPress application maintenance shown as separate workflows with shared integrations.”\n\nConcept prompt: Wide 16:9 editorial 3D diagram with two equally weighted workflows, connected to shared form and hosting services. Warm beige #E9E6DF, charcoal modules, paper panels, lime connectors. Avoid winner symbols, invented metrics, logos, and fake dashboard screenshots.\n\nPublishing-flow diagram, under “Follow a content change through to production”\n\nFilename: website-content-publication-paths.webp\n\nAlt: “WordPress publication and Astro build-and-deploy paths, each ending with a public-page check.”\n\nConcept prompt: Two horizontal process lanes. WordPress: edit, publish, cache, public page. Astro: source change, build, deployment, public page. Mark each diagnostic checkpoint. Use beige, charcoal, and lime; add labels during design production. Avoid timing claims and implied test results.\n\nRecovery comparison, under “Separate failed updates from broken production”\n\nFilename: website-release-recovery-boundaries.webp\n\nAlt: “Code, deployed files, and external data shown as separate recovery boundaries.”\n\nConcept prompt: A clear 4:3 technical diagram separating application files, static deployment artifacts, and persistent data. Show rollback arrows limited to their actual boundary. Neutral beige background, charcoal outlines, lime highlights. Avoid suggesting that restoring code also restores external data.\n\nInquiry-delivery diagram, under “Trace forms and bookings beyond the frontend”\n\nFilename: website-form-delivery-checkpoints.webp\n\nAlt: “A form submission passing through an endpoint, storage or queue, and notification destination.”\n\nConcept prompt: Wide process diagram showing submission, endpoint acceptance, storage or queue, and notification or CRM as distinct checkpoints. Use simple labeled boxes, beige, charcoal, and lime. Avoid customer information, provider branding, and success badges presented as measured evidence.\n\nInternal linking\n\nThe revision retains contextual links to the existing no-CMS, WordPress maintenance, and headless CMS articles. Those pages remain the detailed references; this article owns the developer-maintenance comparison.\n\nSuggested incoming links remain editorial recommendations only:\n\n- From the no-CMS article: “maintaining Astro versus WordPress.”\n\n- From the WordPress maintenance article: “whether a platform migration reduces maintenance.”\n\n- From the Astro-versus-Next.js article: “Astro versus WordPress after launch.”\n\nBefore publication\n\nChange notes\n\nYou don't need to repeat the URL, audience, and full brief when they are already in the conversation. Point to the part you want changed and say what would make it more useful.\n\nRead the article, check its sources, and run the code examples where safe. This next message continues the same writing conversation and asks Hermes to review the revised draft, fix what it can, and report what it could not verify:\n\nCheck this draft's facts, links, and code examples. Fix the issues\n\nand tell me what you couldn't verify. Don't publish it.\n\nThe draft is broadly accurate. I corrected seven passages, checked the links against their actual destinations, and validated the JSON-LD. Nothing was published or changed on the website.\n\nChecked on September 13, 2026.\n\nReview results\n\nCorrections\n\n“Uncached requests … still need the application” was too broad. An uncached image or stylesheet can be served without running WordPress.\n\nCorrected passage:\n\n```\nA conventional WordPress installation runs application code and stores content in a database. That does not mean every visitor triggers a fresh database query. WordPress's caching documentation describes serving cached static files; requests that generate a page or process a submission through WordPress still need the application. Static assets such as images and stylesheets can be served directly by the host or CDN.\n```\n\nSource:\n\n[https://developer.wordpress.org/advanced-administration/performance/cache/](https://developer.wordpress.org/advanced-administration/performance/cache/)\n\nThe original wording could suggest that a static frontend eliminates WordPress maintenance even when WordPress remains the CMS. It also made an unnecessary comparison between different kinds of compromise.\n\n```\nRetiring the WordPress installation removes its core, theme, and plugin update cycle. Replacing only the frontend does not: headless WordPress still needs maintenance. Repository access, deployment accounts, hosting, and external services also remain. Someone with permission to publish a deployment can change the public site, even when its pages are static.\n```\n\nSources:\n\n[https://docs.astro.build/en/guides/cms/wordpress/](https://docs.astro.build/en/guides/cms/wordpress/)\n\n[https://developer.wordpress.org/advanced-administration/security/hardening/](https://developer.wordpress.org/advanced-administration/security/hardening/)\n\nFile-based content does not inherently require a repository.\n\n```\nIn a Git-based workflow, a file change passes through the repository and build before it reaches production. Git is a workflow choice, not an Astro requirement. A CMS adds an editing interface, but a statically built frontend still needs a successful publication path.\n```\n\nThe Straffe Sites example remains appropriate: its public no-CMS article describes MDX and JSON content in Git. That verifies the attributed example, not a requirement for every Astro site.\n\n[https://straffesites.com/en/blog/website-without-cms](https://straffesites.com/en/blog/website-without-cms)\n\nThe draft correctly separated plugin files from database state. It needed two precautions: preserve the current state before recovery, and check whether downgrading would restore a known vulnerability.\n\n```\nBefore restoring an older plugin version, preserve the current files and database. Check whether the update changed stored data, whether the older code can read it, and whether rolling back would reintroduce a known vulnerability. Test recovery on an isolated staging copy where possible. Restoring plugin files does not undo database changes. Restoring an older database can discard inquiries, bookings, or orders recorded after that backup.\n```\n\nThis is recovery guidance, not a claim that a particular plugin update or database migration was tested.\n\nThe general hardening guide was relevant, but the backup documentation supports the files-versus-database explanation more directly.\n\n```\nWordPress's backup documentation explains why a typical full-site restore needs both files and the database. Its security guidance covers keeping software current. The separate WordPress maintenance guide provides broader context.\n```\n\nNew direct source:\n\n[https://developer.wordpress.org/advanced-administration/security/backup/](https://developer.wordpress.org/advanced-administration/security/backup/)\n\n“Reverses that deployment’s files” was ambiguous. Serving an earlier build and rebuilding earlier source are different recovery operations.\n\n```\nRestoring a known-good static deployment puts its built files back into service. It does not automatically restore external CMS content, form-service data, database state, or separately managed hosting settings. Rebuilding an old commit is a different operation: external content, dependency resolution, or build settings may have changed since the original release.\n```\n\nThe existing warning about failed builds stays: retaining the previous live release is deployment-system behavior, not an Astro guarantee. I did not test a hosting provider’s rollback behavior.\n\nThe draft’s sanitization warning was correct but abstract. Astro documents the relevant behavior explicitly.\n\n```\nRendering CMS HTML also requires a clear trust boundary. Astro's set:html directive inserts HTML without automatically escaping it. Use it only for trusted HTML or content sanitized with an appropriate allowlist. Render untrusted plain text through Astro's normal escaped expressions instead.\n```\n\nSource, including its checked fragment:\n\n[https://docs.astro.build/en/reference/directives-reference/#sethtml](https://docs.astro.build/en/reference/directives-reference/#sethtml)\n\nNo sanitizer implementation is included or claimed to have been tested.\n\nFacts that can stay\n\nThe official sources support these central claims:\n\nAstro prerenders routes by default. On-demand rendering requires an adapter and a suitable runtime.\n\n[https://docs.astro.build/en/guides/on-demand-rendering/](https://docs.astro.build/en/guides/on-demand-rendering/)\n\nAstro islands allow selected components to become interactive without hydrating the whole page. That does not guarantee a fast site once images, embeds, and scripts are included.\n\n[https://docs.astro.build/en/concepts/islands/](https://docs.astro.build/en/concepts/islands/)\n\nAstro can fetch WordPress content through the REST API. Making content available through an API does not automatically reproduce a plugin’s frontend behavior.\n\n[https://docs.astro.build/en/guides/cms/wordpress/](https://docs.astro.build/en/guides/cms/wordpress/)\n\nWordPress provides a block editor, and WooCommerce provides commerce functionality for WordPress. Astro itself is not an order-management backend.\n\n[https://wordpress.org/documentation/article/wordpress-block-editor/](https://wordpress.org/documentation/article/wordpress-block-editor/)\n\n[https://woocommerce.com/](https://woocommerce.com/)\n\nGood Core Web Vitals do not guarantee top Google rankings. The draft correctly avoids presenting a framework migration as an automatic SEO improvement.\n\n[https://developers.google.com/search/docs/appearance/page-experience](https://developers.google.com/search/docs/appearance/page-experience)\n\nThe remaining internal article links also worked. I checked their relevance to the passages that cite them; I did not audit every claim on those linked pages.\n\nJSON-LD and publication notes\n\nNo JSON syntax correction was needed. The existing BlogPosting and FAQPage graph can remain as draft data.\n\nThe distinction that matters:\n\n```\nThis JSON-LD has passed syntax and FAQ-content checks. It has not been validated inside a rendered page or submitted to Google’s Rich Results Test or Schema.org’s validator. Add the approved author, publication dates, canonical details, and real image assets before publication; do not invent values to complete the draft.\n```\n\nThe FAQ rich-result statement is also supported by current Google documentation. It should now include the direct citation rather than refer vaguely to “previously verified documentation.”\n\nCorrected note:\n\n```\nFAQPage remains a Schema.org type, but Google states that FAQ rich results are no longer shown in Search. Keeping this graph is optional for describing the visible FAQ; it is not a recommendation for gaining a Google rich result.\n```\n\nSources:\n\n[https://schema.org/FAQPage](https://schema.org/FAQPage)\n\n[https://developers.google.com/search/updates#removing-faq-rich-result](https://developers.google.com/search/updates#removing-faq-rich-result)\n\nThe Google changelog fragment exists and was checked.\n\nWhat I could not verify\n\nThe hypothetical scenarios remain labeled as hypothetical. The corrected draft preserves the original argument without presenting documentation checks as hands-on testing.\n\nIf Hermes can access your website repository, start it from that directory and ask it to save the approved draft using the project's existing format. A website URL alone does not give it filesystem or CMS access. My site uses [MDX and JSON in Git with Astro](https://straffesites.com/en/blog/website-without-cms); other sites can use their CMS's draft mode.\n\nKeep the publication decision yourself. Record the live URL, publication date, and any pre-change measurements. After at least 30 days, ask Hermes to compare the article's Search Console performance over comparable periods. For a new URL, track its first results rather than inventing a prepublication baseline. That's the monthly review pattern behind my [SEO automation workflow](https://straffesites.com/en/blog/automating-seo-with-ai), not a promise that every article will improve rankings.\n\nStart with one useful task. The skills contain the detailed procedures; your chat messages can stay short.\n\nFor more on choosing a topic, drafting, and reviewing your work, see my [AI writing workflow on Straffe Sites](https://straffesites.com/en/blog/optimize-your-blog-with-chatgpt). The installation commands follow the linked official documentation. The installation and setup prompts are examples for your own environment, not transcripts of freshly completed installations or guaranteed results. The Agent Session blocks from “Turn the setup into an article” onward are recorded Hermes exchanges.", "url": "https://wpnews.pro/news/hermes-agent-for-seo-from-search-console-to-a-blog-post", "canonical_source": "https://dev.to/seppegadeyne/hermes-agent-for-seo-from-search-console-to-a-blog-post-1ap0", "published_at": "2026-09-14 07:28:10+00:00", "updated_at": "2026-09-14 08:02:10.257099+00:00", "lang": "en", "topics": ["ai-agents", "ai-tools", "developer-tools"], "entities": ["Hermes Agent", "Nous Research", "Google Search Console", "Google Cloud", "NotFair", "Straffe Sites", "Git", "WSL2"], "alternates": {"html": "https://wpnews.pro/news/hermes-agent-for-seo-from-search-console-to-a-blog-post", "markdown": "https://wpnews.pro/news/hermes-agent-for-seo-from-search-console-to-a-blog-post.md", "text": "https://wpnews.pro/news/hermes-agent-for-seo-from-search-console-to-a-blog-post.txt", "jsonld": "https://wpnews.pro/news/hermes-agent-for-seo-from-search-console-to-a-blog-post.jsonld"}}