# SEO

# General

# How do I add SEO Metadata to a page?

You can use the `\Aero\Marketing\Facades\SearchOptimization` facade to add SEO Metadata to a page.

See below an example of how we do it for `\Aero\Store\Http\Responses\Homepage` &amp; `Aero\Store\Http\Responses\InformationPage` by adding the `Aero\Store\Http\Responses\Steps\Page\AttachMetaData` step:

```php
class AttachMetaData
{
    public function handle(\Aero\Responses\ResponseBuilder $builder, \Closure $next)
    {
        /** @var $page \Aero\Content\Models\Page */
        $page = $builder->page;

        if (! $page->key) {
            \Aero\Marketing\Facades\SearchOptimization::setTitle($page->name);
        }

        if ($page->seo) {
            \Aero\Marketing\Facades\SearchOptimization::setCanonical($page->getCanonical());

            if (! empty($page->seo->page_title)) {
                \Aero\Marketing\Facades\SearchOptimization::setTitle($page->seo->page_title, false);
            }

            if ($page->seo->noindex) {
                \Aero\Marketing\Facades\SearchOptimization::setNoIndex();
            }

            if ($page->seo->nofollow) {
                \Aero\Marketing\Facades\SearchOptimization::setNoFollow();
            }
        }

        \Aero\Marketing\Facades\SearchOptimization::setDescription($page->getMetaDescription());

        \Aero\Marketing\Facades\OpenGraph::withPage($page);

        return $next($builder);
    }
}
```

---

### Methods

<table border="1" id="bkmrk-method-description-s" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 50.0596%;"></col><col style="width: 50.0596%;"></col></colgroup><tbody><tr><td>**Method**  
</td><td>**Description**  
</td></tr><tr><td data-col-size="md" data-end="79" data-start="35">`setTitle($title, $appendDefault = true)`</td><td data-col-size="md" data-end="162" data-start="79">Sets the page title, optionally appending the configured default title postfix.</td></tr><tr><td data-col-size="md" data-end="203" data-start="163">`setDescription(string $description)`</td><td data-col-size="md" data-end="238" data-start="203">Sets the page meta description.</td></tr><tr><td data-col-size="md" data-end="268" data-start="239">`setCanonical($canonical)`</td><td data-col-size="md" data-end="308" data-start="268">Sets the canonical URL for the page.</td></tr><tr><td data-col-size="md" data-end="337" data-start="309">`setAmpHtml(string $url)`</td><td data-col-size="md" data-end="363" data-start="337">Sets the AMP HTML URL.</td></tr><tr><td data-col-size="md" data-end="418" data-start="364">`addAlternativeLanguage(string $lang, string $url)`</td><td data-col-size="md" data-end="487" data-start="418">Adds an alternate-language URL with its `hreflang` language code.</td></tr><tr><td data-col-size="md" data-end="534" data-start="488">`addAlternativeLanguages(array $languages)`</td><td data-col-size="md" data-end="576" data-start="534">Adds multiple alternate-language URLs.</td></tr><tr><td data-col-size="md" data-end="612" data-start="577">`setNoIndex(bool $index = true)`</td><td data-col-size="md" data-end="667" data-start="612">Enables or disables the `noindex` robots directive.</td></tr><tr><td data-col-size="md" data-end="705" data-start="668">`setNoFollow(bool $follow = true)`</td><td data-col-size="md" data-end="761" data-start="705">Enables or disables the `nofollow` robots directive.</td></tr><tr><td data-col-size="md" data-end="800" data-start="762">`setRobotContent(?string $content)`</td><td data-col-size="md" data-end="836" data-start="800">Sets custom robots meta content.</td></tr><tr><td data-col-size="md" data-end="881" data-start="837">`setNext(LengthAwarePaginator $listings)`</td><td data-col-size="md" data-end="930" data-start="881">Sets the next-page URL for paginated content.</td></tr><tr><td data-col-size="md" data-end="975" data-start="931">`setPrev(LengthAwarePaginator $listings)`</td><td data-col-size="md" data-end="1028" data-is-last-node="" data-start="975">Sets the previous-page URL for paginated content.</td></tr></tbody></table>

# Robots Txt

# How do I modify robots.txt?

You can modify the `robots.txt` file by extending the `\Aero\Store\Pipelines\RobotsTxt` pipeline.

For example, you can prevent search engines from crawling the admin login page:

```php
\Aero\Store\Pipelines\RobotsTxt::extend(function (\Aero\Store\Collections\RobotsTxtCollection $content, \Closure $next) {
    $adminSlug = config('aero.admin.slug');

    $content->agent('*')->disallow("/{$adminSlug}");

    return $next($content);
});
```

---

### Parameters

<table border="1" id="bkmrk-parameter-type-descr" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 33.3731%;"></col><col style="width: 33.3731%;"></col><col style="width: 33.3731%;"></col></colgroup><tbody><tr><td>**Parameter**</td><td>**Type**</td><td>**Description**</td></tr><tr><td>`$content`</td><td>`\Aero\Store\Collections\RobotsTxtCollection`</td><td>The collection of rules for the robots.txt file.</td></tr><tr><td>`$next`</td><td>`\Closure`</td><td>The next step in the pipeline.</td></tr></tbody></table>

### Methods

<table border="1" id="bkmrk-method-description-i" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 50.0596%;"></col><col style="width: 50.0596%;"></col></colgroup><tbody><tr><td>**Method**</td><td>**Description**</td></tr><tr><td>`agent(string $agent)`</td><td>Gets or creates a new rule collection for the specified user agent.</td></tr><tr><td>`removeAgent(string $agent)`</td><td>Removes a user agent entirely (including all of its defined rules).</td></tr><tr><td>`allow(string $value)`  
</td><td>Adds an `Allow: $value` rule.</td></tr><tr><td>`removeAllow(string $value)`  
</td><td>Removes an `Allow: $value` rule.</td></tr><tr><td>`disallow(string $value)`  
</td><td>Adds an `Disallow: $value` rule.</td></tr><tr><td>`removeDisallow(string $value)`  
</td><td>Removes an `Disallow: $value` rule.</td></tr><tr><td>`sitemap(string $value)`  
</td><td>Adds an `Sitemap: $value` rule.</td></tr><tr><td>`removeSitemap(string $value)`  
</td><td>Removes an `Sitemap: $value` rule.</td></tr><tr><td>`crawlDelay(string $value)`  
</td><td>Adds an `Crawl-delay: $value` rule.</td></tr><tr><td>`removeCrawlDelay(string $value)`  
</td><td>Removes an `Crawl-delay: $value` rule.</td></tr><tr><td>`requestRate(string $value)`  
</td><td>Adds an `Request-rate: $value` rule.</td></tr><tr><td>`removeRequestRate(string $value)`  
</td><td>Removes an `Request-rate: $value` rule.</td></tr></tbody></table>