blogr.ai

Docs

Shopify

Publish articles into your Shopify store blog and topical-map inner pages as Online Store pages through the Admin API, live on your storefront.

How it works

Every Shopify store has a built-in blog under Content → Blog posts. With the connection in place, clicking Publish creates the article in your chosen blog through Shopify's GraphQL Admin API. The article goes live on your storefront at once, under your own domain.

Before you start

  • Sign in to Shopify as the store owner, or as staff with the Develop apps permission. The app is created in Shopify's Dev Dashboard for your store, not inside blogr.
  • Your store needs at least one blog under Content → Blog posts in your Shopify admin. New stores come with one called "News".
  • Since January 2026 Shopify no longer creates custom apps under Settings → Apps and sales channels → Develop apps, and no longer shows a permanent Admin API access token. Every new app lives in the Dev Dashboard and shows a Client ID and a Client secret instead. blogr signs in with those and renews the short-lived access token itself.

Connect Shopify

Eight steps, about five minutes. Five happen in Shopify's Dev Dashboard, one in your Shopify admin, and two in blogr. Watch the walkthrough, or follow the written steps below it.

Watch the video on YouTube if it does not play here.

  1. Open the Dev Dashboard. Go to dev.shopify.com/dashboard and sign in with your Shopify account. Click the organization name at the top right and check that Stores in the left menu lists your store. If you belong to several organizations, switch to the one that lists it, or the app will not be able to sign in to the store later.
  2. Create the app. Open Apps in the left menu and click Create app at the top right. Choose Start from Dev Dashboard, name the app blogr, and click Create.
  3. Release a version with the content scopes. Open the Versions tab and click Create version. Leave the app URL at its default (https://shopify.dev/apps/default-app-home), pick the newest Webhooks API version, and under Access scopes add read_content and write_content. Click Release. Without a released version the app cannot be installed. (Shopify's own walkthrough: Create apps using the Dev Dashboard.)
  4. Install the app on your store. Open the Home tab, scroll down to Install app, select your store, and click Install. Shopify opens your store admin and lists what the app can access (blog posts and pages); approve it.
  5. Copy the credentials. Open the Settings tab. Under Credentials, copy the Client ID (32 characters). Next to Secret, click the eye icon to reveal it and copy the whole value, which starts with shpss_. Do not click Rotate: that replaces the secret, and blogr would need the new one. (Shopify's reference: locate your credentials.)
  6. Find your store address. In your Shopify admin, open Settings → Domains. The permanent address ends in .myshopify.com and is the one blogr needs, even when your storefront runs on a custom domain. Articles still publish under the custom domain.
  7. Connect in blogr. Open Setup → Publishing in your blogr.ai dashboard and choose Shopify. Enter the .myshopify.com address, paste the Client ID and the Client secret, and click Save. blogr signs the app in against your store right away, so a wrong value is caught before anything is stored.
  8. Pick the blog. A store with one blog connects on the spot. With several, a Blog dropdown appears; choose the one articles should publish into and click Save again.
  9. Optional: add site pages to a menu. To link your topical map's pages from the store navigation, also add read_online_store_navigation and write_online_store_navigation when you release the app version. Then reopen the Shopify card in Setup → Publishing and pick a menu under Add site pages to menu (the footer menu works well). Each new top-level page, such as /pages/pricing or the /pages/compare hub, joins that menu when it is published. Pages under a hub are linked from the hub, and a page you remove from the menu stays removed.

A website publishes to one destination, so connecting Shopify replaces any other integration on the website.

What gets published

Each article is created in the blog with everything blogr.ai prepared:

  • The title, the URL handle (from the article's slug), and the article body as HTML, rendered in your theme's blog design.
  • The meta description, both as the article excerpt shown on the blog index and in the search engine listing.
  • The SEO page title and meta description land in the same fields Shopify's "Search engine listing" editor writes, so themes render them as the page title and description.
  • Categories and tags, merged into Shopify's tag list.
  • The generated share image as the article's featured image, with its alt text. Shopify copies it onto its own CDN.
  • The article is published immediately with your business name as the author byline.
  • Inner pages from your topical map (pricing, comparisons, services, locations) become Online Store pages, published at once with the SEO title and description. Shopify pages live at /pages/{handle}, so the map path becomes one handle: /pricing/ lands at /pages/pricing and /compare/acme-alternatives/ at /pages/compare-acme-alternatives. Republishing updates the same page.

The article's URL on your storefront (your primary domain, /blogs/your-blog/the-article) is recorded on the article in your workspace.

Failed deliveries and retries

If Shopify rejects a publish, say the app was uninstalled from the store or a rate limit was hit, the article is marked "Failed to publish" in your workspace with the reason on the row. Fix the cause (or save the connection again in Setup → Publishing) and click Retry publish.

Troubleshooting

Message Fix
"Shopify would not sign this app in to the store"The app and the store are in different Dev Dashboard organizations, or the app is not installed on the store. In the Dev Dashboard, switch to the organization whose Stores page lists your store, create the app there, and install it from the app's Home tab.
"Shopify rejected these credentials"The Client ID or Client secret is wrong, incomplete, or was rotated. Open the app's Settings tab in the Dev Dashboard, copy both values again in full, and save the connection.
"Shopify refused to read the store's content"The released version is missing a scope. On the Versions tab, create a new version with both read_content and write_content, release it, then approve the new permissions in your store admin (Shopify asks the next time you open the app from Apps there).
"Shopify refused to read the store's menus"Adding pages to a menu needs two more scopes. Create a new version that also has read_online_store_navigation and write_online_store_navigation, release it, approve the new permissions in your store admin, and save the Shopify card again. Publishing works without them; pages just stay out of your menus.
"This store has no blog yet"Create one under Content → Blog posts → Manage blogs in your Shopify admin, then save the connection again.
"Could not reach your Shopify store"Check the .myshopify.com address for typos. It is the permanent address under Settings → Domains, not your custom domain.

Good to know

  • Publishing an article again updates the existing article in the blog instead of creating a duplicate.
  • If the handle is already taken by unrelated content, Shopify may adjust it (adding -1). We record the URL Shopify actually assigned.
  • The Client secret and the access token are stored encrypted and never leave our servers. The app only grants what you released: blog posts, pages, and (if you add those scopes) navigation menus, nothing about orders or customers.
  • Shopify's access tokens last 24 hours. blogr requests a new one with your Client ID and secret whenever the current one is about to expire, so there is nothing to renew by hand.
  • Rotating the Client secret in the Dev Dashboard, or uninstalling the app from the store, disconnects publishing. Paste the new secret (or reinstall the app) in Setup → Publishing to reconnect.
  • Shopify strips scripts and some embed markup from article HTML, in line with its own editor.