---
title: "Set up SEO and run your first audit | SEO Skill"
description: "Install the command, connect Search Console, save your site and complete your first audit. Traffic analytics and research providers can wait until you need them."
canonical: "https://seoskill.dev/docs/getting-started"
language: "en"
---

# Set up SEO and run your first audit

Install the command, connect Search Console, save your site and complete your first audit. Traffic analytics and research providers can wait until you need them.

You need Node 22 or newer. A Google account that can read the site’s Search Console property adds click and query evidence. Traffic analytics is optional. You can still start with a local technical report before connecting it.

## Install the SEO CLI

Install the command once, then start setup:

```sh
npm i -g seo
seo start
```

Setup asks whether to create a new project, update an existing one, or continue without a saved profile. When you create or update one, it then guides you through:

1.  A Search Console property.
2.  An optional traffic analytics connection.
3.  A name for the project profile saved on your computer.

Choosing an existing project keeps its Search Console property and current defaults unless you explicitly change them. Setup never updates a project just because another project uses the same property.

A project profile is a local shortcut. It remembers the property, crawl URL, optional analytics connection, and brand terms you would otherwise repeat on every command. If this is your only site, make it the default and most commands will need no flags.

The [Google connection guide](https://seoskill.dev/docs/google) explains the permissions and data limits before you sign in.

Do not run the global install with `sudo`. If npm reports a permission error, fix npm’s global install directory, then run the same command again.

## Add the skill for your agent

The CLI and MCP server run the reports. The skill teaches an agent which report fits the job, how to interpret its limits, and what to verify next. During `seo start` you can choose to add the skill to your supported agents as part of the guided setup.

If you chose no during setup, or need to reinstall the skill later, run:

```sh
seo skill install
```

The CLI still works without the skill for direct terminal use, scripts and CI. An agent can call it too, but it loses the report-specific guidance that keeps the analysis focused and honest.

## Run the main report first

```sh
seo report
```

`seo report` uses the default project profile. It checks the available search, analytics, and technical evidence, then recommends focused reports that can answer the next question. Start there unless you already know the exact job.

If you only have a URL, run the technical-only version of the report.

```sh
seo report --url https://example.com
```

This creates a limited local crawl and saves the evidence. Search Console sections say that they were skipped. They do not become zeroes or guesses. Run `seo start` later when you want click, query, ranking, and traffic analytics data in the same investigation.

Read the result in this order:

1.  Check the date range and data status.
2.  Read skipped sections and caveats before treating an absence as zero.
3.  Pick one or two actions with specific page or query evidence.
4.  Run the recommended focused command to confirm the affected set.
5.  Save the crawl or baseline you will need to verify the change later.

For example, a low-CTR finding is a prompt to inspect the query, page, search appearance, and current snippet. It is not proof that rewriting a title will increase clicks. The [reports and data guide](https://seoskill.dev/docs/reports) covers those boundaries in more detail.

## Use a Search Console download before you connect

If you have downloaded the performance tables from Search Console but have not connected Google yet, point the URL report at the folder or CSV:

```sh
seo report --url https://example.com --search-console-export ./performance-export
```

The path can be the unzipped download folder or a single CSV containing the standard query or page table. The report records exactly what it read from each file, tells you which exported pages the crawl could not reach, and fetches up to 20 of those pages in the same run so their findings join the action list. When an exported search phrase appears in the titles of two or more pages, the report points them out as pages that may be competing for the same search.

The report also lists each exported page with its clicks, impressions, and average position, and suggests a next step for each one: keep, update, or review. The suggestions come from the numbers in the export and what the crawl reached, so you can work through a migration, rebrand, or content cleanup page by page. You make the call on every page. Large inventories return 50 rows at a time in stable impression order. Pass `--inventory-page <nextPage>` until the returned `nextPage` is `null`.

The export is a snapshot from the day you downloaded it, and its query and page tables are separate lists. The report never guesses which page served which query, and a query or page missing from the export is not proof of zero traffic. To confirm a competing-pages lead, connect Search Console with `seo start` and run the [cannibalisation report](https://seoskill.dev/docs/reports/cannibalisation).

## Choose a different saved site

List your project profiles and pass the one you want:

```sh
seo projects list
seo report --project example
seo crawl --project example --max-pages 500
```

`--project` accepts the saved id or name. The CLI can also work without a profile when a command has enough explicit input:

```sh
seo report --site sc-domain:example.com
seo report --url https://example.com
seo crawl https://example.com
seo audit-page --url https://example.com/pricing
```

That one-off path is handy for a public page check. A profile is calmer for ongoing work because you are less likely to query the wrong property.

## Keep going when one source is missing

A useful report should survive a missing optional section. If traffic analytics is not connected or a Search Console window is too sparse, the report records the skip reason and continues with evidence that still holds.

Errors that invalidate the whole run still stop clearly. An expired login, unknown property, or corrupt provider response should never produce a cheerful empty report.

## Check the local setup

```sh
seo doctor
seo auth status
seo projects list
seo privacy
```

`seo doctor` checks authentication and local configuration. `seo privacy` prints the paths used for profiles, tokens, caches, and saved reports on your operating system.

Use `seo auth logout` to delete local Google tokens. Use `seo reset` only when you want to remove local configuration, caches, histories, logs, and saved reports together with every saved credential and IndexNow key. Environment variables remain under the control of your shell or runtime. The [privacy policy](https://seoskill.dev/privacy) documents every storage, deletion, and network boundary.

## Add research data when the question needs it

The first report does not require a paid research provider. Connect DataForSEO later when keyword estimates, current results, domain footprints, ranking pages or competitor research would change the work:

```sh
seo providers dataforseo connect
seo providers dataforseo status --check
seo providers dataforseo limits
```

Keep local spend limits in place before broad research. The [research provider guide](https://seoskill.dev/docs/research-providers) explains costs, caching, country-level domain reports, Search Console data joins and programmatic SEO research.

## Add your agent after the first report works

Once `seo report` runs in the terminal, connect the [local MCP server](https://seoskill.dev/docs/mcp) and install the [focused SEO skill](https://seoskill.dev/docs/skill). The MCP server gives the agent the tools; the skills teach it how to use them. Testing the human path first makes auth and property mistakes much easier to spot.
