fix(seo): site-wide SEO audit — canonical consistency, titles & structured data#1599
fix(seo): site-wide SEO audit — canonical consistency, titles & structured data#1599popovayoana wants to merge 1 commit into
Conversation
|
|
The latest updates on your projects. Learn more about Vercel for GitHub.
7 Skipped Deployments
|
📝 WalkthroughWalkthroughMigrates all hardcoded SEO and structured-data URLs from ChangesSEO Domain Migration, Schema Updates, and New Page SEO
Estimated code review effort🎯 2 (Simple) | ⏱️ ~15 minutes Possibly related PRs
Suggested reviewers
Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 9
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (6)
site/pages/compare/ckan.tsx (1)
220-233:⚠️ Potential issue | 🟠 Major | ⚡ Quick winOne breadcrumb URL still points to the old host.
This list still contains
https://portaljs.comforHomewhile the updated entries usehttps://www.portaljs.com/*. NormalizeHometoo.Suggested fix
{ name: 'Home', - item: 'https://portaljs.com', + item: 'https://www.portaljs.com', },🤖 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 `@site/pages/compare/ckan.tsx` around lines 220 - 233, In the BreadcrumbJsonLd component within the items array, update the Home breadcrumb item URL from 'https://portaljs.com' to 'https://www.portaljs.com' to maintain consistency with the other breadcrumb entries (Compare and CKAN Classic) which all use the www subdomain. This ensures uniform URL formatting across all breadcrumb items in the navigation structure.site/pages/compare/custom-solution.tsx (1)
220-233:⚠️ Potential issue | 🟠 Major | ⚡ Quick winBreadcrumb migration is incomplete in this block.
Homestill useshttps://portaljs.comwhile other breadcrumb items now usehttps://www.portaljs.com/.... Keep all breadcrumb items on the canonical host.Suggested fix
{ name: 'Home', - item: 'https://portaljs.com', + item: 'https://www.portaljs.com', },🤖 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 `@site/pages/compare/custom-solution.tsx` around lines 220 - 233, The BreadcrumbJsonLd component in the custom-solution.tsx file has an inconsistent URL for the Home breadcrumb item. The Home item uses https://portaljs.com while the Compare and Custom Solution items use https://www.portaljs.com. Update the item URL in the Home breadcrumb object to use https://www.portaljs.com to maintain consistency with the canonical host used in the other breadcrumb items within the same BreadcrumbJsonLd items array.site/pages/compare/arcgis-hub.tsx (1)
220-233:⚠️ Potential issue | 🟠 Major | ⚡ Quick winBreadcrumb hostnames are still inconsistent in this updated section.
CompareandArcGIS Hubwere moved towww, butHomeremainshttps://portaljs.com. This should be unified to the canonical host.Suggested fix
{ name: 'Home', - item: 'https://portaljs.com', + item: 'https://www.portaljs.com', },🤖 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 `@site/pages/compare/arcgis-hub.tsx` around lines 220 - 233, The BreadcrumbJsonLd component in the arcgis-hub.tsx file has inconsistent hostnames across its breadcrumb items. The Home item uses https://portaljs.com without the www subdomain, while the Compare and ArcGIS Hub items use https://www.portaljs.com with the www subdomain. Update the Home item's URL to include www (https://www.portaljs.com) to ensure all breadcrumb items use the same canonical hostname format.site/pages/openmetadata.tsx (1)
61-70:⚠️ Potential issue | 🟠 Major | ⚡ Quick winNormalize the remaining breadcrumb host to
wwwin this updated block.This breadcrumb list is still mixed-domain (
Homeishttps://portaljs.comwhile the updated item ishttps://www.portaljs.com/openmetadata), which undermines the canonical-domain migration in this page’s structured data.Suggested fix
<BreadcrumbJsonLd items={[ { name: 'Home', - item: 'https://portaljs.com', + item: 'https://www.portaljs.com', }, { name: 'OpenMetadata', item: 'https://www.portaljs.com/openmetadata', }, ]} />🤖 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 `@site/pages/openmetadata.tsx` around lines 61 - 70, The BreadcrumbJsonLd component in the openmetadata page has inconsistent domain formats across its items array. The 'Home' breadcrumb item uses 'https://portaljs.com' (without www) while the 'OpenMetadata' item uses 'https://www.portaljs.com/openmetadata' (with www). Update the Home item's URL to include the www prefix ('https://www.portaljs.com') to ensure all breadcrumb items use the normalized canonical domain format.site/pages/compare/index.tsx (1)
99-108:⚠️ Potential issue | 🟠 Major | ⚡ Quick winComplete the breadcrumb migration by updating
Hometowww.This block still emits
https://portaljs.comforHomewhileCompareishttps://www.portaljs.com/compare, leaving mixed canonical signals in JSON-LD.Suggested fix
{ name: 'Home', - item: 'https://portaljs.com', + item: 'https://www.portaljs.com', },🤖 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 `@site/pages/compare/index.tsx` around lines 99 - 108, In the BreadcrumbJsonLd component within the items array, update the Home item's URL from https://portaljs.com to https://www.portaljs.com to maintain consistent canonical domain usage across all breadcrumb items. The Compare item is already using the www subdomain, so the Home item should also use www to ensure uniform domain signals in the JSON-LD output.site/pages/purview.tsx (1)
60-69:⚠️ Potential issue | 🟠 Major | ⚡ Quick winBreadcrumb JSON-LD still mixes non-
wwwandwwwURLs.
Homeremainshttps://portaljs.comwhile the updated page item ishttps://www.portaljs.com/purview. Keep hosts consistent to avoid continuing canonical fragmentation signals.Suggested fix
{ name: 'Home', - item: 'https://portaljs.com', + item: 'https://www.portaljs.com', },🤖 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 `@site/pages/purview.tsx` around lines 60 - 69, The BreadcrumbJsonLd component in purview.tsx has inconsistent URL formats between its items - the Home item URL is https://portaljs.com (without www) while the Microsoft Purview item URL is https://www.portaljs.com/purview (with www). Update the Home item's URL in the BreadcrumbJsonLd items array to match the same domain format as the Microsoft Purview item (use www.portaljs.com instead of portaljs.com) to maintain consistent hosts and avoid canonical fragmentation signals.
🤖 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 `@site/content/case-studies/london-borough-of-hounslow.md`:
- Around line 61-68: The FAQ answer to "How much can a council realistically
save by moving to PortalJS Cloud?" presents a specific "50%" cost reduction
metric without documentation or sourcing. Either locate and add a reference to
the source data (internal migration records, benchmark reports, or documented
metrics) for the 50% savings claim, or modify the phrasing to use qualifier
language such as "approximately 50%", "estimated 50%", or "up to 50%" to reflect
the level of certainty around this figure if exact documentation is not
available.
In
`@site/content/case-studies/open-energy-data-how-ssen-tackled-massive-challenge-portaljs-ckan.md`:
- Around line 61-68: The FAQ section contains unattributed scale metrics
("1TB/day", "10,000+ datasets", "3.8 million endpoints") that cannot be verified
from official SSEN sources, and "3.8 million endpoints" is semantically
confused—it appears to refer to homes/businesses served rather than data
endpoints. To fix this, either add explicit source attribution (e.g., "based on
Datopian's project analysis") to the answer for "Can the platform reliably serve
10,000+ published datasets?", soften claims with conditional language like
"estimates suggest", or replace metrics with figures from official SSEN
documentation. Additionally, clarify in the second FAQ answer what "3.8 million
endpoints" means—either specify it as homes/businesses served or replace with an
accurate count of actual data endpoints, ensuring consistency with how metrics
are defined elsewhere in the content.
In `@site/pages/ckan.tsx`:
- Around line 44-45: The breadcrumb array in the ckan.tsx file contains
inconsistent domain URLs - the CKAN breadcrumb item uses
`https://www.portaljs.com/ckan` with the www prefix, but the Home breadcrumb
item likely uses `https://portaljs.com` without the www prefix. Find the Home
breadcrumb item in the same breadcrumb array and update its URL to
`https://www.portaljs.com` to match the domain format used in the CKAN
breadcrumb item, ensuring consistency across all breadcrumb URLs to avoid
structured-data fragmentation.
In `@site/pages/compare/dataverse.tsx`:
- Around line 228-233: The breadcrumb chain in the BreadcrumbJsonLd array is
inconsistent with domain naming conventions. The Home breadcrumb item in the
array is using https://portaljs.com (without www), while the Compare and
Dataverse breadcrumb items use https://www.portaljs.com (with www). Update the
Home item's URL to include the www subdomain to match the other breadcrumb items
in the same array, ensuring consistent URL formatting throughout the breadcrumb
chain.
In `@site/pages/compare/dkan.tsx`:
- Around line 228-233: The breadcrumb structured data in the breadcrumb list has
inconsistent URL formats. The entries for 'PortalJS' and 'DKAN' use the
canonical host with www subdomain (https://www.portaljs.com), but the Home item
still points to a non-www URL. Update the Home breadcrumb item to use the same
canonical URL format (https://www.portaljs.com) to ensure consistency across all
breadcrumb entries and maintain a single canonical host.
In `@site/pages/compare/opendatasoft.tsx`:
- Around line 203-208: The breadcrumb JSON-LD array in the opendatasoft.tsx file
has a canonical host inconsistency where the Home item uses https://portaljs.com
(without www) while other breadcrumb items like the compare items use
https://www.portaljs.com (with www). Locate the Home breadcrumb item in the same
JSON-LD breadcrumb structure and update its URL to use https://www.portaljs.com
to maintain consistency with the www prefix used in the other breadcrumb items.
In `@site/pages/compare/socrata.tsx`:
- Around line 228-233: The breadcrumb array in the socrata.tsx file has
inconsistent URLs where Compare and Socrata items use the www version of
portaljs.com but the Home item still uses the non-www version. Locate the Home
breadcrumb item in the same breadcrumb array and update its URL from the non-www
format to use https://www.portaljs.com to maintain consistency with the other
breadcrumb items.
In `@site/pages/datahub.tsx`:
- Around line 65-66: The breadcrumb list in the DataHub page contains
inconsistent canonical URLs - the DataHub entry uses the www-prefixed domain
(https://www.portaljs.com/datahub) but the Home entry in the same breadcrumb
list uses a non-www version. Locate the Home breadcrumb item in the same
breadcrumb array and update its URL to use https://www.portaljs.com to match the
format of the DataHub entry, ensuring all breadcrumb entries consistently use
the www-prefixed canonical host.
In `@site/pages/git.tsx`:
- Around line 46-47: The Git breadcrumb item in the structured-data block has
been updated to use the www subdomain (https://www.portaljs.com/git), but the
Home breadcrumb entry in the same block still uses the non-www URL
(https://portaljs.com). Update the Home breadcrumb URL to also use the www
subdomain (https://www.portaljs.com) to maintain consistent hostname
normalization across all breadcrumb entries in this structured-data object.
---
Outside diff comments:
In `@site/pages/compare/arcgis-hub.tsx`:
- Around line 220-233: The BreadcrumbJsonLd component in the arcgis-hub.tsx file
has inconsistent hostnames across its breadcrumb items. The Home item uses
https://portaljs.com without the www subdomain, while the Compare and ArcGIS Hub
items use https://www.portaljs.com with the www subdomain. Update the Home
item's URL to include www (https://www.portaljs.com) to ensure all breadcrumb
items use the same canonical hostname format.
In `@site/pages/compare/ckan.tsx`:
- Around line 220-233: In the BreadcrumbJsonLd component within the items array,
update the Home breadcrumb item URL from 'https://portaljs.com' to
'https://www.portaljs.com' to maintain consistency with the other breadcrumb
entries (Compare and CKAN Classic) which all use the www subdomain. This ensures
uniform URL formatting across all breadcrumb items in the navigation structure.
In `@site/pages/compare/custom-solution.tsx`:
- Around line 220-233: The BreadcrumbJsonLd component in the custom-solution.tsx
file has an inconsistent URL for the Home breadcrumb item. The Home item uses
https://portaljs.com while the Compare and Custom Solution items use
https://www.portaljs.com. Update the item URL in the Home breadcrumb object to
use https://www.portaljs.com to maintain consistency with the canonical host
used in the other breadcrumb items within the same BreadcrumbJsonLd items array.
In `@site/pages/compare/index.tsx`:
- Around line 99-108: In the BreadcrumbJsonLd component within the items array,
update the Home item's URL from https://portaljs.com to https://www.portaljs.com
to maintain consistent canonical domain usage across all breadcrumb items. The
Compare item is already using the www subdomain, so the Home item should also
use www to ensure uniform domain signals in the JSON-LD output.
In `@site/pages/openmetadata.tsx`:
- Around line 61-70: The BreadcrumbJsonLd component in the openmetadata page has
inconsistent domain formats across its items array. The 'Home' breadcrumb item
uses 'https://portaljs.com' (without www) while the 'OpenMetadata' item uses
'https://www.portaljs.com/openmetadata' (with www). Update the Home item's URL
to include the www prefix ('https://www.portaljs.com') to ensure all breadcrumb
items use the normalized canonical domain format.
In `@site/pages/purview.tsx`:
- Around line 60-69: The BreadcrumbJsonLd component in purview.tsx has
inconsistent URL formats between its items - the Home item URL is
https://portaljs.com (without www) while the Microsoft Purview item URL is
https://www.portaljs.com/purview (with www). Update the Home item's URL in the
BreadcrumbJsonLd items array to match the same domain format as the Microsoft
Purview item (use www.portaljs.com instead of portaljs.com) to maintain
consistent hosts and avoid canonical fragmentation signals.
🪄 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: defaults
Review profile: CHILL
Plan: Pro
Run ID: 064e9198-885d-4279-9fdb-e535c89dfce6
📒 Files selected for processing (36)
site/components/schema/BlogStructuredData.tsxsite/components/schema/CaseStudiesStructuredData.tsxsite/components/schema/DataPortalStructuredData.tsxsite/components/schema/FaqStructuredData.tsxsite/components/schema/HomePageStructuredData.tsxsite/content/case-studies/a-global-transport-hub-building-a-shared-open-data-infrastructure-for-30-plus-transport-organizations.mdsite/content/case-studies/eiti-fully-customizable-data-portal-in-minutes.mdsite/content/case-studies/london-borough-of-hounslow.mdsite/content/case-studies/modernizing-lincolnshire-county-council39s-open-data-portal.mdsite/content/case-studies/open-energy-data-how-ssen-tackled-massive-challenge-portaljs-ckan.mdsite/content/case-studies/uae-moei-scalable-platform-government-data-publishing.mdsite/content/config.jssite/next-sitemap.config.jssite/pages/case-studies.tsxsite/pages/ckan.tsxsite/pages/compare/arcgis-hub.tsxsite/pages/compare/ckan.tsxsite/pages/compare/custom-solution.tsxsite/pages/compare/dataverse.tsxsite/pages/compare/dkan.tsxsite/pages/compare/index.tsxsite/pages/compare/opendatasoft.tsxsite/pages/compare/socrata.tsxsite/pages/data-portals.tsxsite/pages/datahub.tsxsite/pages/faq.tsxsite/pages/features.tsxsite/pages/git.tsxsite/pages/learn/index.tsxsite/pages/learn/metadata.tsxsite/pages/openmetadata.tsxsite/pages/opensource.tsxsite/pages/partners.tsxsite/pages/pricing.tsxsite/pages/purview.tsxsite/pages/solutions/open-data.tsx
💤 Files with no reviewable changes (2)
- site/pages/faq.tsx
- site/pages/case-studies.tsx
| - question: 'How much can a council realistically save by moving to PortalJS Cloud?' | ||
| answer: 'The London Borough of Hounslow cut its cloud infrastructure costs by 50% after migrating from self-hosted CKAN on AWS. Savings come from eliminating EC2, RDS, S3, and the associated DevOps overhead — moving to a predictable managed service cost instead.' | ||
| - question: 'Does our IT team still need to manage anything after migration?' | ||
| answer: 'No. PortalJS Cloud handles all infrastructure management, security patches, updates, and uptime monitoring. Your team focuses on data quality and publishing — not platform maintenance.' | ||
| - question: 'Will our existing portal URL and dataset links still work?' | ||
| answer: 'Yes. URL continuity is maintained during migration. Hounslow''s portal remained at data.hounslow.gov.uk and all existing dataset download links stayed fully functional for residents and researchers.' | ||
| - question: 'Is PortalJS Cloud a good fit for other UK local authorities?' | ||
| answer: 'Absolutely. PortalJS Cloud is used by multiple UK councils looking to reduce cost and complexity while maintaining a high-quality, accessible open data service for citizens. The managed model is especially well-suited to smaller authorities without dedicated technical teams.' |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
rg -n "50%|self-hosted CKAN on AWS|EC2|RDS|S3|Hounslow" site/content site/pages site/componentsRepository: datopian/portaljs
Length of output: 14653
Add sourcing or context for the 50% savings claim in the FAQ.
The FAQ presents "50% reduction" as a specific metric without citing the underlying data. The case study describes real infrastructure challenges (EC2, RDS, S3) but does not reference where the 50% figure comes from. Either link to source materials (benchmark reports, migration metrics, internal data) or adjust the phrasing to reflect the nature of the savings (e.g., "approximately 50%" or "estimated 50%") if the exact figure is not documented.
🤖 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 `@site/content/case-studies/london-borough-of-hounslow.md` around lines 61 -
68, The FAQ answer to "How much can a council realistically save by moving to
PortalJS Cloud?" presents a specific "50%" cost reduction metric without
documentation or sourcing. Either locate and add a reference to the source data
(internal migration records, benchmark reports, or documented metrics) for the
50% savings claim, or modify the phrasing to use qualifier language such as
"approximately 50%", "estimated 50%", or "up to 50%" to reflect the level of
certainty around this figure if exact documentation is not available.
| - question: 'How does PortalJS handle 1TB+ of energy data processed every day?' | ||
| answer: 'PortalJS is decoupled from the data ingestion layer. SSEN''s 1TB/day ETL pipeline feeds into CKAN''s datastore, while PortalJS serves as a lightweight, cached frontend — meaning data volume does not affect portal performance or user experience.' | ||
| - question: 'Can the platform reliably serve 10,000+ published datasets?' | ||
| answer: 'Yes. The CKAN backend scales horizontally for large catalogues. SSEN''s 10K+ datasets with 3.8 million endpoints are served reliably through optimised search, faceting, and API access — without degrading response times.' | ||
| - question: 'How is sensitive grid infrastructure data protected?' | ||
| answer: 'Access controls are managed at the CKAN level with role-based permissions. Sensitive operational data can be restricted to authenticated users while public datasets remain openly accessible — all within the same portal, with no additional infrastructure needed.' | ||
| - question: 'How does open energy data support net-zero goals?' | ||
| answer: 'By making energy data openly accessible and machine-readable, SSEN enables researchers, planners, and partners to build evidence-based tools that support the energy transition — from grid capacity planning to EV infrastructure modelling and renewable integration analysis.' |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
rg -n "1TB/day|10,000\+|3\.8 million|endpoints|SSEN" site/content site/pages site/componentsRepository: datopian/portaljs
Length of output: 15485
🏁 Script executed:
head -100 site/content/case-studies/open-energy-data-how-ssen-tackled-massive-challenge-portaljs-ckan.md | cat -nRepository: datopian/portaljs
Length of output: 9564
🌐 Web query:
SSEN energy data portal 1TB daily 10000 datasets 3.8 million endpoints smart meters
💡 Result:
The SSEN (Scottish and Southern Electricity Networks) Distribution Data Portal serves as a centralized platform for stakeholders to access network energy data, including smart meter consumption information [1][2]. Regarding the specific figures mentioned in your query: Smart Meters and Data Volume: As of early 2024, SSEN reported having over 1.8 million smart meters in its north and south licence areas [3]. The company has noted in its privacy planning that it anticipates requesting and receiving data from approximately 3 million smart meters as the rollout progresses [4]. While SSEN processes significant volumes of data—reporting over 170 million smart meter readings per day [3]—there is no official, publicly cited figure of "1TB of data daily" or a specific "10,000 datasets" count linked to the portal in authoritative SSEN documentation. Portal Capabilities: The portal provides access to various datasets to support net-zero planning, including aggregated smart meter half-hourly consumption data at the Low Voltage (LV) feeder level [3][5]. To protect consumer privacy, this data is aggregated to ensure that readings are not representative of fewer than five properties [6][7][8]. The portal supports data access through direct downloads and an Application Programming Interface (API) [5][9]. For the most accurate and up-to-date information regarding available datasets and API documentation, please refer directly to the official SSEN Distribution Data Portal at https://data.ssen.co.uk/ [1].
Citations:
- 1: https://data.ssen.co.uk/
- 2: https://www.ssen.co.uk/our-services/tools-and-maps/
- 3: https://www.ssen.co.uk/news-views/2024/SSEN-first-DNO-publish-smart-meter-half-hourly-consumption-datasets/
- 4: https://www.ssen.co.uk/contentassets/6db6f136d6da41168f2631388377c95d/ssen-smart-meter-data-privacy-plan-v2.3.pdf
- 5: https://www.ssen.co.uk/news-views/2023/SSEN-Distribution-launches-data-portal-to-drive-forward-net-zero-decisions/
- 6: https://data-api.ssen.co.uk/dataset/
- 7: https://opennetzero.org/ssen/smart-meter-lv-feeder-usage
- 8: https://www.opennetzero.org/ssen
- 9: https://www.ssen.co.uk/our-services/tools-and-maps/near-real-time-data-access-nerda-portal/
Clarify and source the scale metrics; resolve semantic confusion.
The FAQ claims lack attribution to official SSEN sources. Web searches of SSEN's public documentation (press releases, data portal specs) do not cite "1TB/day" or "10,000+ datasets"; SSEN instead documents 1.8M smart meters and 170M daily readings. Additionally, line 64 claims "3.8 million endpoints" but line 75 defines 3.8M as homes/businesses served—not data endpoints.
Recommend: Either add source attribution (e.g., "based on Datopian's project analysis"), soften to conditional language ("estimates suggest"), or replace with figures from official SSEN documentation. Clarify what "endpoints" means or use an accurate count.
🤖 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
`@site/content/case-studies/open-energy-data-how-ssen-tackled-massive-challenge-portaljs-ckan.md`
around lines 61 - 68, The FAQ section contains unattributed scale metrics
("1TB/day", "10,000+ datasets", "3.8 million endpoints") that cannot be verified
from official SSEN sources, and "3.8 million endpoints" is semantically
confused—it appears to refer to homes/businesses served rather than data
endpoints. To fix this, either add explicit source attribution (e.g., "based on
Datopian's project analysis") to the answer for "Can the platform reliably serve
10,000+ published datasets?", soften claims with conditional language like
"estimates suggest", or replace metrics with figures from official SSEN
documentation. Additionally, clarify in the second FAQ answer what "3.8 million
endpoints" means—either specify it as homes/businesses served or replace with an
accurate count of actual data endpoints, ensuring consistency with how metrics
are defined elsewhere in the content.
| item: 'https://www.portaljs.com/ckan', | ||
| }, |
There was a problem hiding this comment.
Complete breadcrumb domain migration in this trail.
This breadcrumb now mixes www.portaljs.com and portaljs.com, which keeps structured-data URL fragmentation. Update the Home breadcrumb item in the same array to https://www.portaljs.com as well.
🤖 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 `@site/pages/ckan.tsx` around lines 44 - 45, The breadcrumb array in the
ckan.tsx file contains inconsistent domain URLs - the CKAN breadcrumb item uses
`https://www.portaljs.com/ckan` with the www prefix, but the Home breadcrumb
item likely uses `https://portaljs.com` without the www prefix. Find the Home
breadcrumb item in the same breadcrumb array and update its URL to
`https://www.portaljs.com` to match the domain format used in the CKAN
breadcrumb item, ensuring consistency across all breadcrumb URLs to avoid
structured-data fragmentation.
| item: 'https://www.portaljs.com/compare', | ||
| }, | ||
| { | ||
| name: 'Dataverse', | ||
| item: 'https://portaljs.com/compare/dataverse', | ||
| item: 'https://www.portaljs.com/compare/dataverse', | ||
| } |
There was a problem hiding this comment.
This breadcrumb chain still mixes www and non-www.
Compare and Dataverse now use www, but Home in the same BreadcrumbJsonLd array is still https://portaljs.com. Please update Home to https://www.portaljs.com.
🤖 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 `@site/pages/compare/dataverse.tsx` around lines 228 - 233, The breadcrumb
chain in the BreadcrumbJsonLd array is inconsistent with domain naming
conventions. The Home breadcrumb item in the array is using https://portaljs.com
(without www), while the Compare and Dataverse breadcrumb items use
https://www.portaljs.com (with www). Update the Home item's URL to include the
www subdomain to match the other breadcrumb items in the same array, ensuring
consistent URL formatting throughout the breadcrumb chain.
| item: 'https://www.portaljs.com/compare', | ||
| }, | ||
| { | ||
| name: 'DKAN', | ||
| item: 'https://portaljs.com/compare/dkan', | ||
| item: 'https://www.portaljs.com/compare/dkan', | ||
| } |
There was a problem hiding this comment.
Breadcrumb structured data is only partially migrated.
The updated entries use https://www.portaljs.com, but Home in this same breadcrumb list still points to non-www. Normalize the Home item too to keep one canonical host.
🤖 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 `@site/pages/compare/dkan.tsx` around lines 228 - 233, The breadcrumb
structured data in the breadcrumb list has inconsistent URL formats. The entries
for 'PortalJS' and 'DKAN' use the canonical host with www subdomain
(https://www.portaljs.com), but the Home item still points to a non-www URL.
Update the Home breadcrumb item to use the same canonical URL format
(https://www.portaljs.com) to ensure consistency across all breadcrumb entries
and maintain a single canonical host.
| item: 'https://www.portaljs.com/compare', | ||
| }, | ||
| { | ||
| name: 'OpenDataSoft', | ||
| item: 'https://portaljs.com/compare/opendatasoft', | ||
| item: 'https://www.portaljs.com/compare/opendatasoft', | ||
| } |
There was a problem hiding this comment.
Canonical host inconsistency remains in breadcrumb JSON-LD.
These updated breadcrumb items now use www, but the Home item in the same array still uses https://portaljs.com. Please migrate Home to https://www.portaljs.com.
🤖 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 `@site/pages/compare/opendatasoft.tsx` around lines 203 - 208, The breadcrumb
JSON-LD array in the opendatasoft.tsx file has a canonical host inconsistency
where the Home item uses https://portaljs.com (without www) while other
breadcrumb items like the compare items use https://www.portaljs.com (with www).
Locate the Home breadcrumb item in the same JSON-LD breadcrumb structure and
update its URL to use https://www.portaljs.com to maintain consistency with the
www prefix used in the other breadcrumb items.
| item: 'https://www.portaljs.com/compare', | ||
| }, | ||
| { | ||
| name: 'Socrata', | ||
| item: 'https://portaljs.com/compare/socrata', | ||
| item: 'https://www.portaljs.com/compare/socrata', | ||
| } |
There was a problem hiding this comment.
Breadcrumb migration is incomplete in this page.
Compare and Socrata now point to https://www.portaljs.com, but Home in the same breadcrumb array is still non-www. Update that Home URL to match.
🤖 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 `@site/pages/compare/socrata.tsx` around lines 228 - 233, The breadcrumb array
in the socrata.tsx file has inconsistent URLs where Compare and Socrata items
use the www version of portaljs.com but the Home item still uses the non-www
version. Locate the Home breadcrumb item in the same breadcrumb array and update
its URL from the non-www format to use https://www.portaljs.com to maintain
consistency with the other breadcrumb items.
| item: 'https://www.portaljs.com/datahub', | ||
| }, |
There was a problem hiding this comment.
Breadcrumb still has mixed canonical hosts.
The updated DataHub breadcrumb entry is www, but the Home entry in this same list is still non-www. Please align both to https://www.portaljs.com to avoid inconsistent structured-data URLs.
🤖 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 `@site/pages/datahub.tsx` around lines 65 - 66, The breadcrumb list in the
DataHub page contains inconsistent canonical URLs - the DataHub entry uses the
www-prefixed domain (https://www.portaljs.com/datahub) but the Home entry in the
same breadcrumb list uses a non-www version. Locate the Home breadcrumb item in
the same breadcrumb array and update its URL to use https://www.portaljs.com to
match the format of the DataHub entry, ensuring all breadcrumb entries
consistently use the www-prefixed canonical host.
…ured data - Standardise all canonical and OG URLs to https://www.portaljs.com (www) Previously ~18 pages used non-www or portaljs.org variants, causing canonical fragmentation across the sitemap and structured data. - Fix sitemap base URL to https://www.portaljs.com - Fix global defaults in content/config.js: - Twitter handle @datopian → @PortalJS_ (consistent with all schema components) - Add og:site_name 'PortalJS' to default OG config - Fix default OG image URL to www - Remove duplicate SEO injection in case-studies.tsx, data-portals.tsx, and faq.tsx — each had both an inline generateNextSeo AND a structured data component doing the same thing, with conflicting canonical values - Fix stale schema components (CaseStudiesStructuredData, DataPortalStructuredData): - Title/description were placeholder-quality ("See our client stories.") - Canonical and breadcrumbs pointed to /showcase (URL no longer exists) - Corrected to /case-studies and /data-portals respectively - Improve thin page titles across Blog, FAQ, Pricing, Case Studies, Data Portals pages (bare words like "FAQ" or "Blog" → full descriptive titles) - Add complete SEO (title, description, canonical, OG, Twitter) to pages that had none: features.tsx, solutions/open-data.tsx, opensource.tsx - Fix solutions/open-data.tsx using HomePageStructuredData (wrong — injected homepage canonical); replaced with page-specific Head + BreadcrumbJsonLd Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
a1dc723 to
b0fc081
Compare
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
site/pages/openmetadata.tsx (1)
61-70:⚠️ Potential issue | 🟠 Major | ⚡ Quick winFix remaining mixed-domain breadcrumb URL
Line 65 still uses
https://portaljs.comfor the Home breadcrumb item while this page now canonicalizes tohttps://www.portaljs.com/openmetadata. That leaves structured data inconsistent and can reintroduce canonical fragmentation.Suggested patch
<BreadcrumbJsonLd items={[ { name: 'Home', - item: 'https://portaljs.com', + item: 'https://www.portaljs.com', }, { name: 'OpenMetadata', item: 'https://www.portaljs.com/openmetadata', }, ]} />🤖 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 `@site/pages/openmetadata.tsx` around lines 61 - 70, The BreadcrumbJsonLd component in the openmetadata.tsx file has inconsistent domain URLs that cause canonical fragmentation. The Home breadcrumb item uses the URL https://portaljs.com (without www) while the page canonicalizes to https://www.portaljs.com/openmetadata (with www). Update the item property in the Home breadcrumb object within the BreadcrumbJsonLd items array to use https://www.portaljs.com to maintain consistency with the page's canonical URL.
🤖 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.
Outside diff comments:
In `@site/pages/openmetadata.tsx`:
- Around line 61-70: The BreadcrumbJsonLd component in the openmetadata.tsx file
has inconsistent domain URLs that cause canonical fragmentation. The Home
breadcrumb item uses the URL https://portaljs.com (without www) while the page
canonicalizes to https://www.portaljs.com/openmetadata (with www). Update the
item property in the Home breadcrumb object within the BreadcrumbJsonLd items
array to use https://www.portaljs.com to maintain consistency with the page's
canonical URL.
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: 1c7b9bff-be25-4cf5-9e2f-0559c415291a
📒 Files selected for processing (30)
site/components/schema/BlogStructuredData.tsxsite/components/schema/CaseStudiesStructuredData.tsxsite/components/schema/DataPortalStructuredData.tsxsite/components/schema/FaqStructuredData.tsxsite/components/schema/HomePageStructuredData.tsxsite/content/config.jssite/next-sitemap.config.jssite/pages/case-studies.tsxsite/pages/ckan.tsxsite/pages/compare/arcgis-hub.tsxsite/pages/compare/ckan.tsxsite/pages/compare/custom-solution.tsxsite/pages/compare/dataverse.tsxsite/pages/compare/dkan.tsxsite/pages/compare/index.tsxsite/pages/compare/opendatasoft.tsxsite/pages/compare/socrata.tsxsite/pages/data-portals.tsxsite/pages/datahub.tsxsite/pages/faq.tsxsite/pages/features.tsxsite/pages/git.tsxsite/pages/learn/index.tsxsite/pages/learn/metadata.tsxsite/pages/openmetadata.tsxsite/pages/opensource.tsxsite/pages/partners.tsxsite/pages/pricing.tsxsite/pages/purview.tsxsite/pages/solutions/open-data.tsx
💤 Files with no reviewable changes (2)
- site/pages/faq.tsx
- site/pages/case-studies.tsx
✅ Files skipped from review due to trivial changes (7)
- site/next-sitemap.config.js
- site/components/schema/HomePageStructuredData.tsx
- site/components/schema/FaqStructuredData.tsx
- site/pages/compare/dkan.tsx
- site/pages/datahub.tsx
- site/pages/compare/opendatasoft.tsx
- site/pages/opensource.tsx
🚧 Files skipped from review as they are similar to previous changes (20)
- site/pages/learn/index.tsx
- site/pages/solutions/open-data.tsx
- site/pages/learn/metadata.tsx
- site/pages/compare/index.tsx
- site/pages/partners.tsx
- site/pages/pricing.tsx
- site/pages/compare/ckan.tsx
- site/components/schema/DataPortalStructuredData.tsx
- site/pages/compare/custom-solution.tsx
- site/pages/git.tsx
- site/content/config.js
- site/pages/features.tsx
- site/components/schema/CaseStudiesStructuredData.tsx
- site/pages/purview.tsx
- site/pages/compare/arcgis-hub.tsx
- site/pages/compare/dataverse.tsx
- site/pages/data-portals.tsx
- site/pages/compare/socrata.tsx
- site/pages/ckan.tsx
- site/components/schema/BlogStructuredData.tsx
Summary
Site-wide SEO audit addressing canonical fragmentation, duplicate meta injection, stale structured data, and missing SEO on several pages. No UI or logic changes — purely meta/SEO layer.
What was broken
portaljs.org(not the real domain), 18 pages used non-wwwportaljs.comwhile structured data components usedwww.portaljs.com— Google sees these as different URLscase-studies.tsx,data-portals.tsx, andfaq.tsxeach had both an inlinegenerateNextSeoAND a structured data component injecting conflicting canonicals into the same pageCaseStudiesStructuredDataandDataPortalStructuredDataboth pointed to/showcase(URL no longer exists), with placeholder-quality titles ("See our client stories.")features.tsxandsolutions/open-data.tsxhad no title/description/canonical at all;solutions/open-data.tsxwas usingHomePageStructuredData(homepage canonical on a different page)@datopian(not the product handle), noog:site_name, non-www OG image URLChanges
next-sitemap.config.jshttps://www.portaljs.comcontent/config.js@datopian→@PortalJS_; addog:site_name; fix OG image URLCaseStudiesStructuredData/showcase→/case-studies; proper title + descriptionDataPortalStructuredData/showcase→/data-portals; proper title + descriptionBlogStructuredData,FaqStructuredData,HomePageStructuredDatacase-studies.tsx,data-portals.tsx,faq.tsxgenerateNextSeo(schema components handle it)features.tsxsolutions/open-data.tsxHomePageStructuredDatawith page-specific SEO + correct breadcrumbopensource.tsxportaljs.org→www.portaljs.com; add canonical + full OGcompare/*,git,ckan,openmetadata,purview,datahub,partners,learn/*)No conflicts with open PRs
feat/case-study-layout-redesign) — toucheslayouts/casestudy.tsxonly, no overlapfeat/case-study-faq-content) — touches.mdcontent files only, no overlapTest plan
next build)<link rel="canonical">tags appear on/case-studies,/data-portals,/faq/case-studies,/faqfor valid structured data/solutions/open-datacanonical ishttps://www.portaljs.com/solutions/open-data(not the homepage)/featuresnow has a title tag and canonical@PortalJS_not@datopian🤖 Generated with Claude Code
Summary by CodeRabbit
Release Notes