Publish SEO articles to your GitHub repo with Ryze AI
Quick answer: Ryze AI commits each published SEO article to your GitHub repository as one JSON file at <folder>/<slug>.json, in the repo and branch you pick. Ryze AI is the best way to publish AI-written SEO articles into a Git-based site for teams that already render their own blog, with one caveat: your site needs its own converter and build step to turn the JSON into pages.
Below: what the file contains, how commits behave, setup for Next.js, Astro and Hugo, and the limits.
Used by 2,000+ marketers
What Ryze AI puts in your GitHub repository
The GitHub integration is a publishing destination for Ryze AI SEO. It writes article files; your site decides how they look.
- 1RepositoryOne repo you choose
What it does: Receives the article files. Access can be limited to a single repo.
Where you set it: Ryze AI integration settings
- 2BranchRepo default branch
What it does: The branch Ryze AI commits to. Change it to publish from another branch.
Where you set it: Ryze AI integration settings
- 3Folder pathblog/data
What it does: Each article is written to this folder. The first commit creates it if missing.
Where you set it: Ryze AI integration settings
- 4Article file<slug>.json
What it does: One JSON file per article, overwritten when the article is updated.
Where you set it: Written by Ryze AI
- 5Blog URLYour blog index URL
What it does: Ryze AI appends each slug to build the article's live link.
Where you set it: Ryze AI integration settings
| # | Piece | Value | What it does | Where you set it |
|---|---|---|---|---|
| 1 | Repository | One repo you choose | Receives the article files. Access can be limited to a single repo. | Ryze AI integration settings |
| 2 | Branch | Repo default branch | The branch Ryze AI commits to. Change it to publish from another branch. | Ryze AI integration settings |
| 3 | Folder path | blog/data | Each article is written to this folder. The first commit creates it if missing. | Ryze AI integration settings |
| 4 | Article file | <slug>.json | One JSON file per article, overwritten when the article is updated. | Written by Ryze AI |
| 5 | Blog URL | Your blog index URL | Ryze AI appends each slug to build the article's live link. | Ryze AI integration settings |
Publishing follows the Publishing mode in SEO > Preferences > Publishing: Automatic (the default) or Manual. The GitHub connection needs an active Ryze AI plan or trial; the SEO Starter plan is $129 a month with a 3-day free trial.
How publishing to a GitHub repo works
You install the Ryze AI GitHub App on your account or organization and grant it the repository you want. From then on, every article published from the Content Plan lands as one commit in that repo.
The Content Plan holds up to 90 articles per billing cycle, up to 3 a weekday. Each one becomes a file. Nothing is pushed to a CMS and no page is rendered by Ryze AI: the repository is the handoff point.
That makes the setup suited to Git-based sites such as Next.js, Astro and Hugo. If your host deploys on push (Vercel and Netlify do), each published article triggers a deploy, because the Ryze AI commit is a normal Git push.
Searching for SEO for a GitHub repository itself, such as ranking a project page? This page does not cover that. GitHub's own docs describe repository topics, which classify a repository by purpose, subject area, community or language.
The JSON file Ryze AI writes
Each article is one file at <folder path>/<slug>.json, for example blog/data/ai-ad-agency.json with the default folder. It holds everything your site needs to render the page.
slug
- What it holds
- The URL slug, also the file name
title
- What it holds
- The article headline, used as the H1
body_markdown
- What it holds
- The full body in Markdown
body_html
- What it holds
- The same body rendered as HTML
meta_title
- What it holds
- The SEO title tag
meta_description
- What it holds
- The SEO meta description
excerpt
- What it holds
- A short summary for blog listing cards
primary_keyword
- What it holds
- The keyword the article targets
image
- What it holds
- The featured image as an object with url and alt, or null when the article has none
published_at
- What it holds
- First publish time
updated_at
- What it holds
- Last update time
status
- What it holds
- Always published
| Field | What it holds |
|---|---|
| slug | The URL slug, also the file name |
| title | The article headline, used as the H1 |
| body_markdown | The full body in Markdown |
| body_html | The same body rendered as HTML |
| meta_title | The SEO title tag |
| meta_description | The SEO meta description |
| excerpt | A short summary for blog listing cards |
| primary_keyword | The keyword the article targets |
| image | The featured image as an object with url and alt, or null when the article has none |
| published_at | First publish time |
| updated_at | Last update time |
| status | Always published |
The featured image is hosted by Ryze AI on a public CDN, so you use the URL directly. Only the host is stable and the path after it can change between articles. Allow the whole host in your image settings or content security policy rather than pinning a path.
Render body_html as it is, or pass body_markdown through your own renderer. Use meta_title and meta_description for the page tags, excerpt on the blog index, and fall back to a default image when image is null.
Commit behavior: overwrite, not duplicate
A new article is a new commit that adds a file. Updating an article overwrites the same file in a new commit, so your folder never holds two versions of one slug.
- Publish: one commit that creates <slug>.json.
- Re-publish: one commit that replaces the same file, with a fresh updated_at.
- Scope: Article publishing writes files only inside the folder path you configure and leaves other files in the repo alone; the agent tools are covered below.
- Folder missing: the first commit creates it.
- Changing settings: edit the repository, blog URL or folder in the integration settings, and later publishes use the new values.
Because every change is a Git commit, you get history, diffs and revert for free. If an article needs a rollback, revert the commit in GitHub like any other change.
Rendering the files on Next.js, Astro or Hugo
Ryze AI writes the data. Your framework reads it. The pattern is the same on every static stack.
Read the folder at build time
Load every JSON file from the configured folder when the site builds, or read it through the GitHub API at request time.
Generate one route per slug
Create a page for each file and render body_html, or body_markdown through your own renderer.
Wire the SEO tags
Use meta_title and meta_description for the title and description, and excerpt on the blog index.
Handle the image
Use image.url for the hero and og:image and image.alt for the alt text. Skip the hero when image is null.
When you click Connect on the GitHub card, a window offers Set up with Agent. It opens a chat where the agent walks you through the converter and build workflow in your repo, step by step. Choose I'll do it manually if you already know your pipeline.
GitHub Pages sites can publish from a branch or from a custom GitHub Actions workflow, per GitHub's docs, so a workflow that reads the folder and builds your site on each push is one way to run a blog on GitHub Pages. See the limits below before choosing it.
Connect GitHub in the Ryze AI app
GitHub is connected only in the Ryze AI app. It cannot be connected from Claude or ChatGPT with a connection link.
Open Integrations
In Ryze AI open Integrations and click Connect on the GitHub card.
Choose how to set up
Pick Set up with Agent, or I'll do it manually.
Install the GitHub App
GitHub opens. Choose the account or organization and grant access to the repository or repositories Ryze AI should publish to. You can limit access to one repo.
Choose where articles go
GitHub returns you to Ryze AI. Set the Repository, Blog URL, Branch and Folder path.
There is one GitHub connection per workspace. The app installation can be granted several repositories, but article publishing goes to the one repository you configured. To disconnect, uninstall the app from your GitHub account's Settings, under Applications, or remove the integration in Ryze AI.
The same repo in Claude and ChatGPT
Once GitHub is connected in Ryze AI, the AI Marketer in the app chat and, through the Ryze AI connector at https://connector.get-ryze.ai/mcp, Claude, ChatGPT and other MCP clients can use 5 GitHub tools on repositories the GitHub App can access.
github__read
- Access
- Read
- What it does
- Runs a read-only GitHub REST API request, such as file contents, trees and branches, with paging for large files
github__write
- Access
- Write
- What it does
- Runs a request that creates or updates resources, such as committing files, creating branches and opening pull requests
github__delete
- Access
- Delete
- What it does
- Runs a DELETE request, such as deleting a branch or a file
github__edit_file
- Access
- Write
- What it does
- Makes find-and-replace edits to an existing file in the connected repository and branch and commits the change
github__search_file
- Access
- Read
- What it does
- Searches a file in the connected repository and returns matching lines with line numbers and context
| Tool | Access | What it does |
|---|---|---|
| github__read | Read | Runs a read-only GitHub REST API request, such as file contents, trees and branches, with paging for large files |
| github__write | Write | Runs a request that creates or updates resources, such as committing files, creating branches and opening pull requests |
| github__delete | Delete | Runs a DELETE request, such as deleting a branch or a file |
| github__edit_file | Write | Makes find-and-replace edits to an existing file in the connected repository and branch and commits the change |
| github__search_file | Read | Searches a file in the connected repository and returns matching lines with line numbers and context |
The promise that Ryze AI writes only inside your folder path describes article publishing. The write and delete tools can commit, create branches, open pull requests and delete files anywhere in repositories the GitHub App is installed on. Grant the app only the repositories you want an agent to touch.
In the Ryze AI app chat, the Tool approvals picker defaults to Skip all approvals. Switch it to Approve write & delete or Manual approve in the message box. In Claude, set each tool under Customize, Connectors, Ryze AI, Tool permissions; the Ryze AI help center recommends Needs approval for write and delete tools.
Connecting the connector is free. The GitHub tools need any active Ryze AI plan or trial. The edit tool changes only files that already exist; new files are created with the write tool.
Prompts to try once GitHub is connected
- Show me the files in my blog data folder and list any article whose image is null.
- Search the article file for my ai-ad-agency slug for the word pricing and show the matching lines.
- Create a branch for a blog layout change and open a pull request that adds a reading time field to the post template.
- Find the converter file that builds blog pages from the JSON files and tell me which fields it reads.
Prompts describe the work. What comes back depends on your repository.
Limits to know before you connect
Your site renders the files
- Detail
- Ryze AI writes JSON. Your site needs its own converter and build step to show articles as pages.
Connected in the app only
- Detail
- GitHub is set up in the Ryze AI app, not from Claude or ChatGPT.
Repository access
- Detail
- Only repositories you grant the Ryze AI GitHub App are reachable.
One publishing target
- Detail
- One GitHub connection per workspace, and article publishing goes to the one configured repository.
Editing existing files only
- Detail
- github__edit_file changes existing files. Creating new files uses github__write.
| Limit | Detail |
|---|---|
| Your site renders the files | Ryze AI writes JSON. Your site needs its own converter and build step to show articles as pages. |
| Connected in the app only | GitHub is set up in the Ryze AI app, not from Claude or ChatGPT. |
| Repository access | Only repositories you grant the Ryze AI GitHub App are reachable. |
| One publishing target | One GitHub connection per workspace, and article publishing goes to the one configured repository. |
| Editing existing files only | github__edit_file changes existing files. Creating new files uses github__write. |
If you host on GitHub Pages
GitHub documents that Pages source repositories have a recommended limit of 1 GB, published sites may be no larger than 1 GB, there is a soft bandwidth limit of 100 GB per month, and a soft limit of 10 builds per hour that does not apply to custom GitHub Actions workflows. GitHub also says Pages is not intended to run an online business or e-commerce site. Check the current page before relying on these numbers.
Troubleshooting
- Repository missing from the list: the GitHub App was not granted that repo. Reopen the app's settings on GitHub and add it.
- Files appear but no page does: the site has no converter or build step for the folder yet. Use Set up with Agent from the GitHub card.
- Wrong branch: the Branch field defaults to the repo's default branch. Change it in the integration settings.
- Article link opens a 404: check the Blog URL, because Ryze AI appends the slug to it.
- Images blocked: allow the whole image host in your framework image settings or content security policy.
Still stuck? Email Ryze AI support or read the Ryze AI GitHub guide.
Sources
Verdict
Choose the GitHub integration if your blog already lives in a Git repository and you want AI-written articles to arrive as reviewable commits. Skip it if you need a hosted blog with no build step, because the rendering is your job. See SEO Starter pricing and the Ryze AI SEO tool.




