Generative engine optimization (GEO) is the practice of making your pages easy for AI assistants to find, understand and quote in generated answers. Answer engine optimization (AEO) is the same work aimed at direct answers, such as Google's AI Overviews. On WordPress, both come down to four things: pages crawlers can reach, structured data (schema) that matches the visible text, a robots.txt that admits the AI crawlers you want, and a way to measure results. Core WordPress plus one well-configured SEO plugin covers most of the first three. A dedicated "GEO plugin" is optional. For how the terms differ, see AEO vs GEO vs SEO.

What does WordPress do for AI search out of the box?

WordPress core handles crawl basics and nothing specific to AI. As of November 2026, a stock install gives you the following.

  • WordPress generates a virtual robots.txt when the site root has no physical file. Its default output is one group for all crawlers that disallows the admin area and allows admin-ajax.php. It has no rules for AI crawlers.
  • Since WordPress 5.5, core serves an XML sitemap index at /wp-sitemap.xml and references it from robots.txt. Sitemaps switch off when the "discourage search engines" setting is on.
  • Since WordPress 5.3, that setting no longer writes Disallow: / into robots.txt. A robots meta tag does that job instead, and the wp_robots filter (WordPress 5.7) lets code add directives to that tag.
  • Core has no schema settings. Site owners add markup through a theme, a plugin or template edits, as Kinsta's schema guide describes.
  • WordPress 7.0 (May 20, 2026) added an AI Client, a Connectors screen for external AI providers and the Abilities API, which registers site actions that AI tools can call. The release post does not mention SEO, structured data, robots.txt or sitemaps. The separate AI plugin adds opt-in authoring tools: title, excerpt, meta description and alt text suggestions, plus image generation. Its listing does not mention llms.txt or schema.

So the AI features in core help you write and automate. They do not mark up your pages or decide which crawlers get in. That work falls to your SEO plugin, your robots.txt and your content.

Does schema markup help AI search?

Schema is a hygiene step with low cost, not a proven lever. Google states that no special schema.org markup is needed for AI Overviews or AI Mode. A page only has to be indexed and eligible to show with a snippet, and Google says you do not need new machine readable files or AI text files. It does ask that structured data match the visible text, and it recommends JSON-LD. Its quality guidelines say not to mark up content readers cannot see.

Some schema has also lost its payoff. Google's documentation updates say the FAQ rich result no longer appears in Google Search starting May 7, 2026, and the FAQ structured data documentation has since been removed. Many "best schema plugin" roundups still sell FAQ markup as a way to win rich snippets. FAQ markup remains valid schema.org, but do not expect a rich result from it.

The crawler documentation from OpenAI, Anthropic and Perplexity, covered below, is about access rather than markup. The closest research is the GEO paper by Aggarwal and colleagues (2023), which reported visibility gains of up to 40% on its benchmark and found that results varied by domain.

What schema reliably does is state facts in a form software can read: who publishes the page, who wrote it, when it changed, what a product is called and what it costs. Those facts need to be right, consistent across pages and the same as the visible text.

Which WordPress plugin should handle schema and AI search?

Plugin features sold as "AI SEO" fall into three groups. Authoring help writes titles, meta descriptions and alt text. Access and discovery features cover schema, llms.txt and robots.txt. Tracking features report whether AI assistants mention you. This table covers the second and third groups for the current versions: Yoast SEO 28.8 (October 27, 2026), Rank Math 1.0.280 (October 6, 2026), AIOSEO 5.0.4 (October 21, 2026) and the bot.optimizer plugin 3.7.9.

PluginStructured datallms.txtRobots.txt and AI crawlersAI answer trackingWhere it falls short
Yoast SEOSchema graph with 21 documented pieces. Basics free, more types in Premium. Opt-in schema aggregation.Listed in the free plugin. Regenerated weekly. Not on multisite.File editor. Premium bot blocker for GPTBot, CCBot and Google-Extended.AI Brand Insights in the AI+ plan: ChatGPT, Perplexity, Gemini, Claude.llms.txt lists five recent items unless you pick pages. Tracking is a separate paid plan with five questions.
Rank MathCommon types in the free plugin, FAQ and HowTo through blocks. Custom builder, templates and display conditions in PRO.Free module with post type, taxonomy and entry limit settings.Free robots.txt editor that edits the virtual file.AI Visibility: ChatGPT and Gemini. Needs a Rank Math AI subscription.Its own guide notes Google dropped some of its schema types. Tracking covers two platforms.
AIOSEOSchema generator with 20+ types, AI Smart Schema, custom JSON-LD builder, multiple schemas per page.Lite generates llms.txt. Pro adds llms-full.txt and Markdown versions.robots.txt editor. AI Suite MCP tools can add robots.txt rules.Not described in its recent changelog or listing.Its pages do not say which schema features are Lite or Pro. AI features use credits.
bot.optimizer pluginJSON-LD in the head plus a visible AI Appendix, generated by bot.spot for synced pages and posts.Not described in its listing.Not described in its listing. Records AI crawler visits.Crawler visits in the plugin. Answer tracking through bot.radar, included in the same plans.Needs a bot.spot account. Content is sent to bot.spot. Output is managed in the bot.spot dashboard.

The sections below give the detail and sources behind each row.

Yoast SEO

As of November 2026, Yoast SEO is at version 28.8, and its WordPress.org listing says the schema basics are free while Premium outputs more schema types.

  • Schema. Yoast's developer documentation lists 21 schema.org pieces, including Article, Breadcrumb, Event, HowTo, LocalBusiness, Organization, Person, Product, Recipe, WebPage and WebSite. The page does not say which are Premium.
  • Schema aggregation. Yoast's Schema Aggregator is disabled by default. When enabled, it exposes the site's schema through REST endpoints so a consumer does not have to crawl each page. Since Yoast SEO 28.3 (August 18, 2026), the changelog says a schemamap.xml file at the site root exposes the aggregated map. Yoast says it was built with NLWeb in mind, and describes it as a foundation for developers. The WordPress.org listing marks it Premium, while Yoast's feature page lists it under several plans, so check your plan.
  • llms.txt. The free plugin lists llms.txt management without a Premium label. Per Yoast's functional specification, a scheduled action regenerates the file weekly. It includes up to five of the most recently updated posts, pages and custom post types, five top categories or tags, and does not overwrite an existing file.
  • Robots.txt. The File Editor under Yoast SEO, Tools lets you create and edit the robots.txt file. The Premium bot blocker toggles rules for GPTBot, CCBot and Google-Extended by editing robots.txt, and is not available on multisite.
  • AI for agents. Releases 28.6 to 28.8 (September 29 to October 27, 2026) added Yoast Abilities that let AI agents read and update titles, descriptions and other SEO data through the WordPress Abilities API, per the changelog.
  • Tracking. AI Brand Insights belongs to the Yoast SEO AI+ plan, listed at €358.80 per year excluding VAT. It scans ChatGPT, Perplexity, Gemini and Claude weekly and supports up to five brand questions.

Where it falls short: schema depth depends on Premium, the default llms.txt is a short list, and tracking is a separate subscription with a small question limit.

Rank Math

As of November 2026, Rank Math is at version 1.0.280.

  • Schema. Rank Math's schema guide lists 29 types in the free plugin, including Article, Book, Course, Event, Product, Recipe, Video and WebPage, with FAQ and HowTo only through Rank Math's own blocks. PRO adds nine more, a custom schema builder, templates, display conditions and multiple schemas per page. The WordPress.org listing quotes lower type counts (16+ and 15+), so treat counts as approximate. The guide also notes that Google has phased out support for FAQ, Course Info and Claim Review rich results, and uses Dataset schema only for Dataset Search.
  • llms.txt. Rank Math's llms.txt module lets you pick post types and taxonomies, set an entry limit (default 100) and add custom links or text. It leaves out noindex posts and calls llms.txt "a proposal and not an official standard." Release 1.0.279 (September 22, 2026) updated the output to follow the latest llms.txt specification, according to the free changelog.
  • Robots.txt. The robots.txt editor is in the free plugin and edits the virtual file, so you must delete any physical robots.txt first. PRO adds an advanced editor and tester.
  • MCP tools. Releases 1.0.278 and 1.0.279 added tools that let AI assistants connect through OAuth and read data such as redirections, robots.txt, llms.txt and 404 logs.
  • Tracking. AI Visibility needs an active Rank Math AI subscription. Starter and Creator plans refresh weekly or monthly on ChatGPT or Gemini. Expert refreshes daily and can track both.

Where it falls short: the AI Visibility tracker is a paid subscription covering two platforms, and the robots.txt guide describes a plain editor with no AI crawler presets.

AIOSEO

As of November 2026, AIOSEO is at version 5.0.4. Its documentation is less explicit about plan limits than the other two.

  • Schema. AIOSEO's schema page lists 20+ types, an AI Schema Generator with Smart Schema and prompt-based modes, a custom builder that accepts any JSON-LD, and multiple schemas per page. It does not say which of these are in Lite and which in Pro, and the WordPress.org listing is inconsistent on the point. Its schema documentation says only that schema controls for web pages need a Basic plan or above of the Pro product.
  • llms.txt. AIOSEO's llms.txt page says Lite generates llms.txt, while llms-full.txt and Markdown conversion need Pro. The setup guide says the feature is on by default, lets you cap URLs per post type and exclude posts and terms. The changelog shows releases 5.0.2 and 5.0.3 (September 22 and October 6, 2026) brought the file closer to the specification and left out noindex taxonomies.
  • Robots.txt and MCP. The WordPress.org listing describes a robots.txt editor and an MCP server with Abilities API support. The 5.0.x changelog entries describe robots.txt abilities in the AI Suite and several robots.txt fixes.
  • AI authoring. Version 5.0.0 (July 30, 2026) added Optimize with AI. Changelog entries for 5.0.3 mention AI credit checks.
  • Tracking. AIOSEO's recent changelog entries and WordPress.org listing do not describe AI answer tracking.

Where it falls short: plan limits for schema are unclear on its own pages, several AI features run on credits, and there is no documented AI visibility tracker.

What about dedicated schema and GEO plugins?

Dedicated schema plugins exist alongside the three suites. Elementor's roundup describes a plugin like Schema Pro as one that focuses only on structured data and works next to your existing SEO plugin. A newer group is branded for GEO. LovedByAI, for example, says its plugin adds structured data, AI summaries and question-and-answer formatting to pages.

Judge any of them with five questions:

  1. Does it add facts to the page that a reader can also see, or markup alone?
  2. Does it duplicate entities your SEO plugin already outputs? Check the page source.
  3. Does it send your content to a third-party service, and which fields?
  4. Can you edit, lock or turn off its output, and what happens if the service is down?
  5. What does it leave behind when you uninstall it?

How do I choose?

  • If you already run Yoast SEO, turn on llms.txt, review the schema output and add the bot blocker only if you want to opt out of training crawlers.
  • If you run Rank Math, enable the llms.txt module and the robots.txt editor, and decide whether the AI Visibility subscription is worth it for two platforms.
  • If you run AIOSEO, confirm your plan before relying on its AI Schema Generator or llms-full.txt.
  • If your SEO plugin's schema is too generic for hundreds of pages, a page-level layer such as the plugin in the next section is an option.
  • Do not run two plugins that both generate llms.txt. Yoast does not overwrite an existing file, and its documentation notes that a plugin serving llms.txt dynamically can take precedence over Yoast's static file.

What does the bot.optimizer WordPress plugin do?

bot.optimizer generates page summaries, key facts, FAQs and JSON-LD structured data for a connected site, and its WordPress plugin is live and self-serve. It is listed on WordPress.org as BotSpot. WordPress is the only integration that is both live and self-serve. Drupal and HubSpot are live but set up together with the customer, and Webflow is in beta. If you run those platforms, see GEO and AEO on Drupal and GEO and AEO on HubSpot.

As of November 2026, the plugin is at version 3.7.9, and its listing says it was tested up to WordPress 7.1.4 and needs WordPress 5.0 and PHP 7.4 or later. According to that listing:

  • Connection. You need a bot.spot account and an access key. The plugin does not sync anything until an administrator enters the key and connects the site.
  • Sync. Selected published content, by default posts and pages, is sent to bot.spot when it is published or updated. The listing names the fields: title, content, excerpt, permalink, post type, status, author display name (a setting, on by default), language, dates, categories, tags, featured image URL and any existing JSON-LD.
  • Output. The plugin renders the appendix HTML and JSON-LD that bot.spot generated. The JSON-LD goes in the page head as a separate script. The appendix can sit at the end of the content or the page, or you can place it with the [botspot_appendix] shortcode or a block.
  • Control. Which post types sync, placement, and the appendix and JSON-LD output are managed in the bot.spot dashboard, where teams can review, edit and lock content before it is published through WordPress.
  • Compatibility. The listing says it does not replace an SEO plugin and is designed to work alongside one. It extracts content from Divi, WPBakery, Elementor, Bricks and Beaver Builder pages, and supports multisite, with each subsite connecting on its own key.
  • Resilience. Rendered content is cached with WordPress transients, so cached content can still be served while entries remain if bot.spot is unavailable. Failed syncs are retried with WP-Cron.
  • Crawler measurement. Since version 3.7.5 the plugin records the requested path, user agent and referrer of page views to separate AI crawlers from other traffic. The listing says it sets no cookies and stores no IP address.

Where it falls short: it needs an external account and sends page content to bot.spot, so it is not an option if that is off limits. Its listing does not describe robots.txt or llms.txt management, so you still use your SEO plugin for those. The JSON-LD and appendix are controlled from the bot.spot dashboard rather than WordPress, and a visible appendix adds content to every synced page, which some teams will not want. Per the pricing page, access is included in the Brand and Agency plans, each connected domain gets 30 free days, and after that each live page costs €0.19 per month excluding VAT (as of November 2026), so cost grows with page count.

How do I set up robots.txt for AI crawlers on WordPress?

Start with the distinction that matters: the crawlers that train models are separate from the ones that power search and answers. Blocking one group does not have to block the other. As of November 2026, the operators document the following tokens.

TokenOperatorWhat it doesIf you disallow it
OAI-SearchBotOpenAISurfaces sites in ChatGPT search featuresThe site does not appear in ChatGPT search answers, though it can still appear as a navigational link
GPTBotOpenAICrawls content that may train OpenAI modelsSignals the content should not be used for training
ChatGPT-UserOpenAIFetches pages when a user asks ChatGPT or a custom GPTRobots.txt rules may not apply, because a user initiated the visit
Claude-SearchBotAnthropicImproves the quality of Claude search resultsContent is not indexed for search, which may reduce visibility
Claude-UserAnthropicRetrieves pages in response to a user queryPrevents retrieval for user queries, which may reduce visibility
ClaudeBotAnthropicCollects web content that may contribute to trainingFuture material is excluded from training datasets
PerplexityBotPerplexitySurfaces and links sites in Perplexity search results. Not used for trainingPerplexity recommends allowing it so your site can appear in results
Perplexity-UserPerplexityFetches pages when a user asks a questionGenerally ignores robots.txt, because a user requested the fetch
GooglebotGoogleCrawls for Search, including AI Overviews and AI ModeGooglebot must be able to access a page, and the page must be indexed and snippet-eligible, to appear in AI Overviews or AI Mode
Google-ExtendedGoogleControl token for Gemini training and groundingDoes not affect inclusion in Google Search or ranking

Sources: OpenAI's crawler documentation, Anthropic's help article, Perplexity's bot guide and Google's common crawlers and AI features pages. OpenAI says it can take about 24 hours after a robots.txt change for its search systems to adjust.

Whether to allow training crawlers is a business decision. If you want to appear in AI answers, keep the search and user-fetch tokens allowed. If you want to opt out of training, disallow the training tokens. A robots.txt that does both looks like this:

User-agent: OAI-SearchBot
Allow: /

User-agent: Claude-SearchBot
Allow: /

User-agent: PerplexityBot
Allow: /

User-agent: GPTBot
Disallow: /

User-agent: ClaudeBot
Disallow: /

User-agent: Google-Extended
Disallow: /

User-agent: *
Disallow: /wp-admin/
Allow: /wp-admin/admin-ajax.php

To apply it on WordPress:

  1. Open yoursite.com/robots.txt and see what is served now.
  2. Check whether a physical robots.txt file exists in the site root. A physical file overrides WordPress's virtual one, and Rank Math's editor requires you to delete it first.
  3. Edit through one tool only: Yoast SEO's File Editor, Rank Math's General Settings or AIOSEO's robots.txt editor.
  4. Reload /robots.txt and confirm the change is live.

Robots.txt is a request, not a gate. Firewalls, security plugins and CDNs can block crawlers before robots.txt matters, and Anthropic warns that blocking IP addresses may not reliably opt a site out. If you use Cloudflare, its AI Crawl Control can set allow or block rules for individual crawlers, so check it matches your robots.txt. A quick test is to request a page with a crawler's user agent, for example curl -I -A "OAI-SearchBot" https://example.com/. It catches user-agent rules but not IP-based ones.

Should I add llms.txt to WordPress?

Adding llms.txt is cheap, but treat it as optional. llms.txt is a proposal by Jeremy Howard from September 2024 for a Markdown file at /llms.txt that gives language models a curated list of your key pages. It is not an adopted standard. Google's guidance says you do not need AI text files to appear in AI Overviews or AI Mode. Our llms.txt guide covers the format and the evidence in more detail.

All three suites generate the file: Yoast SEO under Site features, Rank Math as a module, and AIOSEO on its Sitemaps screen. If you turn one on, do three things:

  1. Enable only one generator and open /llms.txt to confirm which one is serving it.
  2. Check the file lists the pages you want quoted, not only the five most recent posts.
  3. Make sure it excludes pages you have set to noindex. Rank Math leaves out noindex posts, and AIOSEO leaves out noindex taxonomies.

How should I structure WordPress content so AI engines quote it?

Google says no special optimization is needed beyond indexable, snippet-eligible, useful pages, with important content available in text form. The practices below are editorial habits that make a passage easy to lift. They are not guarantees, and no source in this guide measures their effect.

  • Answer first. Put the direct answer in the first one or two sentences under a heading phrased as the question.
  • One question per section. A heading that matches how people ask makes the section a self-contained answer.
  • Real HTML tables and lists. Comparisons and steps belong in text elements, not images or screenshots.
  • Dated facts. Write "As of November 2026" on facts that change, show a visible updated date, and keep dateModified in schema the same.
  • Consistent names. Use the same brand, product and author names everywhere, including in Organization and Person schema.
  • Primary sources. Link the spec, the vendor page or the official announcement, and state numbers only when you can source them.
  • Visible FAQs. If you add FAQ schema, mirror questions that are on the page. Google requires markup to match visible content.

Here is the same sentence before and after, for a service page:

Before: We pride ourselves on a customer-first approach to home comfort.
After: Example Co. installs and repairs residential water heaters in Austin, Texas. Quotes are free, and installation prices start at [price].

And a minimal schema graph for a blog post, using placeholders. The checks that matter are that the organization is defined once and referenced, the author matches the byline, and dateModified matches the date readers see.

{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "Organization",
      "@id": "https://example.com/#organization",
      "name": "Example Co.",
      "url": "https://example.com/",
      "logo": "https://example.com/logo.png"
    },
    {
      "@type": "Article",
      "@id": "https://example.com/water-heater-repair/#article",
      "headline": "How to tell if a water heater needs repair or replacement",
      "datePublished": "2026-03-04",
      "dateModified": "2026-10-20",
      "author": { "@type": "Person", "name": "Jane Doe" },
      "publisher": { "@id": "https://example.com/#organization" },
      "mainEntityOfPage": "https://example.com/water-heater-repair/"
    }
  ]
}

What is the WordPress setup checklist for AI search?

Work through these in order. Most take a few minutes.

  1. Update WordPress and your SEO plugin, and confirm only one SEO plugin is active.
  2. Under Settings, Reading, confirm "Discourage search engines from indexing this site" is off.
  3. Pick one source of schema. Fill in the Organization or Person details in your SEO plugin.
  4. View the page source on a post, a page and your homepage. Confirm the JSON-LD is valid, appears once per type and matches the visible text. Test with Google's Rich Results Test.
  5. Set sensible schema defaults per post type, and add specific types only where the page really is a product, event or recipe.
  6. Treat FAQ schema as optional. Keep visible FAQs for readers.
  7. Open /robots.txt, decide your stance on training crawlers, and keep OAI-SearchBot, Claude-SearchBot, PerplexityBot and Googlebot allowed if you want to appear in answers.
  8. Check your firewall, security plugin and CDN rules do not block those crawlers.
  9. Check you have one XML sitemap and that robots.txt points to it. If you use Yoast and want WordPress's default sitemap instead of Yoast's, Yoast's llms.txt help article says to deactivate both the Yoast XML sitemap and llms.txt first.
  10. Optionally enable one llms.txt generator and verify /llms.txt.
  11. Rewrite the opening of your ten most important pages to answer the page's main question in the first two sentences.
  12. Add a visible "last updated" date to pages with facts that change.
  13. Write down 20 questions your buyers ask and record today's answers as a baseline.
  14. Recheck after crawlers have had time to revisit. OpenAI alone says robots.txt changes can take about 24 hours to apply for its search systems.

How do I measure whether it worked?

Measure in three layers, because each answers a different question.

Can crawlers reach you? Check server logs or your host's analytics for the user-agent tokens in the table above. The bot.optimizer plugin records AI crawler visits on the pages it covers, and a CDN dashboard may show crawler traffic too. A hit proves access, not that the page was used in an answer.

Do visitors arrive from assistants? Segment sessions in your analytics by referrer to see traffic from AI products. Google advises measuring the full value of visits, such as sales and signups, not clicks alone.

Are you named and cited? This needs a fixed list of prompts run on a schedule, because AI answers change between runs. Log prompt, engine, whether you were mentioned, which URL was cited and the date. Plugin options include Rank Math AI Visibility (ChatGPT and Gemini) and Yoast AI Brand Insights (ChatGPT, Perplexity, Gemini and Claude, five questions). bot.radar tracks brand mentions, citations, average position and share of voice daily and links each answer back to its source pages. Every plan includes all seven engines: ChatGPT, Google AI Overview, Google AI Mode, Gemini, Perplexity, Claude and Copilot. Plans are counted in units, where one unit is one question tracked on one engine for a month: Brand includes 150 units and Agency 450, pooled across its workspaces.

A simple log looks like this:

DatePromptEngineMentionedCited URL
2026-11-02Which water heater repair service is best in Austin?ChatGPTNoNone
2026-11-30Which water heater repair service is best in Austin?ChatGPTYesexample.com/water-heater-repair

Change one thing at a time where you can, so you know what moved the result.

Frequently asked questions

Is there a best GEO plugin for WordPress?

No single plugin covers everything, and none has independent evidence that it improves AI citations. Most sites get the main benefit from one SEO plugin configured properly: schema, robots.txt and, optionally, llms.txt. Add a tracking tool or a page-level plugin only for a specific gap you can name.

Do I need a plugin to add schema markup to WordPress?

Usually yes. WordPress core has no schema settings, so markup comes from your theme, a plugin or hand-written template code. Yoast SEO, Rank Math and AIOSEO all output schema, so a separate schema plugin is rarely needed unless you want more control than your SEO plugin gives.

Does FAQ schema still help in Google?

Not for rich results. Google's documentation says the FAQ rich result stopped appearing in Google Search on May 7, 2026. FAQ markup is still valid schema.org, and visible FAQs still help readers, but do not add markup in the hope of a rich snippet.

Should I block GPTBot and ClaudeBot on WordPress?

That is your call. Both are training crawlers, and OpenAI and Anthropic document separate tokens for search and user-requested fetches. Blocking GPTBot or ClaudeBot opts out of training, while OAI-SearchBot and Claude-SearchBot control whether you can appear in their search features.

Do Yoast, Rank Math and AIOSEO support llms.txt?

Yes, all three generate it as of November 2026. Yoast SEO and Rank Math offer it in their free plugins, and AIOSEO generates llms.txt in Lite and reserves llms-full.txt and Markdown versions for Pro. Google says you do not need an AI text file to appear in AI Overviews, so treat it as optional.

What is the difference between a schema plugin and a GEO plugin?

A schema plugin outputs structured data that describes your pages. A GEO plugin is a looser label for tools that may add schema, rewrite page content, generate llms.txt or track AI mentions. Check what a plugin actually changes on the page before paying for the label.

Summary

WordPress core gives you robots.txt, a sitemap and AI authoring tools, but no schema or AI crawler rules. Yoast SEO, Rank Math and AIOSEO each cover schema, llms.txt and a robots.txt editor, with different limits on tracking and plan tiers. Google says AI Overviews need no special markup or AI files, so keep schema accurate and matched to visible text, and keep the search crawlers you care about allowed. Structure each page so the answer comes first, and measure with a fixed prompt list rather than guessing. A page-level layer like the bot.optimizer plugin is an option when you need generated schema and FAQs across many pages.