Add Google Search Console plugin#63
Conversation
|
@claude review |
|
@claude review |
…he "Biggest Ranking Changes" tile of the "Page Overview" dashboard
…he "Organic Search Performance " tile of the "Site Overview" dashboard
|
@Daniel-Hodgson-SquaredUp let me know when this is ready for re-review! |
Fixed inverted datasets Fixed typos Updated CTR shape to be handled by SquaredUp metadata Renamed Organic search performance tiles to "Period performance change" Added tags to data streams Updated author to use GitHub handle
|
Important Review skippedReview was skipped due to path filters ⛔ Files ignored due to path filters (1)
CodeRabbit blocks several paths by default. You can override this behavior by explicitly including those paths in the path filters. For example, including ⚙️ Run configurationConfiguration used: Repository UI Review profile: ASSERTIVE Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
📝 WalkthroughWalkthroughThis PR introduces a complete Google Search Console plugin v1. It adds plugin identity files (metadata, OAuth2 config, UI schema), a page-URL index definition, 14 data stream definitions (site and page-scoped) with corresponding post-request JavaScript transforms, hidden previous-period comparison streams, two default dashboards (Site Overview and Page Overview) with embedded SQL tiles, a scope definition, and a README. ChangesGoogle Search Console Plugin v1
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. Comment |
|
Hey @clarkd ! Heads up I've committed changes from all the feedback, good to go for another review :) |
There was a problem hiding this comment.
Actionable comments posted: 19
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@plugins/GoogleSearchConsole/v1/dataStreams/pagePerformanceOverTime.json`:
- Around line 39-54: The metadata for the time-series stream is missing an
explicit shape for the Date column, so it is being matched by the catch-all
pattern instead of rendering as a time axis. Update the metadata in
pagePerformanceOverTime.json to add a timestamp shape entry for the Date field
alongside the existing CTR shape, and keep the fallback pattern after the
explicit column definitions so Date is recognized correctly by the stream
metadata.
In `@plugins/GoogleSearchConsole/v1/dataStreams/pagePerformanceSummary.json`:
- Around line 6-35: The pagePerformanceSummary stream is single-object scoped
because it always queries one page via the page dimension and equals filter on
scope[0].name. Update this stream’s config to declare single-object semantics by
either switching it to the httpRequestScopedSingle dataSource or adding
objectLimit: 1, and keep the change localized to the pagePerformanceSummary
stream definition.
In `@plugins/GoogleSearchConsole/v1/dataStreams/pageUrLs.json`:
- Line 2: The stream name has inconsistent camel casing in pageUrLs, with an
unintended capital L. Rename the stream to pageUrls in the JSON definition and
update every matching reference in the related index definition and script path
so the identifiers stay consistent across the GoogleSearchConsole v1 data stream
setup.
In
`@plugins/GoogleSearchConsole/v1/dataStreams/previousPeriodPerformanceOverTime.json`:
- Line 4: The description for previousPeriodPerformanceOverTime is misleading
because it mentions a selected page even though this stream is site-wide and has
no page-scoping fields like dimensionFilterGroups or a scope UI field. Update
the description text in the JSON so it describes daily performance for the
previous period of the given timeframe without referencing a page. Keep the
wording aligned with the stream’s actual behavior and metadata.
In `@plugins/GoogleSearchConsole/v1/dataStreams/queriesByPage.json`:
- Around line 19-29: The page filter in the queriesByPage stream is using
scope?.[0]?.rawId?.[0], which only passes the first character of the selected
page value. Update the dimensionFilterGroups expression to use scope?.[0]?.name
so the full page URL is sent, matching the other page-scoped stream definitions
and the surrounding query builder structure.
In
`@plugins/GoogleSearchConsole/v1/dataStreams/scripts/postRequest/pageDistribution.js`:
- Around line 4-11: The bucket assignment in pageDistribution.js is counting
missing Google Search Console positions as top-ranked because row.position
defaults to 0, which then matches the "1-3" branch. Update the logic around the
position-to-Bucket mapping so missing or invalid positions are not treated as
valid rankings—either skip those rows entirely or default them to a value that
falls into "51+". Keep the fix localized to the position/Bucket handling in the
pageDistribution script.
In
`@plugins/GoogleSearchConsole/v1/dataStreams/scripts/postRequest/pagePerformanceOverTime.js`:
- Line 4: The timestamp field in pagePerformanceOverTime.js is returning a Date
object instead of the required ISO 8601 string. Update the mapping in the
postRequest logic so the Date property derived from row.keys?.[0] is serialized
to an ISO 8601 string before returning it, keeping the change localized to the
data-stream transform that builds the row object.
In
`@plugins/GoogleSearchConsole/v1/dataStreams/scripts/postRequest/sitePerformanceOverTime.js`:
- Around line 3-11: The `rows.map` transformation in `sitePerformanceOverTime`
is converting the GSC `date` value into a `Date` object, but the data stream
should keep timestamps as ISO 8601 strings. Update the `Date` field to use the
raw `row.keys?.[0]` value directly instead of `new Date(...)`, so the output
remains an ISO string and avoids invalid date coercion when the key is missing.
In `@plugins/GoogleSearchConsole/v1/dataStreams/sitePerformanceSummary.json`:
- Around line 6-22: The sitePerformanceSummary stream is a single-object
response but its config does not limit output to one object. Update the stream
configuration for sitePerformanceSummary to either use the
httpRequestScopedSingle dataSource or add objectLimit: 1 alongside the existing
postRequestScript/postBody settings so the stream explicitly declares it only
emits one aggregate object.
In `@plugins/GoogleSearchConsole/v1/defaultContent/pageOverview.dash.json`:
- Line 38: Update the dashboard tile titles in pageOverview.dash.json to use
title case consistently. The "title" fields for the affected tiles should be
changed from sentence case to title case, and the same normalization should be
applied to the other referenced tile entries in the dashboard JSON. Use the tile
title strings in the JSON object definitions as the target locations.
- Around line 133-145: The default tile definitions still include
environment-specific scope bindings with hardcoded node IDs, which should be
removed from the default content. Update the affected tile objects in
pageOverview.dash.json so the scope no longer depends on fixed graph
identifiers, and keep the default tiles portable outside the authoring
workspace. Apply the same cleanup to the repeated scope blocks referenced in the
other tile sections as well.
In `@plugins/GoogleSearchConsole/v1/defaultContent/siteOverview.dash.json`:
- Line 153: The period-change query in the GoogleSearchConsole site overview SQL
is not fully null-safe when either period has no rows or zero totals, causing
the change metrics to return null. Update the SQL in the siteOverview dashboard
to match the page dashboard’s handling by adding COALESCE/CASE guards around the
change calculations in the current_period/previous_period comparison, using the
existing CTEs and the final SELECT aliases like "Clicks Change %", "Impressions
Change %", "CTR Change %", and "Position Change" so the tiles always return
stable numeric values.
- Line 42: Update the dashboard tile names in the GoogleSearchConsole
siteOverview.dash.json content to use title case consistently. The issue is that
several tile titles, including the one at Top Queries and the other referenced
title entries in the same dashboard, are currently not title-cased. Rename each
affected title string in the dashboard JSON so it matches the coding guideline
and the existing title-case pattern used by other tiles like Site Summary and
Period Performance Change.
- Around line 157-169: The default dashboard content includes a hardcoded scope
binding tied to a specific node ID, which should not ship in OOTB content.
Update the siteOverview.dash.json scope block to remove the static
bindings/queryDetail values or replace them with variable-driven scope
generation so the dashboard resolves correctly in any workspace. Use the
existing scope object in the dashboard JSON as the location to clean up this
environment-specific node reference.
In `@plugins/GoogleSearchConsole/v1/docs/README.md`:
- Around line 31-33: The README has markdownlint issues in several fenced code
blocks and at EOF. Update the affected fenced blocks in the GoogleSearchConsole
docs to include blank lines before and after each fence, add an explicit fence
language such as text, and make sure the document ends with exactly one trailing
newline. Use the fenced code sections in the README as the locations to fix
consistently across all mentioned occurrences.
In `@plugins/GoogleSearchConsole/v1/indexDefinitions/default.json`:
- Around line 13-15: The source type name is incorrectly prefixed with the
plugin abbreviation, so update the default definition in the GoogleSearchConsole
v1 index metadata to use the upstream concept name instead of gsc-page. Change
the value in the source type definition to the unprefixed type used by the
API/product, and keep related identifiers in the plugin’s default JSON
consistent with that rename so scopes, dashboards, and metadata don’t inherit
the plugin prefix.
In `@plugins/GoogleSearchConsole/v1/metadata.json`:
- Around line 1-42: The metadata for google-search-console is missing the
required links array. Update the metadata.json structure to include a links
field alongside the existing top-level properties, and add both a source link to
the GitHub repository and a documentation link to the README, following the same
metadata conventions used by other plugins.
- Line 9: Update the metadata description in the GoogleSearchConsole v1 manifest
so it is a single short full sentence with terminal punctuation; expand the
“GSC” abbreviation to the full product name and end the description with a
period.
In `@plugins/GoogleSearchConsole/v1/ui.json`:
- Line 6: The GoogleSearchConsole v1 ui.json fields are using an unsupported
description property for the URL, client ID, and client secret copy. Update the
field definitions in ui.json to use help instead of description so the guidance
appears correctly for those inputs, and keep the existing text attached to the
relevant field entries.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: ASSERTIVE
Plan: Pro
Run ID: da6527ab-bc2e-4849-9096-98b588be3ef0
⛔ Files ignored due to path filters (1)
plugins/GoogleSearchConsole/v1/icon.svgis excluded by!**/*.svg
📒 Files selected for processing (34)
plugins/GoogleSearchConsole/v1/dataStreams/countryBreakdown.jsonplugins/GoogleSearchConsole/v1/dataStreams/deviceBreakdown.jsonplugins/GoogleSearchConsole/v1/dataStreams/pageDistribution.jsonplugins/GoogleSearchConsole/v1/dataStreams/pagePerformanceOverTime.jsonplugins/GoogleSearchConsole/v1/dataStreams/pagePerformanceSummary.jsonplugins/GoogleSearchConsole/v1/dataStreams/pageUrLs.jsonplugins/GoogleSearchConsole/v1/dataStreams/pages.jsonplugins/GoogleSearchConsole/v1/dataStreams/previousPeriodPagePerformance.jsonplugins/GoogleSearchConsole/v1/dataStreams/previousPeriodPerformanceOverTime.jsonplugins/GoogleSearchConsole/v1/dataStreams/previousPeriodQueriesByPage.jsonplugins/GoogleSearchConsole/v1/dataStreams/queries.jsonplugins/GoogleSearchConsole/v1/dataStreams/queriesByPage.jsonplugins/GoogleSearchConsole/v1/dataStreams/scripts/postRequest/countryBreakdown.jsplugins/GoogleSearchConsole/v1/dataStreams/scripts/postRequest/deviceBreakdown.jsplugins/GoogleSearchConsole/v1/dataStreams/scripts/postRequest/pageDistribution.jsplugins/GoogleSearchConsole/v1/dataStreams/scripts/postRequest/pagePerformanceOverTime.jsplugins/GoogleSearchConsole/v1/dataStreams/scripts/postRequest/pagePerformanceSummary.jsplugins/GoogleSearchConsole/v1/dataStreams/scripts/postRequest/pageUrLs.jsplugins/GoogleSearchConsole/v1/dataStreams/scripts/postRequest/pages.jsplugins/GoogleSearchConsole/v1/dataStreams/scripts/postRequest/previousPeriodPerformanceOverTime.jsplugins/GoogleSearchConsole/v1/dataStreams/scripts/postRequest/previousPeriodQueriesByPage.jsplugins/GoogleSearchConsole/v1/dataStreams/scripts/postRequest/queries.jsplugins/GoogleSearchConsole/v1/dataStreams/scripts/postRequest/sitePerformanceOverTime.jsplugins/GoogleSearchConsole/v1/dataStreams/scripts/postRequest/sitePerformanceSummary.jsplugins/GoogleSearchConsole/v1/dataStreams/sitePerformanceOverTime.jsonplugins/GoogleSearchConsole/v1/dataStreams/sitePerformanceSummary.jsonplugins/GoogleSearchConsole/v1/defaultContent/manifest.jsonplugins/GoogleSearchConsole/v1/defaultContent/pageOverview.dash.jsonplugins/GoogleSearchConsole/v1/defaultContent/scopes.jsonplugins/GoogleSearchConsole/v1/defaultContent/siteOverview.dash.jsonplugins/GoogleSearchConsole/v1/docs/README.mdplugins/GoogleSearchConsole/v1/indexDefinitions/default.jsonplugins/GoogleSearchConsole/v1/metadata.jsonplugins/GoogleSearchConsole/v1/ui.json
Use help instead of description for UI fields The metadata no longer uses the product abbreviation This metadata now includes the links array Removed plugin abbreviation from source type Fixed markdown violations Made period-change SQL null-safe for empty periods Tiles now title-case Default position of 0 no longer mis-bucketed Use the full page URL in the filter for queriesByPage Fixed description for previousPeriodPerformanceOverTime Fixed casing for pageUrLs (now pageUrls) Ignored suggestions that seemed incorrect or nitpicky
There was a problem hiding this comment.
♻️ Duplicate comments (2)
plugins/GoogleSearchConsole/v1/defaultContent/pageOverview.dash.json (1)
133-145: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick winRemove environment-specific scope bindings from default tiles.
These tile-level
scopeblocks still carry hardcoded node IDs (node-1dwkxV4HX7tME4WtZkj2r04TirpbysXMf3ej9-...), which are export artifacts and can fail outside the authoring workspace. The tiles already define proper variable-driven scope insidedataSourceConfig, so the staticscope/queryDetailblock should be removed.Also applies to: 245-257, 341-353, 437-449
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@plugins/GoogleSearchConsole/v1/defaultContent/pageOverview.dash.json` around lines 133 - 145, Remove the environment-specific tile-level scope artifacts from the dashboard defaults: in pageOverview.dash.json, the affected tile objects still include hardcoded scope/queryDetail blocks with node IDs, which should be deleted. Keep the variable-driven scope in dataSourceConfig as the source of truth, and apply the same cleanup to the other matching tile sections referenced by the review so the default content is workspace-agnostic.plugins/GoogleSearchConsole/v1/defaultContent/siteOverview.dash.json (1)
157-169: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick winRemove hardcoded scope node bindings from default dashboard content.
This scope block is still bound to a specific environment node ID (
node-1dwkxV4HX7tME4WtZkj2r04TirpbysXMf3ej9-...) and will break data resolution after install in other workspaces. Use variable-driven scope or remove this static scope from OOTB content.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@plugins/GoogleSearchConsole/v1/defaultContent/siteOverview.dash.json` around lines 157 - 169, The static scope binding in the default dashboard content is hardcoded to a specific environment node ID and will not resolve correctly in other workspaces. Update the scope block in siteOverview.dash.json so it does not reference the fixed node-1dwkxV4HX7tME4WtZkj2r04TirpbysXMf3ej9-* value; instead use variable-driven scope generation or remove the scope entirely from OOTB content. Make the change in the dashboard content where the scope.query, bindings, and queryDetail are defined so the default install stays portable.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Duplicate comments:
In `@plugins/GoogleSearchConsole/v1/defaultContent/pageOverview.dash.json`:
- Around line 133-145: Remove the environment-specific tile-level scope
artifacts from the dashboard defaults: in pageOverview.dash.json, the affected
tile objects still include hardcoded scope/queryDetail blocks with node IDs,
which should be deleted. Keep the variable-driven scope in dataSourceConfig as
the source of truth, and apply the same cleanup to the other matching tile
sections referenced by the review so the default content is workspace-agnostic.
In `@plugins/GoogleSearchConsole/v1/defaultContent/siteOverview.dash.json`:
- Around line 157-169: The static scope binding in the default dashboard content
is hardcoded to a specific environment node ID and will not resolve correctly in
other workspaces. Update the scope block in siteOverview.dash.json so it does
not reference the fixed node-1dwkxV4HX7tME4WtZkj2r04TirpbysXMf3ej9-* value;
instead use variable-driven scope generation or remove the scope entirely from
OOTB content. Make the change in the dashboard content where the scope.query,
bindings, and queryDetail are defined so the default install stays portable.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: ASSERTIVE
Plan: Pro
Run ID: f603af48-0712-44a9-9daf-4df4f80ede64
📒 Files selected for processing (15)
plugins/GoogleSearchConsole/v1/dataStreams/pageDistribution.jsonplugins/GoogleSearchConsole/v1/dataStreams/pagePerformanceOverTime.jsonplugins/GoogleSearchConsole/v1/dataStreams/pagePerformanceSummary.jsonplugins/GoogleSearchConsole/v1/dataStreams/previousPeriodPagePerformance.jsonplugins/GoogleSearchConsole/v1/dataStreams/previousPeriodPerformanceOverTime.jsonplugins/GoogleSearchConsole/v1/dataStreams/previousPeriodQueriesByPage.jsonplugins/GoogleSearchConsole/v1/dataStreams/queriesByPage.jsonplugins/GoogleSearchConsole/v1/dataStreams/scripts/postRequest/pageDistribution.jsplugins/GoogleSearchConsole/v1/defaultContent/pageOverview.dash.jsonplugins/GoogleSearchConsole/v1/defaultContent/scopes.jsonplugins/GoogleSearchConsole/v1/defaultContent/siteOverview.dash.jsonplugins/GoogleSearchConsole/v1/docs/README.mdplugins/GoogleSearchConsole/v1/indexDefinitions/default.jsonplugins/GoogleSearchConsole/v1/metadata.jsonplugins/GoogleSearchConsole/v1/ui.json
missed from last commit
|
Hey @clarkd , just had a look at the change request - no idea what went on there / how it happened! I'll delete the outer scope blocks from the four affected SQL tiles in |
Yeah give it a go - it might be a quirk with the object picker field not getting properly translated. There was a recent bug that's kind of related so re-exporting might fix it. Presumably those object pickers are just set to use the dashboard variable? |
There was a problem hiding this comment.
Actionable comments posted: 1
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
plugins/GoogleSearchConsole/v1/indexDefinitions/default.json (1)
6-14: 🗄️ Data Integrity & Integration | 🟠 MajorFix the
postRequestScriptcasing mismatch
plugins/GoogleSearchConsole/v1/indexDefinitions/default.jsonis fine (dataStream.name: "pageUrls"andtype.value: "page"). The remaining issue isplugins/GoogleSearchConsole/v1/dataStreams/pageUrLs.json: it points topostRequest/pageUrls.js, but the file on disk ispostRequest/pageUrLs.js. Rename one side so the script resolves on case-sensitive filesystems.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@plugins/GoogleSearchConsole/v1/indexDefinitions/default.json` around lines 6 - 14, The remaining issue is a casing mismatch in the GoogleSearchConsole page URLs stream setup: the data stream definition points to a post-request script name that does not match the actual filename on case-sensitive filesystems. Update the reference in the page URLs stream definition or rename the script file so the `postRequestScript` path and the existing `postRequest/pageUrLs.js` identifier use the same casing consistently.Source: Coding guidelines
♻️ Duplicate comments (1)
plugins/GoogleSearchConsole/v1/dataStreams/pageUrLs.json (1)
16-21: 🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win
rowLimit: 5000may silently truncate discovered pages.This stream backs object discovery over a one-year window with
paging.mode: "none", and the GSC API caps a single call at 25,000 rows (default 1,000). Properties with more than 5,000 pages will have indexing silently truncated, so some page objects won't be created/scopable. This relates to the earlierrowLimitfollow-up you flagged. Consider raising the limit and/or enabling paging for full coverage.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@plugins/GoogleSearchConsole/v1/dataStreams/pageUrLs.json` around lines 16 - 21, The Google Search Console page discovery stream is capped too low, which can truncate discovered pages and miss object creation; update the pageUrLs.json stream configuration to avoid a hard rowLimit of 5000 and instead use a higher safe limit and/or enable paging in the discovery flow so all pages returned by the GSC query can be collected. Adjust the discovery settings in the pageUrLs stream alongside its paging.mode configuration so the page dimension results are fully enumerated rather than silently cut off.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@plugins/GoogleSearchConsole/v1/dataStreams/pageUrLs.json`:
- Line 2: The pageUrls script reference and the actual filename casing do not
match, which can break the stream on case-sensitive filesystems. Update the
script path used by the GoogleSearchConsole data stream to exactly match the
on-disk file name, or rename the file so the `postRequestScript` reference and
the `pageUrls`/`pageUrLs` script name are consistent.
---
Outside diff comments:
In `@plugins/GoogleSearchConsole/v1/indexDefinitions/default.json`:
- Around line 6-14: The remaining issue is a casing mismatch in the
GoogleSearchConsole page URLs stream setup: the data stream definition points to
a post-request script name that does not match the actual filename on
case-sensitive filesystems. Update the reference in the page URLs stream
definition or rename the script file so the `postRequestScript` path and the
existing `postRequest/pageUrLs.js` identifier use the same casing consistently.
---
Duplicate comments:
In `@plugins/GoogleSearchConsole/v1/dataStreams/pageUrLs.json`:
- Around line 16-21: The Google Search Console page discovery stream is capped
too low, which can truncate discovered pages and miss object creation; update
the pageUrLs.json stream configuration to avoid a hard rowLimit of 5000 and
instead use a higher safe limit and/or enable paging in the discovery flow so
all pages returned by the GSC query can be collected. Adjust the discovery
settings in the pageUrLs stream alongside its paging.mode configuration so the
page dimension results are fully enumerated rather than silently cut off.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: ASSERTIVE
Plan: Pro
Run ID: 40073bec-18f9-4f2e-b1c4-7fc38898fa92
📒 Files selected for processing (4)
plugins/GoogleSearchConsole/v1/dataStreams/pageUrLs.jsonplugins/GoogleSearchConsole/v1/defaultContent/pageOverview.dash.jsonplugins/GoogleSearchConsole/v1/defaultContent/siteOverview.dash.jsonplugins/GoogleSearchConsole/v1/indexDefinitions/default.json
💤 Files with no reviewable changes (2)
- plugins/GoogleSearchConsole/v1/defaultContent/siteOverview.dash.json
- plugins/GoogleSearchConsole/v1/defaultContent/pageOverview.dash.json
Yeah I just configured the data streams as normal and set the dashboard variable after saving, I'll have to take a look and see if I can recreate it |
clarkd
left a comment
There was a problem hiding this comment.
Looks great - working well for me. Thanks for the back & forth resolving those comments.
Only minor thing is the logo is not the current GSC logo, a small tweak if you wanted to update it but it's not a blocker.
🧩 Plugin PR Summary📦 Modified Plugins
📋 Results
🔍 Validation Details✅
|
What does this change do?
Adds a new Google Search Console plugin that enables users to connect a GSC property via OAuth 2.0 and visualize search performance data directly within SquaredUp.
The plugin includes the following data streams. along with default dashboards for both site-level and page-level SEO analysis:
Why is it useful?
Google Search Console contains valuable SEO data and is one of the most widely used tools in the industry. It is also currently a gap in the SquaredUp plugin catalog.
This plugin allows users to:
The included dashboards provide an out-of-the-box SEO reporting experience with minimal configuration required.
Testing performed
Validation
Manual testing
Tested against a live Google Search Console property. A Google Pages test site was created and populated with content, with impressions and clicks generated over several weeks to produce representative Search Console data:
https://danielchodgson.github.io/gsc-lcp-test-site/index.html
Verified:
Screenshots
Known limitations / follow-ups
Summary by CodeRabbit