{"id":11888,"plugin_id":"plugin_asdk_app_6a77e3320e108191b0955377b387accf","kind":"skill","collection_source":null,"comparison_source":null,"observed_at":"2026-09-30T23:00:28.648Z","digest":"42fa61c4b0c9b7b62df476f0a80e3a84a933fdfef670e90e998cd9c206297420","against":null,"payload":{"name":"technical-site-audit","description":"Crawl a brand's website and report technical SEO problems. Use for running a site audit, checking crawl issues, broken links, page level fixes, sitemap imports, or managing the media library and image alt text. Do not use for keyword research or for writing content.","included_files":[{"relative_path":"agents/openai.yaml","size_in_bytes":2533}],"skill_md_contents":"---\nname: technical-site-audit\ndescription: Crawl a brand's website and report technical SEO problems. Use for running a site audit, checking crawl issues, broken links, page level fixes, sitemap imports, or managing the media library and image alt text. Do not use for keyword research or for writing content.\n---\n\n# Technical site audit\n\nCrawl the brand's site, find what is technically wrong, and turn it into a fix list.\n\nEvery tool here is scoped to one brand and takes `brand_id`.\n\n## Step 1: resolve the brand\n\nCall `list_brands`. If more than one, ask which. Keep `brand_id` for every later call.\n\n## Step 2: know which pages exist\n\nCall `list_pages`.\n\nIf empty, populate it before auditing:\n\n- `import_sitemap_urls` pulls the site's own sitemap. Try this first.\n- `scan_urls` takes an explicit list when there is no usable sitemap.\n\n## Step 3: run the audit\n\n1. `start_audit` with `brand_id`. `max_pages` caps the crawl. Set it for large sites and tell the user what the cap excludes, because a capped crawl is a sample and reporting it as complete is wrong.\n2. Poll `get_audit`. Do not poll faster than every 30 seconds. Crawls take minutes.\n3. `cancel_audit` stops one that is no longer wanted.\n\n## Step 4: read the results\n\n- `get_audit_issues` is the core output: what is broken and where.\n- `get_audit_pages` for per page detail.\n- `get_audit_links` for internal and external link problems, including broken links.\n- `get_audit_assets` for images and files, including ones that are oversized or missing alt text.\n\n## Step 5: turn issues into a fix list\n\nGroup by cause, not by URL. Two hundred pages missing a meta description is one template problem, not two hundred problems, and reporting it as two hundred buries the real work.\n\nOrder by impact:\n\n1. Issues blocking indexing, for example pages that cannot be crawled or are excluded.\n2. Issues that break the experience, for example broken links.\n3. Issues that weaken a page, for example missing metadata or alt text.\n\n`get_page_suggestions` gives page level recommendations, and `update_page_suggestion` records that one has been handled. `check_page_frameable` tests whether a page can be previewed in an embed. `page_refresh_jobs` shows content refresh work already queued.\n\n## Step 6: media\n\nThe media library is part of the same surface:\n\n- `list_media_assets` to see what exists, `update_media_asset` and `delete_media_asset` to change it.\n- `generate_alt_text` to fix missing alt text found by the audit.\n- `import_assets_from_audit` to pull crawled images into the library.\n- `manage_media_folders` to organise them.\n\n## Boundaries\n\n- `delete_pages` removes up to 5000 URLs in one call and cannot be undone. Always list what will be deleted and get explicit confirmation. Never infer this from a vague instruction to clean up.\n- `delete_media_asset` is destructive in the same way. Confirm first.\n- Never present a capped or partial crawl as a full one. State the page count crawled and the cap applied.\n- Do not report an issue count without saying how many pages were crawled. The number is meaningless without the denominator.\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}