|
| 1 | +# Distribución automática de notas — lo que debes hacer de tu lado |
| 2 | + |
| 3 | +Cuando haces `git push` a `main` con una nota nueva en `src/content/notes/`, el |
| 4 | +workflow **Distribuir nota** (`.github/workflows/distribute-note.yml`) la publica |
| 5 | +solo en blogs/redes y avisa a los buscadores. |
| 6 | + |
| 7 | +**Todo funciona sin configurar nada** — pero cada plataforma está apagada hasta |
| 8 | +que añadas sus secrets. No configuras secrets = esa plataforma se salta con |
| 9 | +gracia (el resto sigue). Ve activando una por una. |
| 10 | + |
| 11 | +## Dónde se ponen los secrets |
| 12 | + |
| 13 | +GitHub → tu repo → **Settings → Secrets and variables → Actions → New repository |
| 14 | +secret**. El nombre debe ser exacto (los de abajo). |
| 15 | + |
| 16 | +Para probar sin publicar una nota real: pestaña **Actions → Distribuir nota → |
| 17 | +Run workflow**, y pega la ruta de una nota existente. |
| 18 | + |
| 19 | +--- |
| 20 | + |
| 21 | +## 1. IndexNow — ✅ ya funciona, no hagas nada |
| 22 | + |
| 23 | +Avisa a Bing, Yandex, Seznam, Naver y Yep. La clave es pública por diseño (ya |
| 24 | +está en el repo). Cero configuración. |
| 25 | + |
| 26 | +--- |
| 27 | + |
| 28 | +## 2. dev.to — el más fácil y el de más valor SEO |
| 29 | + |
| 30 | +Cross-postea el artículo completo con `canonical_url` → codebymike.tech. Backlink |
| 31 | +de un dominio con autoridad, sin penalización por duplicado. |
| 32 | + |
| 33 | +1. Entra a https://dev.to/settings/extensions |
| 34 | +2. Baja a **DEV Community API Keys** → genera una key. |
| 35 | +3. Secret: |
| 36 | + - `DEVTO_API_KEY` = esa key |
| 37 | + |
| 38 | +--- |
| 39 | + |
| 40 | +## 3. Hashnode — otro backlink de autoridad |
| 41 | + |
| 42 | +1. Token: https://hashnode.com/settings/developer → **Generate new token** (PAT). |
| 43 | +2. Publication ID: entra a tu blog de Hashnode → Dashboard. El ID sale en la URL |
| 44 | + del dashboard o en Settings. (Si no lo encuentras, avísame y lo sacamos por la |
| 45 | + API de Hashnode.) |
| 46 | +3. Secrets: |
| 47 | + - `HASHNODE_TOKEN` = el PAT |
| 48 | + - `HASHNODE_PUBLICATION_ID` = el ID de tu publicación |
| 49 | + |
| 50 | +--- |
| 51 | + |
| 52 | +## 4. X (Twitter) — el más engorroso de configurar (una vez) |
| 53 | + |
| 54 | +Necesitas una **app** en el portal de desarrolladores con permisos de escritura. |
| 55 | + |
| 56 | +1. https://developer.x.com/en/portal/dashboard → crea un Project + App. |
| 57 | +2. En la App: **User authentication settings** → activa OAuth 1.0a con permiso |
| 58 | + **Read and write**. |
| 59 | +3. En **Keys and tokens** genera: |
| 60 | + - API Key y API Key Secret (de la app) |
| 61 | + - Access Token y Access Token Secret (de tu usuario) — **regenéralos DESPUÉS |
| 62 | + de poner permiso Read and write**, o el token será de solo lectura. |
| 63 | +4. Secrets: |
| 64 | + - `X_API_KEY` |
| 65 | + - `X_API_SECRET` |
| 66 | + - `X_ACCESS_TOKEN` |
| 67 | + - `X_ACCESS_SECRET` |
| 68 | + |
| 69 | +> El tier gratis permite ~500 posts/mes de escritura. De sobra. |
| 70 | +
|
| 71 | +--- |
| 72 | + |
| 73 | +## 5. LinkedIn — el que hay que renovar cada ~60 días |
| 74 | + |
| 75 | +Requiere una app aprobada con el producto **Share on LinkedIn** / **Sign In**. |
| 76 | + |
| 77 | +1. https://www.linkedin.com/developers/apps → crea una app (asóciala a una |
| 78 | + página de empresa; sirve la tuya). |
| 79 | +2. Products → añade **Share on LinkedIn** (y **Sign In with LinkedIn using |
| 80 | + OpenID Connect** para obtener tu URN). |
| 81 | +3. Genera un **access token** con scope `w_member_social` (OAuth). El token de |
| 82 | + usuario **caduca a los ~60 días** → toca regenerarlo (te avisaré cuando falle). |
| 83 | +4. Tu URN de autor: es `urn:li:person:XXXX` donde `XXXX` es tu member id (lo |
| 84 | + devuelve el endpoint `/v2/userinfo` como `sub`). |
| 85 | +5. Secrets: |
| 86 | + - `LINKEDIN_TOKEN` = el access token |
| 87 | + - `LINKEDIN_AUTHOR_URN` = `urn:li:person:XXXX` |
| 88 | + |
| 89 | +--- |
| 90 | + |
| 91 | +## 6. Instagram — opcional y quisquilloso (déjalo para el final) |
| 92 | + |
| 93 | +Instagram **no permite posts de solo texto**: se publica con una imagen (usamos |
| 94 | +tu `og-default.png`). Requiere: |
| 95 | + |
| 96 | +- Cuenta de Instagram **Business o Creator** (no personal). |
| 97 | +- Conectada a una **página de Facebook**. |
| 98 | +- Una **app de Meta** (https://developers.facebook.com) con el producto |
| 99 | + **Instagram Graph API**. |
| 100 | +- Un **token de larga duración** y el **IG user id**. |
| 101 | + |
| 102 | +Secrets: |
| 103 | +- `IG_USER_ID` |
| 104 | +- `IG_ACCESS_TOKEN` |
| 105 | + |
| 106 | +> Si te interesa Instagram de verdad, el siguiente paso sería generar una imagen |
| 107 | +> por nota (no la OG genérica) para que no salgan todas iguales. Dímelo y lo |
| 108 | +> montamos. |
| 109 | +
|
| 110 | +--- |
| 111 | + |
| 112 | +## 7. Google Indexing API — indexa en Google en horas, no días |
| 113 | + |
| 114 | +Complementa a IndexNow (que Google no usa). |
| 115 | + |
| 116 | +1. https://console.cloud.google.com → crea un proyecto (o usa uno). |
| 117 | +2. Habilita **Web Search Indexing API**. |
| 118 | +3. Crea una **Service Account** → **Keys** → **Add key → JSON**. Descarga el JSON. |
| 119 | +4. En **Google Search Console** → tu propiedad codebymike.tech → Settings → |
| 120 | + **Users and permissions** → añade el email de la service account |
| 121 | + (`...@...iam.gserviceaccount.com`) como **Owner**. |
| 122 | +5. Secret: |
| 123 | + - `GOOGLE_INDEXING_SA` = **pega el contenido completo del JSON** descargado. |
| 124 | + |
| 125 | +--- |
| 126 | + |
| 127 | +## 8. Aviso si algo falla (opcional) |
| 128 | + |
| 129 | +Si una publicación es rechazada, te llega push a tu teléfono (reusa tu ntfy). |
| 130 | + |
| 131 | +- `NTFY_TOPIC` = tu topic de ntfy (probablemente ya lo tienes de los otros |
| 132 | + workflows). |
| 133 | + |
| 134 | +--- |
| 135 | + |
| 136 | +## Resumen: prioridad recomendada |
| 137 | + |
| 138 | +| Prioridad | Plataforma | Esfuerzo | Por qué | |
| 139 | +|-----------|-----------|----------|---------| |
| 140 | +| 1 | dev.to | Bajo | Máximo SEO, 2 minutos | |
| 141 | +| 2 | Google Indexing | Medio | Indexación rápida en Google | |
| 142 | +| 3 | Hashnode | Bajo | Otro backlink de autoridad | |
| 143 | +| 4 | X | Alto (una vez) | Alcance social | |
| 144 | +| 5 | LinkedIn | Alto + mantenimiento | Alcance profesional | |
| 145 | +| 6 | Instagram | Alto | Opcional, requiere imagen | |
| 146 | + |
| 147 | +Empieza por dev.to: añade `DEVTO_API_KEY`, ve a Actions → Run workflow con una |
| 148 | +nota existente, y mira que aparezca publicada. Cuando eso funcione, sumas las |
| 149 | +demás. |
0 commit comments