Fill in before sending
[site address][business name][phone][address][service area][most important service page][Search Console property]
My WordPress site [site address] is built with Elementor. I want my key pages to work perfectly on phones and to be readable for search engines and AI assistants. Pages: [up to 10 key page addresses; if empty, the home page, the service pages and contact]. Business details: [business name], [phone], [address], [service area]; do not invent anything you do not know.
1. Read the setup. Get the theme and versions with wordpress_site_info, and with wordpress_list_plugins find the SEO plugin (Yoast, Rank Math and so on), the cache plugin, Elementor and whether WPCode is installed. List the published pages and their ids with wordpress_list_posts.
2. Measure, change nothing:
1. For every page, mobile performance, LCP and CLS with core_web_vitals.
2. For the home page and [most important service page], accessibility and SEO failures with seo_audit, especially tap target, contrast, viewport and heading order failures. This uses credits; tell me how many calls there will be.
3. For every page, site_read_url with outline=true: the h1 count and the heading tree from h1 to h6. With text=true on the same tool: the text, phone and address that show without JavaScript.
4. For every page, the meta title, description, canonical and noindex with wordpress_seo.
5. Read robots.txt and llms.txt with site_read_url; read the `blog_public` option with wordpress_option and write=false (0 means the site is hidden from search engines).
6. Mobile overflow cannot be measured pixel by pixel with these tools. Use the viewport and tap target findings from seo_audit and give me a short list of pages to check on a phone at 360 pixels wide.
Show the findings in one table per page.
3. Mobile overflow and tap targets. On a problem page, get the element list with wordpress_page_design, open the suspect element with the element parameter and find a fixed width, a large font size, a negative margin or columns that stay side by side. Make the fix with wordpress_edit_page_design on the mobile setting only: do not guess key names, use the `_mobile` counterpart of the key you see in the element's settings (for example typography_font_size_mobile). Change one element at a time on each page; if something breaks, roll it back with restore=true.
4. Heading hierarchy. Every page has exactly one h1 and no skipped heading levels. On an Elementor heading element, change the level through the `header_size` field with wordpress_edit_page_design. If the heading comes from a theme template file, use wordpress_theme_file with action="list" and "get" first, preview with mode="replace" and confirm=false, and apply with confirm=true after my approval.
5. Meta and schema. Write missing or duplicated titles and descriptions with wordpress_set_seo: titles of 50 to 60 characters, descriptions of 140 to 160, unique on every page. Read the JSON-LD in the page's raw HTML with site_read_url; if the business type in the SEO plugin's graph is wrong or missing, try to solve it in the plugin's settings first. For a LocalBusiness subtype the plugin cannot output, or an FAQPage for questions that are really shown on the page, prepare a small PHP snippet hooked to `wp_head` with wordpress_snippet; snippets are created inactive, so show me the code and turn it on with toggle after my approval. Never invent hours, coordinates, ratings, prices or reviews.
6. Speed. Read the current settings and the switches marked risky with wordpress_performance. With wordpress_set_performance, propose only the safe ones: page_cache, browser_cache, minify_css, minify_js, lazy_load. Do not turn on combine, defer or css_async on an Elementor site; if they are needed, do it one at a time, with confirm_risky, looking at the page after each one. For the main image on the first screen, get its real sizes and srcset from wordpress_media with media_id, and check that it is not lazy and is served at the right size. Call wordpress_purge_cache after every change.
7. AI crawlers and robots.txt. robots.txt must not block GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, Claude-User, Claude-SearchBot, PerplexityBot, Perplexity-User, Google-Extended, Applebot-Extended, Bingbot or CCBot, and it must point to the sitemap. If there is no physical robots.txt file, WordPress generates it; propose the missing rules as a PHP snippet added to the `robots_txt` filter with wordpress_snippet. If there is a physical file, or the SEO plugin manages robots.txt, tell me to make the change there. If a security or CDN plugin blocks these crawlers, report it, and say clearly that you cannot verify this with the tools.
8. llms.txt. If there is none, prepare an llms.txt text with an accurate two or three sentence summary of the site, the list of key pages and the contact details, and show it to me. After my approval, install a PHP snippet with wordpress_snippet that answers `/llms.txt` as `text/plain; charset=utf-8`, call wordpress_purge_cache and confirm with site_read_url that it returns 200.
9. Menu. With wordpress_menus, check that the main menu and footer menu link to every key page. If a link is missing, show your proposal for wordpress_edit_menu.
10. Measure again. Repeat the measurements from step 2 on the same pages, using runs=2 for seo_audit. If my Search Console property is [Search Console property], check the changed pages with gsc_inspect_urls.
Rules: before every write, show the field that will change, its current value and its new value, and wait for my approval. In Elementor, change one element at a time. Output: a before and after table per page (mobile performance, LCP, CLS, h1 count, heading order, meta title and description length, schema types), the state of robots.txt and llms.txt, the list of changes made and the pages I need to check by hand.