[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"docs-\u002Fdocs\u002Fpage-optimizer":3},{"id":4,"title":5,"body":6,"description":611,"extension":612,"meta":613,"navigation":614,"order":615,"path":616,"seo":617,"stem":618,"summary":619,"__hash__":620},"docs\u002Fdocs\u002Fpage-optimizer.md","Page Optimizer",{"type":7,"value":8,"toc":598},"minimark",[9,13,17,20,25,60,64,199,205,209,216,223,227,230,414,418,421,428,431,435,442,455,458,461,465,468,507,511,518,525,529,580],[10,11,5],"h1",{"id":12},"page-optimizer",[14,15,16],"p",{},"42flows reads the pages you already have and improves them in place. Title, meta description, Open Graph, JSON-LD schema, internal links, alt text. We don't rewrite the page or replace it. We make targeted, reviewable edits to the page that's already ranking and earn the next few positions.",[14,18,19],{},"Existing pages already have authority, impressions, and rankings. New articles take 2 to 8 weeks to mature, often longer. One existing page going from position #9 to #3 outweighs 10 new articles published over a quarter. The compounding is structural, not incremental.",[21,22,24],"h2",{"id":23},"how-it-works","How it works",[26,27,28,36,42,48,54],"ol",{},[29,30,31,35],"li",{},[32,33,34],"strong",{},"You connect your site."," WordPress, Nuxt Content (Markdown via GitHub), Shopify. One-click for WordPress (Application Password), GitHub App for Nuxt Content.",[29,37,38,41],{},[32,39,40],{},"42flows reads the page."," A small companion plugin (WordPress) or the GitHub adapter (Nuxt) returns a typed view of the page: meta, body widgets or blocks, attached images, existing schemas.",[29,43,44,47],{},[32,45,46],{},"42flows proposes edits."," A reasoning model produces a list of typed edit operations (not raw HTML), each grounded in evidence from Google Search Console, the SEO audit, top-3 SERP competitors, and your business profile. Every edit has a written rationale.",[29,49,50,53],{},[32,51,52],{},"You review and apply."," The operator (you, or a 42flows oversight pro) reviews each edit, accepts or rejects it, and applies the accepted ones. One-click rollback if anything looks wrong.",[29,55,56,59],{},[32,57,58],{},"42flows verifies."," After every apply, 42flows fetches the live page and asserts that the new title, description, OG tags, and schemas are actually present in the rendered HTML. If a CDN or page-cache plugin held onto the old version, the system surfaces that as a verify failure for follow-up.",[21,61,63],{"id":62},"supported-platforms","Supported platforms",[65,66,67,83],"table",{},[68,69,70],"thead",{},[71,72,73,77,80],"tr",{},[74,75,76],"th",{},"Platform",[74,78,79],{},"Page class",[74,81,82],{},"Status",[84,85,86,101,113,125,138,151,163,175,187],"tbody",{},[71,87,88,92,98],{},[89,90,91],"td",{},"WordPress (classic editor)",[89,93,94],{},[95,96,97],"code",{},"wp_classic",[89,99,100],{},"Supported",[71,102,103,106,111],{},[89,104,105],{},"WordPress (Gutenberg block editor)",[89,107,108],{},[95,109,110],{},"wp_gutenberg",[89,112,100],{},[71,114,115,118,123],{},[89,116,117],{},"WordPress (Elementor)",[89,119,120],{},[95,121,122],{},"wp_elementor",[89,124,100],{},[71,126,127,130,135],{},[89,128,129],{},"Nuxt Content (Markdown via GitHub)",[89,131,132],{},[95,133,134],{},"nuxt_content",[89,136,137],{},"Coming soon (Tier 1 meta layer in build)",[71,139,140,143,148],{},[89,141,142],{},"Shopify blog posts",[89,144,145],{},[95,146,147],{},"shopify_blog",[89,149,150],{},"Coming soon",[71,152,153,156,161],{},[89,154,155],{},"Static HTML \u002F webhook",[89,157,158],{},[95,159,160],{},"static_html",[89,162,150],{},[71,164,165,168,173],{},[89,166,167],{},"WordPress (Divi)",[89,169,170],{},[95,171,172],{},"wp_divi",[89,174,150],{},[71,176,177,180,185],{},[89,178,179],{},"WordPress (WPBakery)",[89,181,182],{},[95,183,184],{},"wp_wpbakery",[89,186,150],{},[71,188,189,192,197],{},[89,190,191],{},"WordPress (Beaver Builder)",[89,193,194],{},[95,195,196],{},"wp_beaver",[89,198,150],{},[200,201,202],"blockquote",{},[14,203,204],{},"Today, Page Optimizer v2 runs end-to-end on WordPress sites only. Support for Nuxt Content, Shopify, static HTML, and the remaining WordPress page builders is on the roadmap.",[21,206,208],{"id":207},"pages-and-posts","Pages and posts",[14,210,211,212,215],{},"Page Optimizer v2 works on WordPress pages ",[32,213,214],{},"and"," WordPress blog posts in the same surface. The dashboard shows both, with a tab filter for All \u002F Pages \u002F Posts. The same edit operations apply to either type.",[14,217,218,219,222],{},"Blog posts often benefit more from optimization than pages. They sit deeper in the site, attract more long-tail queries, and are typically where the SEO plugin's auto-emitted ",[95,220,221],{},"Article"," schema lives. Optimizing a blog post that's already ranking position 9 to position 3 is the highest-leverage work in most catalogs.",[21,224,226],{"id":225},"supported-edits","Supported edits",[14,228,229],{},"Every edit is a typed operation against a specific element on the page. The model can't propose anything outside this list, and the operations are validated against your page's actual structure (widget IDs, block IDs, image URLs) before you ever see them, so there's no risk of editing something that doesn't exist.",[65,231,232,245],{},[68,233,234],{},[71,235,236,239,242],{},[74,237,238],{},"Edit",[74,240,241],{},"What it does",[74,243,244],{},"Where it works",[84,246,247,264,276,288,300,312,324,340,353,366,378,391],{},[71,248,249,254,261],{},[89,250,251],{},[95,252,253],{},"meta.update_title",[89,255,256,257,260],{},"SEO title in the ",[95,258,259],{},"\u003Ctitle>"," tag",[89,262,263],{},"All page classes",[71,265,266,271,274],{},[89,267,268],{},[95,269,270],{},"meta.update_description",[89,272,273],{},"Meta description",[89,275,263],{},[71,277,278,283,286],{},[89,279,280],{},[95,281,282],{},"meta.update_og",[89,284,285],{},"Facebook \u002F LinkedIn share preview (title, description, image, type)",[89,287,263],{},[71,289,290,295,298],{},[89,291,292],{},[95,293,294],{},"meta.update_twitter",[89,296,297],{},"Twitter \u002F X share card",[89,299,263],{},[71,301,302,307,310],{},[89,303,304],{},[95,305,306],{},"meta.set_canonical",[89,308,309],{},"Canonical URL",[89,311,263],{},[71,313,314,319,322],{},[89,315,316],{},[95,317,318],{},"meta.update_robots",[89,320,321],{},"Index \u002F follow rules",[89,323,263],{},[71,325,326,335,338],{},[89,327,328,331,332],{},[95,329,330],{},"meta.add_schema"," \u002F ",[95,333,334],{},"meta.replace_schema",[89,336,337],{},"LocalBusiness, FAQPage, Article, Organization, etc.",[89,339,263],{},[71,341,342,347,350],{},[89,343,344],{},[95,345,346],{},"img.update_alt",[89,348,349],{},"Image alt text",[89,351,352],{},"All page classes that surface images",[71,354,355,360,363],{},[89,356,357],{},[95,358,359],{},"el.update_widget_setting",[89,361,362],{},"Edit text in an Elementor widget",[89,364,365],{},"Elementor only",[71,367,368,373,376],{},[89,369,370],{},[95,371,372],{},"el.add_inline_link_in_text",[89,374,375],{},"Add an internal link inside Elementor text",[89,377,365],{},[71,379,380,385,388],{},[89,381,382],{},[95,383,384],{},"gb.update_inner_text",[89,386,387],{},"Edit text in a Gutenberg block",[89,389,390],{},"Gutenberg only",[71,392,393,408,411],{},[89,394,395,398,399,398,402,398,405],{},[95,396,397],{},"md.update_frontmatter",", ",[95,400,401],{},"md.replace_section",[95,403,404],{},"md.add_section_after",[95,406,407],{},"md.add_inline_link",[89,409,410],{},"Edit Markdown frontmatter and sections",[89,412,413],{},"Nuxt Content \u002F Markdown only",[21,415,417],{"id":416},"schema-awareness-end-to-end","Schema awareness, end to end",[14,419,420],{},"Most WordPress sites have an SEO plugin (Yoast, Rank Math, AIOSEO) that auto-emits structured data on every page render. Organization on every page, FAQPage where there's a FAQ block, Article on every blog post, BreadcrumbList everywhere. These schemas don't live in postmeta — the SEO plugin generates them at render time.",[14,422,423,424,427],{},"Page Optimizer v2 sees them. Before proposing edits, the orchestrator fetches the live URL and parses every ",[95,425,426],{},"\u003Cscript type=\"application\u002Fld+json\">"," block actually on the page. The reasoning model receives a unified view: schemas your SEO plugin emits, schemas 42flows wrote, and schemas present in both places. It will not propose a duplicate Organization or Article when the SEO plugin is already emitting one.",[14,429,430],{},"This is also why the post-apply verifier is meaningful. The same fetch-and-parse primitive checks whether the title, description, OG, and schemas you applied are actually in the rendered HTML. If a CDN held an old copy or a SEO plugin's filter overrode our write, the verify step catches it immediately.",[21,432,434],{"id":433},"how-we-own-the-meta-layer","How we own the meta layer",[14,436,437,438,441],{},"When you optimize a page, we write the new title, description, OG tags, and schemas to two places: the SEO plugin you already use (Yoast, Rank Math, AIOSEO) for compatibility, AND a 42flows-owned set of postmeta keys that the 42flows-content plugin emits directly on the page's ",[95,439,440],{},"\u003Chead>",".",[14,443,444,445,398,447,450,451,454],{},"That second part is the foundation. We don't depend on Yoast (or any SEO plugin, or any page-cache plugin, or any CDN) to render our writes correctly. The 42flows-content plugin owns ",[95,446,259],{},[95,448,449],{},"\u003Cmeta description>",", OG, Twitter, canonical, and JSON-LD schemas on ",[95,452,453],{},"wp_head"," priority 0. If you switch SEO plugins later, 42flows's edits keep working. If you don't have an SEO plugin at all, 42flows's edits still work.",[14,456,457],{},"After every apply, 42flows tells your active page-cache plugin (LiteSpeed Cache, WP Rocket, W3 Total Cache, WP Super Cache, NitroPack, Autoptimize) to drop the cached version of the page. If your site is behind Cloudflare, 42flows also purges the URL at the edge, provided you've added a Cloudflare API token scoped to \"Zone — Cache Purge\" via the dashboard.",[14,459,460],{},"Then 42flows fetches the page like a search engine would and asserts that the new title, description, OG tags, and schemas are actually in the rendered HTML. Verified shipments only.",[21,462,464],{"id":463},"what-we-dont-yet-support","What we don't yet support",[14,466,467],{},"We're explicit about this so there are no surprises.",[469,470,471,477,483,489,495,501],"ul",{},[29,472,473,476],{},[32,474,475],{},"Layout changes on Elementor pages."," We can edit text in existing widgets and add inline links. We can't yet replace a hero slider with a text block, restructure sections, or rearrange columns. That requires Elementor CSS regeneration orchestration, which is on the roadmap (Phase 1.5).",[29,478,479,482],{},[32,480,481],{},"Generating or swapping images."," We can update alt text on existing images. We don't yet generate new featured images or hero photography for pages we optimize. The brand-fingerprint visual layer is Phase 2.",[29,484,485,488],{},[32,486,487],{},"Beaver Builder, Divi, WPBakery body edits."," We can edit the meta layer on these pages today. Body-level edits require dedicated adapters that we're shipping in Phase 2 as customers need them.",[29,490,491,494],{},[32,492,493],{},"Bulk optimization."," \"Optimize all 30 pages on this site\" isn't a primitive yet. v1 is one page at a time. Bulk is a wrapper we'll add once the per-page workflow has compounded enough data to justify the automation.",[29,496,497,500],{},[32,498,499],{},"Auto-apply without operator review."," v1 always shows the proposed edits to an operator (you, or an SEO pro on the 42flows oversight team) before anything is written. We'll consider auto-apply for the meta layer once we have a measurable track record across customers.",[29,502,503,506],{},[32,504,505],{},"Customer-facing review UI."," Today's review flow is operator-only. A customer-facing review page is on the roadmap.",[21,508,510],{"id":509},"privacy-and-data-handling","Privacy and data handling",[14,512,513,514,517],{},"Snapshots taken before each edit are stored on ",[32,515,516],{},"your"," WordPress site (in postmeta), not on 42flows servers. They expire automatically after 30 days via a daily cron event the plugin schedules.",[14,519,520,521,524],{},"The ",[95,522,523],{},"_42flows_*"," postmeta keys 42flows writes are namespaced and removable on plugin uninstall. Cloudflare API tokens are stored alongside the rest of your site credentials with the same encryption posture.",[21,526,528],{"id":527},"for-developers","For developers",[469,530,531,545,562,569],{},[29,532,533,534,541,542,441],{},"The 42flows-content companion plugin is open source and listed on ",[535,536,540],"a",{"href":537,"rel":538},"https:\u002F\u002Fwordpress.org\u002Fplugins\u002F42flows-content",[539],"nofollow","wordpress.org",". The full source is also in the 42flows main repo under ",[95,543,544],{},"wordpress-plugin\u002F42flows-content\u002F",[29,546,547,548,398,551,398,554,557,558,561],{},"REST endpoints exposed by the plugin: ",[95,549,550],{},"GET \u002Fwp-json\u002F42flows\u002Fv1\u002Fpage\u002F{id}\u002Fedit-tree",[95,552,553],{},"POST \u002Fapply-ops",[95,555,556],{},"POST \u002Frollback",". All require an Application Password with ",[95,559,560],{},"edit_posts"," capability.",[29,563,564,565,568],{},"Edit operations are typed in TypeScript at ",[95,566,567],{},"server\u002Fservices\u002Fpage-optimizer-v2\u002Forchestrator.ts",". Validation runs against the page's actual structure before the model's output ever reaches the WP plugin.",[29,570,571,572,575,576,579],{},"Post-apply HTTP verification uses cheerio against the live URL with ",[95,573,574],{},"Cache-Control: no-cache",". Mismatches surface as ",[95,577,578],{},"page_optimizer.v2.unverified"," activity events and are non-blocking — the writes still land; the verify result is a signal for the oversight layer.",[14,581,582,583,586,587,590,591,590,594,597],{},"If you're integrating a new platform: add an adapter at ",[95,584,585],{},"server\u002Fservices\u002Fadapters\u002F\u003Cplatform>.ts"," exporting ",[95,588,589],{},"getPageEditTree"," + ",[95,592,593],{},"applyOps",[95,595,596],{},"rollbackSnapshot",". The orchestrator and skill are platform-agnostic.",{"title":599,"searchDepth":600,"depth":600,"links":601},"",2,[602,603,604,605,606,607,608,609,610],{"id":23,"depth":600,"text":24},{"id":62,"depth":600,"text":63},{"id":207,"depth":600,"text":208},{"id":225,"depth":600,"text":226},{"id":416,"depth":600,"text":417},{"id":433,"depth":600,"text":434},{"id":463,"depth":600,"text":464},{"id":509,"depth":600,"text":510},{"id":527,"depth":600,"text":528},"42flows reads the pages you already have and improves them in place — title, description, schema, internal links, alt text — instead of always publishing new ones. Existing pages already have authority and impressions; making them correct outperforms publishing new ones.","md",{},true,10,"\u002Fdocs\u002Fpage-optimizer",{"title":5,"description":611},"docs\u002Fpage-optimizer","In-place edits to your existing pages, with operator review, one-click rollback, and post-edit verification on the live URL.","53DZIojHJ6dxYcP-axVIBReYiq8iGmt04ww3p194ILY"]