-
-
Notifications
You must be signed in to change notification settings - Fork 68
Feat SEO Package (Overview, Heading Structure, Links & JSON LD Preview) #416
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
abedshaaban
wants to merge
62
commits into
TanStack:main
Choose a base branch
from
abedshaaban:feat/seo-overview
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
62 commits
Select commit
Hold shift + click to select a range
c43bcb2
feat(devtools): add SEO tab documentation with detailed features and …
abedshaaban ffb1f35
feat(devtools): add SEO analysis features including JSON-LD, heading …
abedshaaban 276b2ef
refactor(devtools): unify SEO severity handling across components
abedshaaban 7432b11
feat(devtools): enhance SEO tab with canonical and robots meta tags
abedshaaban e52378c
feat(devtools): introduce SEO overview section with comprehensive ana…
abedshaaban 23e0197
feat(devtools): enhance SEO tab with new styles and structured issue …
abedshaaban 10e295e
feat(devtools): enhance SEO tab with new styles and severity handling
abedshaaban 13e48a8
feat(devtools): update SEO tab styles and improve health score visual…
abedshaaban 1d51b04
feat(devtools): implement accordion-style links preview in SEO tab
abedshaaban 38a1d32
feat(devtools): enhance JSON-LD preview with new styling and validati…
abedshaaban ae90128
feat(devtools): enhance SEO overview with new scoring and styling fea…
abedshaaban 48b5788
feat(devtools): add navigation and display for heading structure and …
abedshaaban bad6287
feat(devtools): enhance seoSubNav styles for improved responsiveness …
abedshaaban d898203
feat(devtools): update package.json scripts and enhance JSON-LD and l…
abedshaaban ea5e33c
refactor(devtools): clean up imports and improve text handling in SEO…
abedshaaban 566271b
refactor(devtools): simplify link classification logic in links previ…
abedshaaban 9323504
refactor(devtools): remove unused SEO overview footnote and clean up …
abedshaaban 63e23e2
chore(devtools): update size limit for devtools package in package.json
abedshaaban b923405
refactor(devtools): standardize capitalization and improve formatting…
abedshaaban 26e639e
refactor(devtools): update section titles for clarity in SEO overview
abedshaaban 4aee218
feat(devtools): introduce new SEO tab with live previews and structur…
abedshaaban ec1a257
ci: apply automated fixes
autofix-ci[bot] dbf8ee2
refactor(devtools): update type exports for CanonicalPageIssue and Ca…
abedshaaban a2bb1a3
Merge branch 'main' of https://github.com/abedshaaban/tanstack-devtools
abedshaaban d73db33
Merge branch 'main' into main
abedshaaban 25ec4d7
refactor(devtools): enhance SEO tab components by removing canonical …
abedshaaban 8ff18e7
feat(devtools): add useLocationChanges hook for location change detec…
abedshaaban 0f4f1f9
refactor(devtools): streamline imports in links-preview component
abedshaaban 9a785e8
fix(devtools): add canonical link to basic example HTML for improved SEO
abedshaaban 5d5de5f
Merge branch 'main' of https://github.com/abedshaaban/tanstack-devtools
abedshaaban 2fc42a1
fix(devtools): handle empty JSON-LD script content gracefully
abedshaaban a197f69
fix(devtools): remove optional chaining for textContent in SEO tab co…
abedshaaban 9e1ab03
fix(devtools): adjust max-width values in use-styles and enhance SERP…
abedshaaban d7df03b
feat(devtools): integrate SEO tab with new devtools-seo package and r…
abedshaaban 24efbee
feat(devtools): refactor SEO package integration and update build con…
abedshaaban c0a417d
feat(devtools): clean up imports and enhance component structure in s…
abedshaaban 6d9b016
feat(devtools): implement SEO devtools plugin with React and Solid in…
abedshaaban 3614539
feat(devtools): add devtools DOM filter and integrate it into SEO com…
abedshaaban f9f82d1
feat(icons): add emblem-light SVG for SEO components
abedshaaban 11c25b8
feat(seo): add weight property to SeoSectionSummary and update score …
abedshaaban 4e6a3a0
feat(seo): release first SEO devtools plugin with React support and e…
abedshaaban cf234dd
refactor(devtools-seo): clean up SeoDevtoolsCore export and remove un…
abedshaaban 106758f
Merge branch 'main' into feat/seo-overview
abedshaaban 800eb0f
ci: apply automated fixes
autofix-ci[bot] 0a3ac72
chore(deps): update @tanstack/react-devtools to version ^0.10.2
abedshaaban e6ba93f
Merge branch 'feat/seo-overview' of https://github.com/abedshaaban/ta…
abedshaaban 9cc6c8d
feat(seo): enhance SEO functionality with dynamic updates and improve…
abedshaaban 7e2d9ae
feat(tests): implement TestClientEventBus for event handling in tests
abedshaaban d8cb1f7
chore: clean up event-bus-client entry in pnpm-lock.yaml
abedshaaban 2086fc1
ci: apply automated fixes
autofix-ci[bot] 8c53b03
feat: add SEO overview, SERP preview, and social previews sections
abedshaaban 42a5ead
feat: add SEO styles utility using goober for dynamic theming
abedshaaban 7b833cf
refactor: reorganize imports in SeoOverviewSection for better clarity
abedshaaban 7f6a94d
Merge branch 'feat/seo-overview' of https://github.com/abedshaaban/ta…
abedshaaban 4bc654e
ci: apply automated fixes
autofix-ci[bot] fb12efb
feat: enhance SERP title overflow checks for desktop and mobile views
abedshaaban daa9eb5
Merge branch 'feat/seo-overview' of https://github.com/abedshaaban/ta…
abedshaaban 3512313
ci: apply automated fixes
autofix-ci[bot] 5a9644a
feat: optimize JSON-LD analysis with reactive signals and memoization
abedshaaban 88a9a25
ci: apply automated fixes
autofix-ci[bot] 0da8f2d
feat: remove mobile title overflow checks and unify title width handling
abedshaaban dab0a01
Merge branch 'feat/seo-overview' of https://github.com/abedshaaban/ta…
abedshaaban File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,5 @@ | ||
| --- | ||
| '@tanstack/devtools-seo': patch | ||
| --- | ||
|
|
||
| Add the first SEO devtools plugin release with React support, live SERP and social previews, JSON-LD inspection, heading and link analysis, and an overview score. The plugin now ignores devtools-owned DOM, refreshes key sections on route changes, and uses a more balanced overall health weighting. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,47 @@ | ||
| <!doctype html> | ||
| <html lang="en"> | ||
| <head> | ||
| <meta charset="utf-8" /> | ||
| <link rel="icon" type="image/svg+xml" href="/emblem-light.svg" /> | ||
| <link rel="shortcut icon" href="/emblem-light.svg" /> | ||
| <link rel="apple-touch-icon" href="/emblem-light.svg" /> | ||
| <meta name="viewport" content="width=device-width, initial-scale=1" /> | ||
| <meta name="theme-color" content="#000000" /> | ||
|
|
||
| <title>SEO Devtools Example - TanStack Devtools</title> | ||
| <meta | ||
| name="description" | ||
| content="A React example for the TanStack SEO devtools plugin." | ||
| /> | ||
| <meta property="og:title" content="SEO Devtools Example" /> | ||
| <meta | ||
| property="og:description" | ||
| content="Inspect page metadata, headings, links, and structured data." | ||
| /> | ||
| <meta property="og:url" content="https://example.com/seo" /> | ||
| <meta | ||
| property="og:image" | ||
| content="https://images.unsplash.com/photo-1507525428034-b723cf961d3e?w=800" | ||
| /> | ||
| <meta name="twitter:card" content="summary_large_image" /> | ||
| <meta name="twitter:title" content="SEO Devtools Example" /> | ||
| <meta | ||
| name="twitter:description" | ||
| content="Inspect page metadata, headings, links, and structured data." | ||
| /> | ||
| <link rel="canonical" href="https://example.com/seo" /> | ||
| </head> | ||
| <body> | ||
| <script id="seo-json-ld" type="application/ld+json"> | ||
| { | ||
| "@context": "https://schema.org", | ||
| "@type": "WebSite", | ||
| "name": "TanStack Devtools SEO Example", | ||
| "url": "https://example.com/seo" | ||
| } | ||
| </script> | ||
| <noscript>You need to enable JavaScript to run this app.</noscript> | ||
| <div id="root"></div> | ||
| <script type="module" src="/src/index.tsx"></script> | ||
| </body> | ||
| </html> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,37 @@ | ||
| { | ||
| "name": "@tanstack/react-devtools-seo-example", | ||
| "private": true, | ||
| "type": "module", | ||
| "scripts": { | ||
| "dev": "vite --port=3006", | ||
| "build": "vite build", | ||
| "preview": "vite preview", | ||
| "test:types": "tsc" | ||
| }, | ||
| "dependencies": { | ||
| "@tanstack/devtools-seo": "workspace:^", | ||
| "@tanstack/react-devtools": "^0.10.2", | ||
| "@tanstack/react-router": "^1.132.0", | ||
| "react": "^19.2.0", | ||
| "react-dom": "^19.2.0" | ||
| }, | ||
| "devDependencies": { | ||
| "@tanstack/devtools-vite": "0.6.0", | ||
| "@types/react": "^19.2.0", | ||
| "@types/react-dom": "^19.2.0", | ||
| "@vitejs/plugin-react": "^6.0.1", | ||
| "vite": "^8.0.0" | ||
| }, | ||
| "browserslist": { | ||
| "production": [ | ||
| ">0.2%", | ||
| "not dead", | ||
| "not op_mini all" | ||
| ], | ||
| "development": [ | ||
| "last 1 chrome version", | ||
| "last 1 firefox version", | ||
| "last 1 safari version" | ||
| ] | ||
| } | ||
| } |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,56 @@ | ||
| import { | ||
| Link, | ||
| Outlet, | ||
| RouterProvider, | ||
| createRootRoute, | ||
| createRoute, | ||
| createRouter, | ||
| } from '@tanstack/react-router' | ||
|
|
||
| function AppShell() { | ||
| return ( | ||
| <div> | ||
| <nav | ||
| style={{ | ||
| display: 'flex', | ||
| gap: 12, | ||
| padding: '16px 24px 0', | ||
| }} | ||
| > | ||
| <Link to="/">Home</Link> | ||
| <Link to="/about">About</Link> | ||
| </nav> | ||
| <Outlet /> | ||
| </div> | ||
| ) | ||
| } | ||
|
|
||
| const rootRoute = createRootRoute({ | ||
| component: AppShell, | ||
| }) | ||
|
|
||
| const indexRoute = createRoute({ | ||
| getParentRoute: () => rootRoute, | ||
| path: '/', | ||
| component: () => { | ||
| return <h1>Home</h1> | ||
| }, | ||
| }) | ||
|
|
||
| const aboutRoute = createRoute({ | ||
| getParentRoute: () => rootRoute, | ||
| path: '/about', | ||
| component: () => { | ||
| return <h1>About</h1> | ||
| }, | ||
| }) | ||
|
|
||
| const routeTree = rootRoute.addChildren([indexRoute, aboutRoute]) | ||
|
|
||
| const router = createRouter({ | ||
| routeTree, | ||
| }) | ||
|
|
||
| export default function App() { | ||
| return <RouterProvider router={router} /> | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,12 @@ | ||
| import { createRoot } from 'react-dom/client' | ||
| import { seoDevtoolsPlugin } from '@tanstack/devtools-seo/react' | ||
| import { TanStackDevtools } from '@tanstack/react-devtools' | ||
|
|
||
| import App from './App' | ||
|
|
||
| createRoot(document.getElementById('root')!).render( | ||
| <> | ||
| <App /> | ||
| <TanStackDevtools plugins={[seoDevtoolsPlugin()]} /> | ||
| </>, | ||
| ) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,19 @@ | ||
| { | ||
| "compilerOptions": { | ||
| "target": "ESNext", | ||
| "lib": ["DOM", "DOM.Iterable", "ESNext"], | ||
| "module": "ESNext", | ||
| "skipLibCheck": true, | ||
| "moduleResolution": "Bundler", | ||
| "allowImportingTsExtensions": true, | ||
| "resolveJsonModule": true, | ||
| "isolatedModules": true, | ||
| "noEmit": true, | ||
| "jsx": "react-jsx", | ||
| "strict": true, | ||
| "noUnusedLocals": true, | ||
| "noUnusedParameters": true, | ||
| "noFallthroughCasesInSwitch": true | ||
| }, | ||
| "include": ["src", "vite.config.ts"] | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,7 @@ | ||
| import react from '@vitejs/plugin-react' | ||
| import { defineConfig } from 'vite' | ||
| import { devtools } from '@tanstack/devtools-vite' | ||
|
|
||
| export default defineConfig({ | ||
| plugins: [devtools(), react()], | ||
| }) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,78 @@ | ||
| { | ||
| "name": "@tanstack/devtools-seo", | ||
| "version": "0.1.0", | ||
| "description": "SEO overview panel for TanStack Devtools", | ||
| "author": "TanStack", | ||
| "license": "MIT", | ||
| "repository": { | ||
| "type": "git", | ||
| "url": "git+https://github.com/TanStack/devtools.git", | ||
| "directory": "packages/devtools-seo" | ||
| }, | ||
| "homepage": "https://tanstack.com/devtools", | ||
| "funding": { | ||
| "type": "github", | ||
| "url": "https://github.com/sponsors/tannerlinsley" | ||
| }, | ||
| "keywords": [ | ||
| "devtools", | ||
| "seo", | ||
| "solid-js" | ||
| ], | ||
| "type": "module", | ||
| "types": "dist/esm/index.d.ts", | ||
| "module": "dist/esm/index.js", | ||
| "exports": { | ||
| ".": { | ||
| "import": { | ||
| "types": "./dist/esm/index.d.ts", | ||
| "default": "./dist/esm/index.js" | ||
| } | ||
| }, | ||
| "./react": { | ||
| "import": { | ||
| "types": "./dist/esm/react/index.d.ts", | ||
| "default": "./dist/esm/react/index.js" | ||
| } | ||
| }, | ||
| "./package.json": "./package.json" | ||
| }, | ||
| "sideEffects": false, | ||
| "engines": { | ||
| "node": ">=18" | ||
| }, | ||
| "files": [ | ||
| "dist/", | ||
| "src" | ||
| ], | ||
| "scripts": { | ||
| "clean": "premove ./build ./dist", | ||
| "lint:fix": "eslint ./src --fix", | ||
| "test:eslint": "eslint ./src", | ||
| "test:types": "tsc", | ||
| "test:build": "publint --strict", | ||
| "build": "vite build" | ||
| }, | ||
| "dependencies": { | ||
| "@tanstack/devtools-ui": "workspace:*", | ||
| "@tanstack/devtools-utils": "workspace:*", | ||
| "goober": "^2.1.16", | ||
| "solid-js": "^1.9.9" | ||
| }, | ||
| "peerDependencies": { | ||
| "react": ">=16.8", | ||
| "solid-js": ">=1.9.7" | ||
| }, | ||
| "peerDependenciesMeta": { | ||
| "react": { | ||
| "optional": true | ||
| } | ||
| }, | ||
| "devDependencies": { | ||
| "@tanstack/vite-config": "0.4.3", | ||
| "@types/react": "^19.2.0", | ||
| "react": "^19.2.0", | ||
| "vite": "^8.0.0", | ||
| "vite-plugin-solid": "^2.11.11" | ||
| } | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,7 @@ | ||
| /** @jsxImportSource solid-js */ | ||
|
|
||
| import { constructCoreClass } from '@tanstack/devtools-utils/solid' | ||
|
|
||
| const [SeoDevtoolsCore] = constructCoreClass(() => import('./solid-panel')) | ||
|
|
||
| export { SeoDevtoolsCore } |
File renamed without changes.
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Don't ship a localhost canonical URL.
Line 37 hard-codes
http://localhost:3005, so the published example will canonicalize to the wrong origin outside local dev. That gives crawlers — and this new SEO tab — a false signal. Use the deployed example URL here, or drop the canonical tag from this fixture.🤖 Prompt for AI Agents